使用 OnMouseDown/Up 事件:
procedure TForm17.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Single);
begin
end;
看到你得到 X 和 Y 坐标。
procedure TForm17.Button1Click(Sender: TObject);
begin
end;
但是,使用 OnClick,您将一无所获。
请注意, OnClick在控件内的 MouseDown和
同一控件内的 MouseUp
之后触发,没有任何其他 MouseUp 或 Down。如果您想要与 OnClick 具有相同的行为,您应该检查这一点。
如果您在按钮内部单击并在释放单击之前移到按钮外部,则不应将其注册为click
.
为什么 OnClick 不给出坐标
FireMonkey 中的 OnClick 与 VCL 中的 OnClick 相同。
OnClick 是 OnMouseDown 和 OnMouseUp 的总和,因此没有发生点击的地方,因为 VCL 不想在 Down 或 Up 坐标之间进行选择。
我建议
在 OnClick 事件上触发,但在 MouseDown 中注册坐标。
procedure TForm17.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Single);
begin
ClickGestureInfo.GestureID:= somethingNotAlreadyInUse;
ClickGestureInfo.Location:= Point(x,y);
end;
function ClearGestureInfo: TGestureEventInfo;
begin
FillChar(Result, SizeOf(Result), #0);
end;
procedure TForm17.Button1Click(Sender: TObject);
begin
if ClickGestureInfo.GestureID = somethingNotAlreadyInUse then begin
//do stuff
ClickGestureInfo:= ClearGestureInfo;
end;
end;
记录 OnMouseUp 坐标通常没有任何用处,因为只有当 MouseDown 和 MouseUp 位于空间附近时,单击才是单击。