Setfocus()
Moderador: Moderadores
-
Mário Isa
- Usuário Nível 4

- Mensagens: 907
- Registrado em: 07 Jul 2004 13:54
- Localização: Ilha Solteira-sp
Setfocus()
Tentei utilizar o comando setfocus() para "focar" uma janela diferente daquela que eu estou /
Sendo assim , adquiri o numero handle da janela pelo WAPI do maligno /
Até aí tudo ok ?
Mas quando fui utilizar
setfocus(handle)
Não funcionou / Tem algum outro comando ?
Mário
Sendo assim , adquiri o numero handle da janela pelo WAPI do maligno /
Até aí tudo ok ?
Mas quando fui utilizar
setfocus(handle)
Não funcionou / Tem algum outro comando ?
Mário
Re: Setfocus()
Já que começou a usar a WAPI, use também a função Window2Top(nWHandle) para botar sua janela pra frente das demais. Essa tal SetFocus() provavelmente deve ser utilizada para dar o foco para controles visuais.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
Mário Isa
- Usuário Nível 4

- Mensagens: 907
- Registrado em: 07 Jul 2004 13:54
- Localização: Ilha Solteira-sp
Re: Setfocus()
Sim Mr. Maligno!
Já estou utilizando a WINDOW2TOP /
Ocorre que, na execução do WAPI.EXE / por parte da aplicação fivewin / uma janela preta surge e desaparece em décimos de segundos / a idéia era suprimir tal efeito / Mário
Já estou utilizando a WINDOW2TOP /
Ocorre que, na execução do WAPI.EXE / por parte da aplicação fivewin / uma janela preta surge e desaparece em décimos de segundos / a idéia era suprimir tal efeito / Mário
Re: Setfocus()
Estranho. Mas e quando você obtém o número do handle? Essa janela preta também aparece?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
Mário Isa
- Usuário Nível 4

- Mensagens: 907
- Registrado em: 07 Jul 2004 13:54
- Localização: Ilha Solteira-sp
Re: Setfocus()
Sim, mas obtenho o handle apenas uma vez / Até aí não tem importância / Mas tenho que focar toda vez que se clica num certo botão / e aí ela aparece na hora de focar /
sim, porque dentro da aplicação faço:
comanda := 'wapi.exe -WINDOWTOTOP:123456 (este ultimo onumero do handle)
winexec(comanda)
E na hora da execução a janelinha do CMD (pretinha) aparece mas é tudo muito rápido / tipo 0.3 segundos / mas se eu pudesse suprimir isso seria melhor /
Mário
sim, porque dentro da aplicação faço:
comanda := 'wapi.exe -WINDOWTOTOP:123456 (este ultimo onumero do handle)
winexec(comanda)
E na hora da execução a janelinha do CMD (pretinha) aparece mas é tudo muito rápido / tipo 0.3 segundos / mas se eu pudesse suprimir isso seria melhor /
Mário
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Re: Setfocus()
Mário, se você está usando a FiveWin, veja o exemplo abaixo:
Abraços,
Código: Selecionar todos
#include "FiveWin.ch"
function Main()
Priv oWnd1, oWnd2
DEFINE WINDOW oWnd1 FROM 5, 5 TO 25, 60;
TITLE "Primeira Janela";
MENU MontaMenu1()
@ 6, 25 BUTTON oBnt1;
PROMPT "Ir para Segunda Janela";
OF oWnd1 SIZE 130, 25 ACTION oWnd2:SetFocus()
oBnt1:Hide()
ACTIVATE WINDOW oWnd1
return nil
function OutraJanela()
DEFINE WINDOW oWnd2 FROM 15, 15 TO 35, 70;
TITLE "Segunda Janela"
@ 7, 25 BUTTON oBnt2;
PROMPT "Voltar Primeira Janela";
OF oWnd2 SIZE 120, 25 ACTION oWnd1:SetFocus()
oBnt1:Show()
ACTIVATE WINDOW oWnd2 VALID ( oBnt1:Hide(), .T.)
return nil
function MontaMenu1()
local oMenu1
MENU oMenu1
MENUITEM "&Abrir Segunda Janela" ACTION OutraJanela()
ENDMENU
return oMenu1
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
-
Mário Isa
- Usuário Nível 4

