Interromper Evento

Delphi

06/12/2003

Como faço para encerrar um evento quando um outro for disparado?

Estou utilizando a procedure de capitura de mensagem da API para disparar o evento: procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;

Quando outro evento for disparado:
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
quero que o primeiro seja encerrado.

O problema é que o primeiro procedimento tem um laço for um pouco demorado, e com isto o outro procedimento só está sendo disparado quando o laço for é concluído.


Raserafim

Raserafim

Curtidas 0

Respostas

Beppe

Beppe

06/12/2003

o Coloque um campo privado FMouseSaiu: Boolean no seu componente.

o No CM_MOUSELEAVE, coloque FMouseSaiu := True;

o No CM_MOUSEENTER, antes de outra coisa, coloque FMouseSaiu := False;
Dentro do loop, cheque se a variável mudou.
Ex: [b:175bb3b17b]if[/b:175bb3b17b] FMouseSaiu [b:175bb3b17b]then[/b:175bb3b17b] Break;

OBS: você precisa chamar Application.ProcessMessages(ou similar) no loop para que CM_MOUSE possa ser processada.


GOSTEI 0
Raserafim

Raserafim

06/12/2003

Já havia tentado esta possibilidade, mas não deu certo. Ao passar o mouse sob o botão rapidamente, o evento é disparado, mas o evento de quando sai do botão não está sendo disparado. Apenas quando movimento o mouse (que já estava fora do botão).

O problema é que o evento de quando o mouse sai do botão não está sendo disparado no momento exato em que ocorre.

Como posso resolver isto?

Que outro comando é semelhante ao ProcessMessage?


GOSTEI 0
Nigro

Nigro

06/12/2003

De forma semelhante tente com Focused.


GOSTEI 0
Raserafim

Raserafim

06/12/2003

O problema é que quando o mouse sai do botão, o evento não é dispardo. Qeuro alguma forma de fazer com que o delphi dispare no momento certo.


GOSTEI 0
Nigro

Nigro

06/12/2003

Tente o fucused em outro componente, algo como um botão cancelar


GOSTEI 0
Raserafim

Raserafim

06/12/2003

Isto é um componente que estou criando, portanto não posso me basear em outro componente.

Quero apenas que o delphi dispare o evento assim que o mouse sair do botão, já que o procedimento de quando entrou no botão ainda pode estar sendo processado, mas já utilizei o ProcessMessage mas isso não resolveu.
O que devo tentar agora?


GOSTEI 0
POSTAR