Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does OnMouseMove fire repeatedly when the mouse is not moving in D2010?

I'm porting a Delphi 5 app to D2010, and I've got a bit of a problem. On one form is a TImage component with an OnMouseMove event that's supposed to update a label whenever the mouse is moved over the image. This worked just fine in the original app, but now the OnMouseMove event fires constantly whenever the mouse is over the image, whether it's moving or not, which causes the label to flicker horribly.

Does anyone know what's causing this and how to fix it?

like image 813
Mason Wheeler Avatar asked Dec 31 '09 19:12

Mason Wheeler


2 Answers

My psychic debugging sense tells me that you are on Windows, the label is a tooltip window and you are updating on every mousemove.

In all seriousness, I've seen this exact thing with tooltip window when we switched to Vista. It seems that more recent versions of the Windows tooltip window somehow generate WM_MOUSEMOVE messages when you update them. The only fix I could find was to only update the label when the text actually changes.

So, If you aren't on windows, Ignore me. But if you are on Windows, try updating the label text only when it actually changes.

like image 137
John Knoeller Avatar answered Sep 19 '22 08:09

John Knoeller


Since I couldn't add a comment I'm using the answer section to confirm this behavior change. I have a project that was developed in Delphi 2007 where the OnMouseMove event is only called when the mouse position changes. I found that with XE OnMouseMove is constantly being called for the same code. I don't know why since they're both triggered by WM_MOUSEMOVE.

What I am doing till I get to the bottom of this is to compare the previous XY coordinates and exit if no change:

if ( x = ZoomRect.Right ) and ( y = ZoomRect.Bottom ) then exit ;
like image 44
Mitch Avatar answered Sep 19 '22 08:09

Mitch