为什么在D2010中鼠标不移动时OnMouseMove会反复触发?

Mas*_*ler 8 delphi onmousemove event-handling delphi-2010

我正在将Delphi 5应用程序移植到D2010,我遇到了一些问题.在一个窗体上是一个带有OnMouseMove事件的TImage组件,当鼠标移动到图像上时,该事件应该更新标签.这在原始应用程序中运行得很好,但是现在OnMouseMove事件会在鼠标悬停在图像上时不断触发,无论它是否在移动,这会导致标签闪烁可怕.

有谁知道造成这种情况的原因以及如何解决这个问题?

Joh*_*ler 5

我的通灵调试意识告诉我你在Windows上,标签是一个工具提示窗口,你正在更新每个mousemove.

严肃地说,当我们切换到Vista时,我已经通过工具提示窗口看到了这个问题.当您更新它们时,似乎更新版本的Windows工具提示窗口以某种方式生成WM_MOUSEMOVE消息.我能找到的唯一解决方法是仅在文本实际更改时更新标签.

所以,如果你不在窗户上,请忽略我.但是,如果您使用的是Windows,请尝试仅在实际更改时更新标签文本.

  • @John:感谢您没有删除它。我用谷歌搜索“Windows 7 鼠标重复移动”,这是第一个结果。我正在 .net 中编程,最近在 Windows 7 下遇到了这个问题,如果文本没有更改,则通过不刷新工具提示解决了这个问题。 (2认同)

Mit*_*tch 5

由于我无法添加评论,我正在使用答案部分来确认此行为更改。我有一个在 Delphi 2007 中开发的项目,其中OnMouseMove仅当鼠标位置发生变化时才会调用该事件。我发现XEOnMouseMove不断地被调用相同的代码。我不知道为什么,因为它们都是由 触发的WM_MOUSEMOVE

在深入了解之前我所做的就是比较以前的XY坐标,如果没有变化则退出:

if ( x = ZoomRect.Right ) and ( y = ZoomRect.Bottom ) then exit ;
Run Code Online (Sandbox Code Playgroud)