Página 1 de 1

Saber qual Browse está em foco

Enviado: 30 Jun 2020 16:58
por Adson
Olá, galera!
Sou novato no xHarbour e tenho uma dúvida: Tenho 2 browse's na tela e em determinado momento, preciso saber qual deles está em foco. Como identificar isso?

Versão: xHarbour 123 HWGui

Saber qual Browse está em foco

Enviado: 30 Jun 2020 22:25
por Itamar M. Lins Jr.
Ola!
Depende, pra quê saber o foco entre um objeto e outro no windows ?
Melhor pegar ou aplicar o foco do que perguntar onde está.

Código: Selecionar todos

oBrwMaster:SetFocus()
oBrwSlave:Setfocus()
Geralmente tem um cursor, ou cor diferente.
http://www.kresin.ru/en/hwgdoc_function ... Functions5
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.

hwg_GetSkip( oParent, hCtrl, nSkip )
Sets the input focus to other GET item.
oParent - an object of a parent window;
hCtrl - a handle of a control;
nSkip - a number of GET items to skip (positive or negative).
Saudações,
Itamar M. Lins Jr.

Saber qual Browse está em foco

Enviado: 01 Jul 2020 08:56
por Adson
[img]c:\temp\2browses.JPG[/img]
Em ambos os browses o usuário pode teclar F2 para marcar/desmarcar todos os registros. Por isso, na rotina que faz o tratamento eu preciso saber qual é o browse em que o usuário está com o foco.
Deveria ser algo semelhante à função que vc citou hwg_GetFocus(), mas estou usando XHarbour com Minigui

Saber qual Browse está em foco

Enviado: 01 Jul 2020 09:41
por Itamar M. Lins Jr.
Ola!
Versão: xHarbour 123 HWGui
Deveria ser algo semelhante à função que vc citou hwg_GetFocus(), mas estou usando XHarbour com Minigui
E pq está perguntando no forum da Hwgui ?
Vai entender ??

Saudações,
Itamar M. Lins Jr.

Saber qual Browse está em foco

Enviado: 01 Jul 2020 10:28
por Adson
Desculpe-me. Como disse, SOU NOVATO.
Eu informei errado, o correto é HWGUI 2.17, e não Minigui

Obrigado.

Saber qual Browse está em foco

Enviado: 01 Jul 2020 10:41
por sygecom
Adson,
Se você está usando o F2 na tela com oBr:bKeyDown e, ambas chamam a mesma rotina, você pode enviar por parâmetro o objeto do browse que está chamando, exemplo:

oBr1:bKeyDown := {|o,key| BROWSEKEY_ATIVO(o, key ) }

Saber qual Browse está em foco

Enviado: 01 Jul 2020 13:02
por Adson
Obrigado a todos pelas respostas.
Problema resolvido !!!

Saber qual Browse está em foco

Enviado: 01 Jul 2020 13:10
por Itamar M. Lins Jr.
Ola!
Coloca a solução para nós, se for possível.

Saudações,
Itamar M. Lins Jr.

Saber qual Browse está em foco

Enviado: 01 Jul 2020 16:14
por JoséQuintas
Na prática estou pensando em outra coisa:

Como o USUÁRIO sabe em qual browse está em foco?

Saber qual Browse está em foco

Enviado: 02 Jul 2020 13:31
por Adson
Essa foi a solução: Criei uma variável (_BFocus), e alimento-a na cláusula WHEN de cada browse. Dessa forma, na função que trata o F2, eu sei em qual dos 2 browses que o usuário está "mexendo". Não foi a solução mais "linda", mas funciona rs...

Código: Selecionar todos

...

SET KEY 0,VK_F2 TO {|| PontoPed_Seleciona()}

...

Browse 1:
    @ 37,32 BROWSE oBrowseFabr ARRAY SIZE 517,335 ;
         STYLE WS_TABSTOP       ;
         FONT HFont():Add( 'Arial Narrow',0,-13,400,,,);
         WHEN {||_BFocus := 'oBrowseFabr'}
   ...

Browse 2:
    @ 589,32 BROWSE oBrowseSecao ARRAY SIZE 271,335 ;
        STYLE WS_TABSTOP       ;
        FONT HFont():Add( 'Arial Narrow',0,-13,400,,,);
        WHEN {||_BFocus := 'oBrowseSecao'}
   ...

*
* Função que trata o F2
*
FUNCTION PontoPed_Seleciona()
  Local _vPos
  If _BFocus == 'oBrowseFabr'
    _vPos := oBrowseFabr
    For i := 1 To Len(_aFabr)
      _aFabr[i,3] := !_selFabr
    Next
    _selFabr    := !_selFabr
    oBrowseFabr := _vPos
    oBrowseFabr:Refresh()
  Else
    If _BFocus == 'oBrowseSecao'
      _vPos := oBrowseSecao
      For i := 1 To Len(_aSecao)
        _aSecao[i,3] := !_selSecao
      Next
      _selSecao    := !_selSecao
      oBrowseSecao := _vPos
      oBrowseSecao:Refresh()
    EndIf
  EndIf
  Return .T.   

Saber qual Browse está em foco

Enviado: 02 Jul 2020 16:34
por Itamar M. Lins Jr.
Ola!

Código: Selecionar todos

if oBrowseFabr:handle == hwg_GetFocus()
...
elseif oBrowseSecao:handle == hwg_GetFocus()
...
Vendo código fica mais fácil de entender.

Economia de 2 linhas WHEN {||_BFocus := 'oBro...'}

Saudações,
Itamar M. Lins Jr.

Saber qual Browse está em foco

Enviado: 02 Jul 2020 16:57
por Itamar M. Lins Jr.
Ola!
Uso para fazer help de get, etc...

Saudações,
Itamar M. Lins Jr

Saber qual Browse está em foco

Enviado: 02 Jul 2020 18:03
por Adson
Então, Itamar. Quando vc sugeriu na sua primeira resposta ao tópico, sobre o uso da função hwg_GetFocus(), eu tentei;
mas deu erro quando fui compilar (Unresolved external _HB_FUN_HWG_GETFOCUS referenced from OBJ\...).
Acho que a versão do HWGui que estou usando (2.17), não tem essa implementação.

Pode ter certeza que quando eu atualizar aqui a versão do HWGui, eu vou colocar conforme a sua sugestão.

Obrigado.

Saber qual Browse está em foco

Enviado: 02 Jul 2020 18:23
por Itamar M. Lins Jr.
Ola!
Essa função deve ser apenas GetFocus() ou SelfFocus() na 2.17 sem o prefixo hwg_

Código: Selecionar todos

  * source/window.c
    + HB_FUNC( SELFFOCUS )
     compares two handlers returning logical values. When only one parameter is passed, the comparison is made as GetFocus()
Saudações,
Itamar M. Lins Jr.

Saber qual Browse está em foco

Enviado: 03 Jul 2020 15:50
por Adson
Isso mesmo, Itamar. O nome dela é GetFocus()

Já substitui o fonte... ficou bem mais profissional agora rs... valewwwww!