Ah! Pensei que você quisesse processar a mensagem!

Bem, de fato o que você fala é um problema no Windows. Quando você menos 
espera, aquela janela que você achava, por um motivo ou por outro, que 
deveria ficar ativa depois do processamento de uma rotina sua, não fica!

Tive esse problema quando codifiquei nos meus aplicativos a lógica para 
que apenas uma instância ficasse no ar. Quando a segunda instância era 
executada, ela encontrava a primeira instância no ar, a tornava a janela 
ativa e saia. Muitas vezes o efeito era o que você descreve. Resolvi o 
problema com dois comandos:

   SetForegroundWindow(hPai);
   ShowWindow(hPai, SW_RESTORE);

Com a diferença que meu "hPai" referia-se à janela do aplicativo mesmo 
(TApplication) e não a alguma janela (TForm) do aplicativo. Havia também 
tentado o método de TApplication antes, sem sucesso. Não sei se isso vai 
ajudar...

No seu caso, você está exibindo um menu e quer que o menu fique ativo? 
Não sei se isso irá resolver seu problema, mas pode ser o início de sua 
solução. Talvez você queira dar uma olhada na API do TrayIcon para ver 
se tem algo específico...

Cordialmente,

Demian Lessa
Salvador - Brasil

Filipe wrote:
> damian, poderia me dizer a fonte desta Informação?
> 
> naum está dando certo aki...
> 
> é q é o seguinte: tenho uma aplicação que fica no tary, tipo, num trayIcon, 
> escondida, e q gera uma dll (que starta um Hook de teclado) para que qdo eu 
> apertar "Espaço", por exemplo, mesmo q minha aplicação naum estiver ativa, 
> ele de um popUp no popUpMenu que está neste tray Icon.
> 
> Isso está dando certo, mas acontece que, as vezes consigo dar o popUp mas 
> naum consigo mexer no menu, será q tah dando pra entender? Isso porque minha 
> aplicação está "atrás" (as vezes atrás do próprio explorer)...
> 
> faço assim pra dar um popUp:
> 
>   if (Msg.wParam = 32) then  // se a dll mandar um espaço...
>   begin
>     Application.Restore;
>     Application.BringToFront;
>     Self.BringToFront;
>     HPai := FindWindow('TfcServi', 'fcServi');  // variavel HPai: THandle
>     SetForegroundWindow(HPai);
>     SetActiveWindow(HPai);
>     GetTopWindow(HPai);
>     PostMessage(hPai, WM_ACTIVATE, 0, 0);
> //    PostMessage(hPai, WM_SETFOCUS, 0, 0);
> //    PostMessage(hPai, WM_SHOWWINDOW, 0, 0);
>     fDataM.PmTray.Popup(Screen.Width, GetSystemMetrics(SM_CYFULLSCREEN) + 
> 20); // o PopUp tem que ser o último comando, caso contrário ele segura o 
> processamento até ser fechado.
>   end
> 
> tp, jah tentei isso, com varias combinações, e outros comandos tb...
> 
> bom... esta minha aplicação fica escondida do "Alt + Tab", mas para motivos 
> de testes, fiz ela ficar visível, e reparei que se eu der um "Alt+ Tab" 
> nela, ela volta a ficar ativa. Bom, entaum precisaria de uma rotina que 
> simule o "Alt + Tab"(tentei o "PostMessage(hPai, WM_ACTIVATE, 0, 0), mas 
> naum deu certo.")... Será q deu pra entender???
> 
> 
> Obrigado pela atenção.
> 
> Filipe.


-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a