我正在将一个 Delphi 5 应用程序移植到 D2010,我遇到了一些问题。一种形式是带有 OnMouseMove 事件的 TImage 组件,该事件应该在鼠标移到图像上时更新标签。这在原始应用程序中工作得很好,但现在只要鼠标悬停在图像上,无论它是否移动,OnMouseMove 事件都会不断触发,这会导致标签可怕地闪烁。
有谁知道是什么原因造成的以及如何解决它?
我正在将一个 Delphi 5 应用程序移植到 D2010,我遇到了一些问题。一种形式是带有 OnMouseMove 事件的 TImage 组件,该事件应该在鼠标移到图像上时更新标签。这在原始应用程序中工作得很好,但现在只要鼠标悬停在图像上,无论它是否移动,OnMouseMove 事件都会不断触发,这会导致标签可怕地闪烁。
有谁知道是什么原因造成的以及如何解决它?
我的心理调试感觉告诉我你在 Windows 上,标签是一个工具提示窗口,你在每次鼠标移动时都在更新。
说真的,当我们切换到 Vista 时,我已经在工具提示窗口中看到了这个确切的东西。似乎更新版本的 Windows 工具提示窗口在您更新它们时会以某种方式生成 WM_MOUSEMOVE 消息。我能找到的唯一解决方法是仅在文本实际更改时更新标签。
所以,如果你不在 Windows 上,请忽略我。但是,如果您使用的是 Windows,请尝试仅在标签文本实际更改时才更新它。
由于我无法添加评论,因此我使用答案部分来确认此行为更改。我有一个在 Delphi 2007 中开发的项目,其中OnMouseMove
仅在鼠标位置更改时才调用该事件。我发现随着 XEOnMouseMove
不断被调用相同的代码。我不知道为什么,因为它们都是由WM_MOUSEMOVE
.
在我深入了解之前我正在做的是比较以前的XY
坐标并在没有变化的情况下退出:
if ( x = ZoomRect.Right ) and ( y = ZoomRect.Bottom ) then exit ;
Mason,我无法重现这是 Windows XP SP2 上的新 D2010(更新 4 和 5)VCL 表单应用程序。这是我所做的:
过程 TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y:整数); 开始 Label1.Caption := Format('X: %d Y: %d', [X, Y]); 结尾;
标签显示“Label1”(当然是默认标题),直到我第一次将鼠标移到图像上。然后正确更新以显示 X 和 Y 坐标。一旦我将鼠标指针移出图像,标签就会停止更新。
它似乎是您的特定代码中的某些内容,或者您正在使用的 Windows 版本的某些内容,而不是 Delphi 2010 本身。