Página 1 de 3
foco no browse, dialog com button e browse
Enviado: 08 Mar 2024 14:28
por JoséQuintas
Não consigo resolver isso, pra abrir a dialog com foco no browse.
Pesquisando no fórum, encontrei mensagem minha kkkk
Mas aí seria hwgui 2.17, e não tem isso na atual.
Talvez quem tem hwgui 2.17 possa verificar como esse nInitFocus é usado depois.
foco no browse, dialog com button e browse
Enviado: 08 Mar 2024 17:57
por JoséQuintas
Melhorou, mas ainda não resolveu total.
O foco não está mais no button.
Mas pode teclar ENTER à vontade que não aciona o ENTER do browse.
Precisa mexer com setas primeiro.
Já tentei :nRowPos, :nCurrent, e nada.
foco no browse, dialog com button e browse
Enviado: 09 Mar 2024 06:46
por JoséQuintas
Faltou um complemento:
O primeiro não funciona, tem que ser o segundo
foco no browse, dialog com button e browse
Enviado: 09 Mar 2024 09:27
por ANDRIL
JoséQuintas escreveu:Precisa mexer com setas primeiro.
Não mexo com Hwgui a tempos, mas se colocasse no buffer do teclado a tecla HOME ou mesmo uma seta para ESQUERDA já tentou assim?
foco no browse, dialog com button e browse
Enviado: 09 Mar 2024 12:04
por sygecom
Exemplo abaixo como uso. Onde oBrowse é meu objeto do BROWSE.
Código: Selecionar todos
INIT DIALOG oDlg TITLE "Acerto de conta corrente" AT 352,140 SIZE 950,513 ;
FONT HFont():Add( '',0,-13,400,,,) CLIPPER NOEXIT;
STYLE DS_CENTER + WS_VISIBLE + WS_CAPTION + WS_SYSMENU
ON INIT{||(oDlg:nInitFocus := oBrowse:handle),.T. }
foco no browse, dialog com button e browse
Enviado: 09 Mar 2024 15:45
por JoséQuintas
Esse nInitFocus só tem na hwgui 2.17
Justamente olhando o fonte da hwgui 2.17 foi onde vi o dlg:control:SetFocus()
Na 2,23....
Na Dialog tem o button e o browse, e nada mais.
Finalmente, desse jeito, SetFocus() tira o foco do button.
Supõe-se que tenha ficado no browse, mas não se sabe.
foco no browse, dialog com button e browse
Enviado: 09 Mar 2024 16:15
por alxsts
Olá!
HwGUI Documentation escreveu:5.5. Controls handling functions.
hwg_SetFocus( handle )
Sets the keyboard focus to the specified GUI element (window or control).
handle - handle of a GUI element;
Return value - handle to the GUI element that previously had the keyboard focus.
hwg_GetFocus()
Retrieves the handle to the GUI element (window or control) that has the keyboard focus.
Return value - handle to the GUI element that has the keyboard focus.
foco no browse, dialog com button e browse
Enviado: 09 Mar 2024 18:53
por JoséQuintas
ANDRIL escreveu:Não mexo com Hwgui a tempos, mas se colocasse no buffer do teclado a tecla HOME ou mesmo uma seta para ESQUERDA já tentou assim?
Se alguém usa, já tem solução, é um jeito de saber se alguém usa.
O problema é que parece que ninguém usa a versão atual, a 2.17 pode ser considerada outra hwgui.
--------
Na prática, resta saber se teclar setas tem a ver com o foco ou não.
Já fiz vários testes, incluindo esse hwg_SetFocus()
foco no browse, dialog com button e browse
Enviado: 10 Mar 2024 00:30
por alxsts
Ola!
Analisando o fonte HBrowse.Prg, no
event handler do objeto browse (método onEvent()), verifiquei que quando a mensagem é
set focus, só executa a ação se houver conteúdo na variável de instância
bGetFocus (diferente de NIL). Sugiro testar colocando um codeblock nesta variável, na criação do browse. Por exemplo:
Depois disto, no momento apropriado, executar o refresh().
Estou sem máquina estes dias, acho que o HD bateu asas. Se não fosse isto, eu mesmo testaria.
foco no browse, dialog com button e browse
Enviado: 10 Mar 2024 02:21
por JoséQuintas
alxsts escreveu:Analisando o fonte HBrowse.Prg, no event handler do objeto browse (método onEvent()), verifiquei que quando a mensagem é set focus, só executa a ação se houver conteúdo na variável de instância bGetFocus (diferente de NIL). Sugiro testar colocando um codeblock nesta variável, na criação do browse. Por exemplo:
Apelei pra tudo
Código: Selecionar todos
xControl:bGetFocus := { | o | o:Refresh(), hwg_SetFocus( o:Handle ), o:Refresh() }
Talvez olhar na hwgui 2.17 se tem algo mais.
foco no browse, dialog com button e browse
Enviado: 10 Mar 2024 02:41
por alxsts
Olá!
Minha sugestão é alimentar o bGetFocus na criação do browse. No ON INIT da Dialog colocar oDlg:oBrw:setFocus() ou outro modo usando o handle com hwg_SetFocus()...
foco no browse, dialog com button e browse
Enviado: 10 Mar 2024 14:22
por JoséQuintas
Já fiz esse tipo de teste, até SendMessage() eu já usei.
Código: Selecionar todos
xControl:bGetFocus := { | o | o:Refresh(), hwg_SetFocus( o:Handle ), o:Refresh() }
Código: Selecionar todos
// setfocus on browse do not solve ENTER question
gui_DialogActivate( oThisForm:xDlg, { || gui_SetFocus( oThisForm:xDlg, @aItem[ CFG_FCONTROL ] ) } )
Código: Selecionar todos
FUNCTION gui_SetFocus( xDlg, xControl )
(xDlg); (xControl)
xDlg:xControl:SetFocus()
RETURN Nil
Como eu disse antes, PODE SER que o foco foi resolvido.
A única certeza é que ao abrir dialog:
- o foco não está mais no button
- ENTER no browse não faz nada de início
- Digitando seta, ou pra cima, ou pra baixo, ou pra direita, ou pra esquerda, o ENTER passa a funcionar, não só o ENTER, mas as próprias setas.
Aquele nInitFocus que existe na hwgui 2.17, tem em vários lugares nos fontes, em vários controles. não sei se vai ter uma solução simples pro browse na versão atual.
foco no browse, dialog com button e browse
Enviado: 10 Mar 2024 14:48
por JoséQuintas
kkkkkkkkkkkk
Código: Selecionar todos
#ifdef HBMK_HAS_HWGUI
xControl := aItem[ CFG_FCONTROL ]
// trying to solve bug
bCode := { |a,b,c| (A),(B),(C),oThisForm:xDlg:xControl:SetFocus(), ;
hwg_SetFocus( xControl:handle ), ;
hwg_SendMessage( oThisForm:xDlg:xControl:Handle, WM_SETFOCUS, 0, 0 ), ;
; // x := hwg_SelfFocus( xControl:Handle ) , ;
; //hwg_MsgInfo( iif( x, "YES", "NO" ) ), ;
hwg_SendMessage( oThisForm:xDlg:Handle, WM_KEYDOWN, VK_RIGHT, 0 ), ;
hwg_SendMessage( oThisForm:xDlg:Handle, WM_KEYDOWN, VK_LEFT, 0 ) }
// wParam := hwg_PtrToUlong( wParam )
gui_DialogActivate( oThisForm:xDlg, bCode )
// { || gui_SetFocus( oThisForm:xDlg, @aItem[ CFG_FCONTROL ] ) } )
#else
gui_DialogActivate( oThisForm:xDlg )
#endif
( bCode )
RETURN Nil
Se eu testar o foco atual, ele está no browse, e tudo funciona.
Mas.... se retirar a mensagem hwg_MsgInfo(), não funciona.
foco no browse, dialog com button e browse
Enviado: 10 Mar 2024 14:55
por JoséQuintas
Mais simples, sem nada, só mensagem.
Código: Selecionar todos
#ifdef HBMK_HAS_HWGUI
bCode := { || hwg_MsgInfo( "ola" ) }
gui_DialogActivate( oThisForm:xDlg, bCode )
#else
gui_DialogActivate( oThisForm:xDlg )
#endif
( bCode )
Assim também funciona.
Conclusão: não é falta foco, pelo menos o foco normal, e nada que se faça vai mudar isso.
foco no browse, dialog com button e browse
Enviado: 10 Mar 2024 15:11
por JoséQuintas
Outro teste:
Código: Selecionar todos
bCode := { || hwg_SetFocus( oThisForm:xDlg:Handle ), oThisForm:xDlg:xControl:SetFocus() }
Somente com o foco pra dialog, o foco muda para o button.
Com os dois, o foco vai para o browse.
Mas mesma coisa: precisa teclar seta primeiro
Fiz só mais um teste depois, pra confirmar:
xDlg:xControl:SetFocus() seta o foco, é parte do que seria solução
browse:bGetFocus() não faz diferença
Algo mais precisa ser feito, mas só mexendo nos fontes da lib hwgui.