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

 ̄綄美尐妖づ 提交于 2019-12-05 03:03:39

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.

Mitch

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 ;

Mason, I can't reproduce this is a new D2010 (Update 4 & 5) VCL Forms application on Windows XP SP2. Here's what I did:

  • File|New|VCL Forms Application
  • Dropped a TImage and TLabel on the form
  • Picked a random image out of the default images folder (GreenBar.bmp) for the TImage.Picture
  • Double-clicked the TImage.OnMouseMove event in the Object Inspector, and added the following code:
    procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      Label1.Caption := Format('X: %d Y: %d', [X, Y]);
    end;
  • Ran the application (F9).

The label showed "Label1" (the default caption, of course) until I first moved the mouse over the image. It then updated correctly to show the X and Y coordinates. As soon as I moved the mouse pointer out of the image, the label stopped updating.

It appears to be something in your specific code, or something specific to the version of Windows you're using, and not Delphi 2010 itself.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!