Página 1 de 1

Muda o foco entre janelas XH+GTWVW ??

Enviado: 02 Fev 2007 12:13
por Cezar
Bom dia,

Tenho a seguinte dúvida:

1. Janela principal com os menus. Seleciona menu cadastro de usuários.

2. Abre uma janela com browse dos usuarios ja cadastrado e 2 botoes para Incluir / Excluir.

3. selecionada uma das opçoes abre-se uma terceira janela para Inlcuir ou alterar os dados.

Se clico na area visivel da segunda o foco fica na segunda, se clico na area da primeira o foco fica na primeira, etc..

O foco que agora esta na primeira eu só consigo voltar para terceira com o Mouse !!

Como mudar o foco sem usar o mouse ( usando talvez uma combinação de tecla Sifth+Tab por ex. ), ou impedir a perda do foco da terceira que estou editando??

Compliquei??

Grato pela orientação.
cez_a@ubi.com.br

Enviado: 02 Fev 2007 13:46
por Luiz
Se eu entendi você quer que o foco se mantenha na terceira janela (a mais recente), e caso o usuário clique numa janela atraz, o foco volte automaticamente para a janela atual?

Veja esse exemplo:

Código: Selecionar todos

procedure main
private nWin1,nWin2
  nWin1:=wvw_nOpenWindow('janela1',05,05,10,30)
    nWin2:=wvw_nOpenWindow('janela2',10,10,15,35)  
       wvw_settimer(nWin2,100)      
       inkey(0)
    wvw_lCloseWindow()
    wvw_settimer(nWin1,100)
    inkey(0)
  wvw_lCloseWindow()
  inkey(0)
return

function wvw_timer()
local nWnd:=wvw_GetWindowHandle(WVW_nSetCurWindow())
  Win_SetFocus(nWnd)
  @ 0,0 say 'Janela Atual - '+Time()
return nil
Nesse exemplo utilizei o timer da janela para manter o foco, ao fechar a janela, é ligado o timer da janela anterior.

Enviado: 04 Fev 2007 12:08
por Cezar
Bom dia, Luiz!

Sua sugestão funcionou??


Grato.

Enviado: 04 Fev 2007 22:52
por Luiz
O exemplo funciona beleza, porem encontrei uma forma melhor e que usa o recurso de foco da própria gtwvw.

Basta adicionar essa função no programa:

Código: Selecionar todos

FUNCTION WVW_SetFocus( hWnd, nWinNum )
local nHnd:=wvw_getwindowhandle(wvw_nsetcurwindow())
   if nWinNum==0
      return NIL
   endif
   win_setfocus(nHnd)
RETURN nil
A função wvw_setfocus é chamada automaticamente pelo gtwvw quando o foco de uma janela muda.

Enviado: 05 Fev 2007 10:09
por Cezar
Bom dia Luiz,

Muito inteligente essa sua nova solução!

Me ocorreu agora; que, talvez, sua solução também poderia ser usada para interceptar o fechamento da janela prinicipal "X" ??
Pelas coordenadas do mouse ??

Muito grato, tem nos ajudado muito.

cez_a@ubbi.com.br

Enviado: 05 Fev 2007 15:35
por Cezar
Boa tarde,


Testei a sua ideia do wvw_setfocus( ), e o resultado é que fica em loop!

cez_a@ubbi.com.br

Enviado: 05 Fev 2007 22:32
por Luiz
Os 2 exemplos são distintos, sendo que o segundo (wvw_setfocus) é nativo do próprio gtwvw, aqui funcionou blz evitando que a janela perca o foco.