我正在将一个 Delphi 5 应用程序移植到 D2010,但遇到了一些问题。在一个表单上有一个 TImage 组件,它有一个 OnMouseMove 事件,当鼠标移动到图像上时应该更新标签。在原始应用程序中这个功能可以正常工作,但现在无论鼠标是否移动,只要在图像上方,OnMouseMove 事件就会不断触发,导致标签闪烁不停。
有没有人知道是什么原因导致的,以及如何解决?
有没有人知道是什么原因导致的,以及如何解决?
由于我无法添加评论,因此我使用答案部分来确认这种行为变化。 我有一个在Delphi 2007中开发的项目,在该项目中,只有当鼠标位置发生更改时才会调用OnMouseMove
事件。 但是我发现在XE中,OnMouseMove
对于相同的代码不断被调用。 我不知道为什么,因为它们都是由WM_MOUSEMOVE
触发的。
在我找到原因之前,我正在比较以前的XY
坐标,并在没有更改时退出:
if ( x = ZoomRect.Right ) and ( y = ZoomRect.Bottom ) then exit ;
Mason,我无法在 Windows XP SP2 上的新 D2010(更新4和5)VCL表单应用程序中重现这个问题。 我所做的如下:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Label1.Caption := Format('X: %d Y: %d', [X, Y]); end;
标签一开始显示“Label1”(当然是默认标题)。 直到我第一次将鼠标移动到图像上,它才正确更新以显示X和Y坐标。 一旦我将鼠标指针移出图像,标签就停止更新。
这似乎是你特定代码或使用的Windows版本中的某些内容,而不是Delphi 2010本身的问题。