- Mensagens: 907
- Registrado em: 07 Jul 2004 13:54
- Localização: Ilha Solteira-sp
Re: Setfocus()
Grande Toledo!
Mas, pelo que vi, o setfocus() seta o foco entre janelas e não entre aplicativos /
Ocorre o seguinte:
O que preciso é :
Eu tenho uma aplicação fivewin rodando e preciso que, logo após clicar num botão/ que a janela de primeiro plano / se torne outra / que é uma aplicação DOS que está rodando junto com a FIVEWIN /
Entendeu / eu achava que setfocus() setava o foco em outra aplicação / mas pelo que vejo ele serve para focar uma janela aberta pela mesma aplicação windows-fivewin
Mário
Mas, pelo que vi, o setfocus() seta o foco entre janelas e não entre aplicativos /
Ocorre o seguinte:
O que preciso é :
Eu tenho uma aplicação fivewin rodando e preciso que, logo após clicar num botão/ que a janela de primeiro plano / se torne outra / que é uma aplicação DOS que está rodando junto com a FIVEWIN /
Entendeu / eu achava que setfocus() setava o foco em outra aplicação / mas pelo que vejo ele serve para focar uma janela aberta pela mesma aplicação windows-fivewin
Mário
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Re: Setfocus()
Mário, tenta este exemplo então:
Para fazer um teste, abra o Excel e o Prompt de Comando (provavelmente você já vai estar usando o Prompt) antes de executar o exemplo.
Observe que estou minimizando as janelas do Excel e do Prompt de Comando na hora que o exemplo é inicializado, estou fazendo isto porque se elas não estiverem minimizadas o foco não vai para a janela. Neste caso, você tem que arrumar um jeito de minimizar a janela do Prompt de Comando quando retornar para a janela do seu programa.
Abraços,
Código: Selecionar todos
#include "Fivewin.ch"
function Main()
Local oWnd1, oBnt1, oBnt2
DEFINE WINDOW oWnd1 FROM 5, 5 TO 25, 70;
TITLE "Janela do seu Programa"
@ 6, 10 BUTTON oBnt1;
PROMPT "Ir para Janela do Excel";
OF oWnd1 SIZE 150, 25 ACTION MudarJanela("Excel",9)
@ 6, 40 BUTTON oBnt2;
PROMPT "Ir para Janela Prompt de Comando";
OF oWnd1 SIZE 180, 25 ACTION MudarJanela("Prompt de Comando",9)
ACTIVATE WINDOW oWnd1 ON INIT MinimizarJanelas()
return nil
function MudarJanela(cTitulo, nModo)
Local hWnd := ProcuraJanela( cTitulo )
IF !EMPTY( hWnd )
SHOWWINDOW( hWnd, nModo )
ELSE
MsgInfo("Janela não encontrada")
ENDIF
return nil
function ProcuraJanela( cTitle )
Local hWnd := GETWINDOW( GETDESKTOPWINDOW(), 5 )
DO WHILE (hWnd != 0)
IF UPPER( cTitle ) $ UPPER( GETWINDOWTEXT( hWnd ) )
return hWnd
ENDIF
hWnd = GETWINDOW( hWnd, 2 )
ENDDO
return nil
function MinimizarJanelas()
MudarJanela("Excel",6)
MudarJanela("Prompt de Comando",6)
return nilObserve que estou minimizando as janelas do Excel e do Prompt de Comando na hora que o exemplo é inicializado, estou fazendo isto porque se elas não estiverem minimizadas o foco não vai para a janela. Neste caso, você tem que arrumar um jeito de minimizar a janela do Prompt de Comando quando retornar para a janela do seu programa.
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
-
Mário Isa
- Usuário Nível 4

