Clipper On Line • Ver Tópico - Setfocus()

Setfocus()

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

 

Setfocus()

Mensagempor Mário Isa » 29 Set 2008 09:17

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
Avatar de usuário

Mário Isa
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 902
Data de registro: 07 Jul 2004 13:54
Cidade/Estado: Ilha Solteira-sp
Curtiu: 5 vezes
Mens.Curtidas: 8 vezes

Re: Setfocus()

Mensagempor Maligno » 29 Set 2008 09:26

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!
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Re: Setfocus()

Mensagempor Mário Isa » 29 Set 2008 09:50

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
Avatar de usuário

Mário Isa
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 902
Data de registro: 07 Jul 2004 13:54
Cidade/Estado: Ilha Solteira-sp
Curtiu: 5 vezes
Mens.Curtidas: 8 vezes

Re: Setfocus()

Mensagempor Maligno » 29 Set 2008 10:00

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!
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Re: Setfocus()

Mensagempor Mário Isa » 29 Set 2008 13:36

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
Avatar de usuário

Mário Isa
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 902
Data de registro: 07 Jul 2004 13:54
Cidade/Estado: Ilha Solteira-sp
Curtiu: 5 vezes
Mens.Curtidas: 8 vezes

Re: Setfocus()

Mensagempor Toledo » 29 Set 2008 16:03

Mário, se você está usando a FiveWin, veja o exemplo abaixo:

#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


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
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Re: Setfocus()

Mensagempor Mário Isa » 29 Set 2008 17:16

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
Avatar de usuário

Mário Isa
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 902
Data de registro: 07 Jul 2004 13:54
Cidade/Estado: Ilha Solteira-sp
Curtiu: 5 vezes
Mens.Curtidas: 8 vezes

Re: Setfocus()

Mensagempor Toledo » 29 Set 2008 19:47

Mário, tenta este exemplo então:

#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 nil


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,
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
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Re: Setfocus()

Mensagempor Mário Isa » 02 Out 2008 23:09

Eu modifiquei o programinha e deixei-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


Quando eu chamo a função faço assim :
MudarJanela("calculadora",9)


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

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
Avatar de usuário

Mário Isa
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 902
Data de registro: 07 Jul 2004 13:54
Cidade/Estado: Ilha Solteira-sp
Curtiu: 5 vezes
Mens.Curtidas: 8 vezes

Re: Setfocus()

Mensagempor Toledo » 07 Out 2008 19:04

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,
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
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Re: Setfocus()

Mensagempor Mário Isa » 21 Mar 2009 09:23

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
Avatar de usuário

Mário Isa
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 902
Data de registro: 07 Jul 2004 13:54
Cidade/Estado: Ilha Solteira-sp
Curtiu: 5 vezes
Mens.Curtidas: 8 vezes

Re: Setfocus()

Mensagempor sygecom » 23 Mar 2009 09:16

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()

*********************
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
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7017
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 133 vezes




Retornar para FiveWin

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro