我想知道如何检测我将鼠标移动到哪一侧:mousemove
事件中TImage组件的左,右,上,下?
谢谢。
答案 0 :(得分:1)
下面是一个在FMX
项目中使用的示例。对于VCL
项目,您将使用整数变量。
首先,例如在表单的私有部分中声明两个变量Xold, Yold: single;
。
private
Xold, Yold: Single;
初始化这些变量,例如以OnCreate()
形式的事件。使用NaN
需要在uses子句中使用System.Math
。
procedure TForm5.FormCreate(Sender: TObject);
begin
Xold := NaN;
Yold := NaN;
end;
然后,在OnMouseMove()
事件中,计算水平和垂直方向的移动,负值表示向左或向上移动,正向或向下移动。
procedure TForm5.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Single);
var
horz, vert: Single;
begin
if not IsNan(Xold) then horz := X - Xold else horz := 0;
if not IsNan(Yold) then vert := Y - Yold else vert := 0;
Xold := X; // save new values
Yold := Y; //
// use horz and vert as needed
Label1.Text := Format('h: %f, v: %f',[horz, vert]);
end;
当鼠标离开图像时,您可能还想将Xold
和Yold
变量重置为NaN
。
procedure TForm5.Image1MouseLeave(Sender: TObject);
begin
Xold := NaN;
Yold := NaN;
end;
有人在评论中问,为什么初始化为NaN
而不是零? Xold := 0; Yold := 0
是左上角。如果鼠标进入图像发生在例如右侧,第一步是从0跳到图像宽度。使用NaN
,我们可以忽略第一个条目作为移动,而仅将入口点存储在Xold
和Yold
中,以用于下一步移动。