在iOS和Android中获取指压的位置

时间:2013-10-04 13:17:39

标签: android ios delphi firemonkey delphi-xe5

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

使用Delphi XE5中Touch属性的InteractiveGestures,我可以获得一个GestureEvent用于Zoom,Pan,Rotate,TwoFingerTap,PressAndTap,LongTap和DoubleTap。所有这些都附带一个TGestureEventInfo对象,我可以在其中获取事件的位置,例如。手指的坐标。

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

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

1 个答案:

答案 0 :(得分:6)

使用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不提供坐标
FireClick中的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在空间附近,则只需单击一下即可。