- Mensagens: 907
- Registrado em: 07 Jul 2004 13:54
- Localização: Ilha Solteira-sp
Re: Setfocus()
Eu modifiquei o programinha e deixei-o assim :
Mas não funcionou! Nem como calculadora e nem como a minha aplicação DOS / ou seja, nada aconteceu / a janela que teria que vir para primeiro plano não veio / dica: estou utilizando o fivewin 2.0 / compilando com o blinker 7.0 / Mário
Quando eu chamo a função faço assim ://-----------------
function MudarJanela(cTitulo, nModo)
Local hWnd := ProcuraJanela( cTitulo )
msginfo(hwnd)
IF !EMPTY( hWnd )
SHOWWINDOW( hWnd, nModo )
ENDIF
return nil
//================
function ProcuraJanela( cTitle )
Local hWnd := GETWINDOW( GETDESKTOPWINDOW(), 5 )
DO WHILE (hWnd != 0)
IF UPPER( cTitle ) $ UPPER( GETWINDOWTEXT( hWnd ) )
return hWnd
ENDIF
hWnd = GETWINDOW( hWnd, 2 )
ENDDO
return nil
É claro que eu só utilizei a palavra calculadora para testar e o msginfo(hwnd) lá em cima é só para verificar se ele pegou mesmo algum numero handle prá janela.MudarJanela("calculadora",9)
Mas não funcionou! Nem como calculadora e nem como a minha aplicação DOS / ou seja, nada aconteceu / a janela que teria que vir para primeiro plano não veio / dica: estou utilizando o fivewin 2.0 / compilando com o blinker 7.0 / Mário
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Re: Setfocus()
Mário, este último exemplo que lhe passei, eu testei aqui e funciona certinho... o único problema é que quando você retornar para o seu programa, tem que dar um jeito de minimizar a janela (MinimizarJanelas()) que você estava usando.
Compile este meu exemplo e faça um teste.
Abraços,
Compile este meu exemplo e faça um teste.
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
-
Mário Isa
- Usuário Nível 4

- Mensagens: 907
- Registrado em: 07 Jul 2004 13:54
- Localização: Ilha Solteira-sp
Re: Setfocus()
Alguém sabe como fazer tudo isso que o Toledo me ensinou só que em xharbour ?
Procurei as funções
SHOWWINDOW( hWnd, nModo )
GETWINDOW( GETDESKTOPWINDOW(), 5 )
GETWINDOWTEXT( hWnd )
no xharbour e não encontrei no manual
Mário
Procurei as funções
SHOWWINDOW( hWnd, nModo )
GETWINDOW( GETDESKTOPWINDOW(), 5 )
GETWINDOWTEXT( hWnd )
no xharbour e não encontrei no manual
Mário
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Setfocus()
Olá Mario,
Não sei se é bem o que você quer mas para focalizar meu aplicativo eu uso as funções abaixo:
Chamo a seguinte função:
Focaliza_App()
Não sei se é bem o que você quer mas para focalizar meu aplicativo eu uso as funções abaixo:
Chamo a seguinte função:
Focaliza_App()
Código: Selecionar todos
*********************
Function Focaliza_App
*********************
oWnd := SY_FindWindow("Titulo da janela")
SY_SwitchToThisWindow(oWnd,.f.)
SY_showWindow( oWnd, 3 )
Return Nil
#pragma BEGINDUMP
#include "hbapi.h"
#include <windows.h>
VOID SY_SwitchToThisWindow( HWND hWnd, BOOL fAltTab );
HB_FUNC( SY_FINDCONSOLEHANDLE ) //FindConsoleHandle
{
HWND hwnd;
AllocConsole();
hwnd = FindWindowA("ConsoleWindowClass",NULL);
hb_retnl( (LONG) hwnd );
}
HB_FUNC( SY_CLOSEWINDOW )
{
hb_retl( CloseWindow( (HWND) hb_parnl(1) ) );
}
HB_FUNC( SY_FINDWINDOW )
{
hb_retnl((ULONG) FindWindow( (LPCSTR)
NULL, hb_parcx(1))) ;
}
HB_FUNC( SY_GETFOREGROUNDWINDOW )
{
HWND hwnd;
hwnd = GetForegroundWindow();
hb_retnl( (LONG) hwnd );
}
HB_FUNC( SY_SHOWWINDOW )
{
hb_retl( ShowWindow(
(HWND) hb_parnl(1), hb_parni(2) ));
}
HB_FUNC( SY_SETFOREGROUNDWINDOW )
{
hb_retl( SetForegroundWindow(
(HWND) hb_parnl( 1 ) ) ) ;
}
HB_FUNC( SY_SWITCHTOTHISWINDOW )
{
HWND hWnd;
hWnd = (HWND) hb_parnl(1);
hb_retl(SetForegroundWindow(hWnd));
}
#pragma ENDDUMP
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
