Interromper Evento
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.
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
Curtidas 0
Respostas
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.
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
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?
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
06/12/2003
De forma semelhante tente com Focused.
GOSTEI 0
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
06/12/2003
Tente o fucused em outro componente, algo como um botão cancelar
GOSTEI 0
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?
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