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

问题描述 投票:8回答:4

我正在将Delphi 5应用程序移植到D2010,但是我遇到了一些问题。一种形式是带有OnMouseMove事件的TImage组件,该组件应该在鼠标移到图像上时更新标签。在原始应用中,此操作效果很好,但是现在无论鼠标是否在图像上方,无论鼠标是否在移动,OnMouseMove事件都会持续触发,这会导致标签可怕地闪烁。

有人知道这是什么原因以及如何解决?

delphi event-handling delphi-2010 onmousemove
4个回答
5
投票
我的心理调试能力告诉我您在Windows上,标签是工具提示窗口,并且您每次鼠标移动时都在更新。

认真地说,当我们切换到Vista时,我已经在工具提示窗口中看到了这件事。似乎Windows工具提示窗口的最新版本在更新它们时会以某种方式生成WM_MOUSEMOVE消息。我能找到的唯一解决方法是仅在文本实际更改时才更新标签。

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

4
投票
直到我深入了解这个问题之前,我正在做的是比较以前的XY坐标,如果没有更改,则退出:

if ( x = ZoomRect.Right ) and ( y = ZoomRect.Bottom ) then exit ;


1
投票

文件|新建| VCL表格申请

    在表单上删除了TImage和TLabel
  • 从TImage.Picture的默认图像文件夹(GreenBar.bmp)中拾取随机图像
  • 双击对象检查器中的TImage.OnMouseMove事件,并添加以下代码:
  • 过程TForm1.Image1MouseMove(Sender:TObject; Shift:TShiftState; X,Y:整数);开始Label1.Caption:= Format('X:%d Y:%d',[X,Y]);结束;
  • 运行应用程序(F9)。
    • 标签显示“ Label1”(当然是默认标题),直到我第一次将鼠标移到图像上。然后正确更新以显示X和Y坐标。一旦将鼠标指针移出图像,标签就会停止更新。
    • 这似乎是您的特定代码中的某些东西,或者是您所使用的Windows版本的特定东西,而不是Delphi 2010本身。

    0
    投票
    尽管注意结论...
    © www.soinside.com 2019 - 2024. All rights reserved.