form na frente

Delphi

06/05/2004

Usei este comando no meu form principal para deixar o meu sistema sempre na frente de outras janelas. O problema são as mensagens que eu mostro. showmessage, Application.MessageBox... se o usuário deixar esta mensagem na tela e clicar em outro sistema o meu acaba ficando de fundo. Como posso resolver.

//para deixar o sistema sempre em primeiro plano
SetWindowPos(f_adm_avisa_bloco.handle, HWND_TOPMOST, f_adm_avisa_bloco.Left, f_adm_avisa_bloco.Top,f_adm_avisa_bloco.Width, f_adm_avisa_bloco.Height, 0);


Briciosm

Briciosm

Curtidas 0

Respostas

Avante

Avante

06/05/2004

Olá,

Mude o FormStyle para fsStayOnTop e use

Messagebox(handle,´text´,´caption´,Mb_TaskModal+Mb_Ok);



GOSTEI 0
Cebikyn

Cebikyn

06/05/2004

Mantenha seu código do jeito que está, a única coisa que precisa ser mudada é:

Ao invés de Application.MessageBox, use:

MessageBox(f_adm_avisa_bloco.handle, ´texto´, ´titulo´, flags);

[b:98c6845744]Outra dica:[/b:98c6845744]

A chamada:

SetWindowPos(f_adm_avisa_bloco.handle, HWND_TOPMOST, f_adm_avisa_bloco.Left, f_adm_avisa_bloco.Top,f_adm_avisa_bloco.Width, f_adm_avisa_bloco.Height, 0);

pode ser substituida por:

SetWindowPos(f_adm_avisa_bloco.Handle,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE+SWP_NOMOVE);

Isto evita chamadas desnecessárias às propriedades do form e simplifica seu código.

[b:98c6845744]Detalhe:[/b:98c6845744] é muito mais eficiente usar SetWindowsPos do que mudar a propriedade FormStyle...


GOSTEI 0
Avante

Avante

06/05/2004

Detalhe: é muito mais eficiente usar SetWindowsPos do que mudar a propriedade FormStyle...



Essa eu não sabia. Pode me explicar o porque?
[]´s


GOSTEI 0
Cebikyn

Cebikyn

06/05/2004

Normalmente o resultado é o mesmo, mas em alguns casos pode ocorrer flickering (o form fica piscando).


GOSTEI 0
POSTAR