foco no browse, dialog com button e browse

Projeto HwGui - 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

foco no browse, dialog com button e browse

Mensagem por JoséQuintas »

Não consigo resolver isso, pra abrir a dialog com foco no browse.

Pesquisando no fórum, encontrei mensagem minha kkkk
hwguifoco.png
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.
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

foco no browse, dialog com button e browse

Mensagem por JoséQuintas »

Melhorou, mas ainda não resolveu total.

Código: Selecionar todos

   xDlg:xControl:SetFocus()
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.
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

foco no browse, dialog com button e browse

Mensagem por JoséQuintas »

Faltou um complemento:

Código: Selecionar todos

xControl:SetFocus()

xDlg:xControl:SetFocus()
O primeiro não funciona, tem que ser o segundo
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
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

foco no browse, dialog com button e browse

Mensagem 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?
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

foco no browse, dialog com button e browse

Mensagem 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. }
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

foco no browse, dialog com button e browse

Mensagem 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.
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/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

foco no browse, dialog com button e browse

Mensagem 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.

Código: Selecionar todos

hwg_SetFocus(xDlg:xControl:handle)
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

foco no browse, dialog com button e browse

Mensagem 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()
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/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

foco no browse, dialog com button e browse

Mensagem 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:

Código: Selecionar todos

oBr:bGetFocus := { |o| o:refreshLine() }
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.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

foco no browse, dialog com button e browse

Mensagem 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.
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/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

foco no browse, dialog com button e browse

Mensagem 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()...
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

foco no browse, dialog com button e browse

Mensagem 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.
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

foco no browse, dialog com button e browse

Mensagem 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.
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

foco no browse, dialog com button e browse

Mensagem 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.
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

foco no browse, dialog com button e browse

Mensagem 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.
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