【问题标题】:Get location of finger press in iOS and Android在 iOS 和 Android 中获取手指按下的位置
【发布时间】:2013-10-04 13:17:38
【问题描述】:

我正在使用 Delphi XE5 为 Android(和 iOS)开发。

使用 Delphi XE5 中 Touch 属性中的 InteractiveGestures,我可以获得缩放、平移、旋转、TwoFingerTap、PressAndTap、LongTap 和 DoubleTap 的 GestureEvent。所有这些都带有一个 TGestureEventInfo 对象,我可以在其中获取事件的位置,例如。手指的坐标。

但是,似乎没有一个手势只是简单的点击/按下。我知道在这种情况下会触发 OnClick 事件,但 OnClick 事件确实 not 带有 TGestureEventInfo 对象,因此我无法获取点击的位置。这似乎是一个获取信息的非常重要的事件。

我错过了什么吗?如何获取简单点击手势的位置?

【问题讨论】:

  • OnMouseDown() 怎么样?

标签: android ios delphi firemonkey delphi-xe5


【解决方案1】:

使用 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 位于空间附近时,单击才算单击。

【讨论】:

  • 这非常有效。我应该想到 MouseUp/Down,但我想我是被这个名字推迟了,因为我在做触摸手势。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 2017-08-10
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多