Página 1 de 1

getbox action lostfocus/validate

Enviado: 11 Nov 2024 09:49
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.

getbox action lostfocus/validate

Enviado: 13 Nov 2024 14:19
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.