Application Messages

Delphi

19/09/2009

Olá,
Estou com uma problema no tratamento mensagens quando existe um Form aberto com ShowModal. Preciso identificar o movimneto do mouse em qualquer situação em que o programa esteja ativo, porém como abro algumas telas em ShowModal, só consigo identificar o movimento quando o ponteiro está sobre a tela com ShowModal.

Alguém sabe como resolver isso?

vlw!


Rtava

Rtava

Curtidas 0

Respostas

Afarias

Afarias

19/09/2009

Vejo 2 formas:


1) Não usar forms modais -- Ex: substituir por Form.Style := fsStayOnTop e exibir com Form.SHOW;

2) Não usar o evento OnMessage do Application, mas registrar no Windows o desejo de capturar todo movimento do mouse (como fazem os programas espiões)


T+


GOSTEI 0
Rtava

Rtava

19/09/2009

1) Não usar forms modais -- Ex: substituir por Form.Style := fsStayOnTop e exibir com Form.SHOW;

Eu uso Showmodal, porque preciso de Showmodal. Além disso, mesmo que o Form não seja aberto em ShowModal, ainda assim o movimento do mouse só será detectado se o ponteiro do mouse estiver sobre um Form qualquer da aplicação. Ou seja, se a aplicação estiver minimizada, não funciona de forma alguma.

2) Não usar o evento OnMessage do Application, mas registrar no Windows o desejo de capturar todo movimento do mouse (como fazem os programas espiões)

Algum exemplo prático?


GOSTEI 0
Afarias

Afarias

19/09/2009

Algum exemplo prático?



Sim:

http://delphi.about.com/od/windowsshellapi/a/mousehook.htm



T+


GOSTEI 0
Rtava

Rtava

19/09/2009

Ok. Parece bem simples mesmo...
Obrigado!


GOSTEI 0
Rtava

Rtava

19/09/2009

afarias, ou quem souber o que ocorre, se puder me dar uma ajuda...
Criei este exemplo do link que o afarias indicou e funcionou parcialmente sem problemas. Digo parcialmente, pois a detecção de movimento do mouse está ocorrendo mesmo sem o mouse se movimentar fisicamente. É que tenho um programa que fica criando e destruindo janelas constantemente, de forma automática, e cada vez que isso ocorre a tela é atualizada. Junto com essa atualização provavelmente também é atualizada a posição do mouse (eu imagino que seja isso). Por essa razão ocorre a detecção indesejada de movimentação do mouse e não estou conseguindo corrigir.

Alguém de idéia de como ´filtrar´ esses movimentos indesejados?


GOSTEI 0
POSTAR