Como saber quando o form recebe o foco
Boa Tarde
A minha duvida e o seguinte digamos que tenho 2 forms um chamado TELA1 e o outro TELA2 e as duas estao abertas e posso alternar entre elas com o ALT + TAB. O que gostaria de saber e quando a TELA1 esta com o foco ou a TELA2 .
Grato
A minha duvida e o seguinte digamos que tenho 2 forms um chamado TELA1 e o outro TELA2 e as duas estao abertas e posso alternar entre elas com o ALT + TAB. O que gostaria de saber e quando a TELA1 esta com o foco ou a TELA2 .
Grato
Jaimesk
Curtidas 0
Respostas
Rodc
13/12/2007
Com o evento OnActivate()
GOSTEI 0
Jaimesk
13/12/2007
Certo onActivate so e executado 1 vez quando eu crio o form na primeira vez. No meu caso e o seguinte eu abro a TELA1 e dentro dela chamo a TELA2, ai vo ficar alternando entre as duas telas ou seja as duas serao criadas uma so vez e alternadas com o alt+tab quantas vezes o usuario quiser. Ai preciso saber em que momento elas vao receber o foco.
GOSTEI 0
Rodc
13/12/2007
Você testou? Eu testei aqui e funciona corretamente!
GOSTEI 0
Massuda
13/12/2007
Mexo com Delphi, mas isso também se aplica no CBuidler...
Cada form tem um OnActivate() que é disparado sempre que o form recebe o foco mas o objeto Application também tem um OnActivate(), que é disparado quando o programa recebe o foco.
Quando você alterna entre programas (usando Alt+Tab por exemplo), é gerado o evento OnActivate() ao Application, mas não é gerado o OnActivate() do form.
Cada form tem um OnActivate() que é disparado sempre que o form recebe o foco mas o objeto Application também tem um OnActivate(), que é disparado quando o programa recebe o foco.
Quando você alterna entre programas (usando Alt+Tab por exemplo), é gerado o evento OnActivate() ao Application, mas não é gerado o OnActivate() do form.
GOSTEI 0
Jaimesk
13/12/2007
O problema que estou tendo e que estou fazendo uma rotina TEF e do meu sistema vai para a tela das bandeira de cartao realiza a transacao ai volta o foco pra minha aplicacao ai e nesse momento e q preciso saber quando minha tela e mostrada na frente novamente porque as vezes as tela das bandeira demora um pouco pra ser fechada.
GOSTEI 0
Massuda
13/12/2007
Então você deve usar o evento Application.OnActivate.
GOSTEI 0
Jaimesk
13/12/2007
Consegui o codigo e o seguinte:
HWND TelaAtual, TelaDaFrente;
TelaAtual = Form1->Handle;
TelaDaFrente = GetForegroundWindow();
if (TelaAtual == TelaDaFrente )
{ // a tela se tornou a da frente
Application->MessageBox(´A Tela Esta na Frente de Todas´,´´);
}
else
{ // a tela se tornou a da frente
Application->MessageBox(´A Tela Esta Atraz de Outra´,´´);
}
HWND TelaAtual, TelaDaFrente;
TelaAtual = Form1->Handle;
TelaDaFrente = GetForegroundWindow();
if (TelaAtual == TelaDaFrente )
{ // a tela se tornou a da frente
Application->MessageBox(´A Tela Esta na Frente de Todas´,´´);
}
else
{ // a tela se tornou a da frente
Application->MessageBox(´A Tela Esta Atraz de Outra´,´´);
}
GOSTEI 0