getbox action lostfocus/validate

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

getbox action lostfocus/validate

Mensagem por JoséQuintas »

Tem uma situação não resolvida no dlgauto/fivelibs.
Todo mundo que tem HMG tem ele na pasta samples/advanced e pode verificar.

Ao abrir a dialog, e clicar em EDIT, há apenas um GET habilitado, o get do código.
Ele tem o button pra abrir o browse.

Digitou o código, ok, posiciona no registro correspondente.

O problema é: clicou no button, não abre o browse, porque executa o lostfocus/valid primeiro.

Código: Selecionar todos

@ ... GETBOX ...
     ACTION ...
      VALID ...
Na minigui, o problema foi relatado mas nunca mostraram solução.
No FIVEWIN funciona, e na HWGUI não tem equivalente, pelo menos que eu saiba.

Por enquanto ainda gostaria de resolver isso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

getbox action lostfocus/validate

Mensagem por JoséQuintas »

Hoje, explicando o problema para um usuário de minigui, comentei sobre isso ser igual o getbox perder o foco ao clicar no button.
Aí tive a idéia de testar o foco, e deu certo.

Código: Selecionar todos

FUNCTION frm_EditValidate( Self, aItem )

   LOCAL nSelect, lFound := .T., xValue, nPos

   // button on get
   IF GUI():IsCurrentFocus( ::xDlg, aItem[ CFG_FCONTROL ] )
      RETURN .F.
   ENDIF
A única situação onde o foco continua no GETBOX é quando clica no button do GETBOX.
Isso resolveu a questão.


Pra curiosidade, a função de teste

Código: Selecionar todos

STATIC FUNCTION gui_IsCurrentFocus( xDlg, xControl )

   LOCAL lOk

   IF PCount() == 1
      lOk := ( GetActiveWindow() == GetProperty( XDlg, "HANDLE" ) )
   ELSE
      lOk := ( GetProperty( xDlg, "FOCUSEDCONTROL" )  == xControl )
   ENDIF

   RETURN lOk
Agora funciona igual no fivewin, apesar de que no fivewin não precisar código fonte extra.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder