3

Android(およびiOS)向けの開発にDelphi XE5を使用しています。

Delphi XE5 で Touch プロパティの InteractiveGestures を使用すると、Zoom、Pan、Rotate、TwoFingerTap、PressAndTap、LongTap、DoubleTap の GestureEvent を取得できます。これらにはすべて、イベントの場所を取得できる TGestureEventInfo オブジェクトが付属しています。指の座標。

ただし、単純なタップ/プレスのジェスチャはないようです。この場合、OnClick イベントが発生することはわかっていますが、OnClick イベントにはTGestureEventInfo オブジェクトが付属していないため、タップの位置を取得できませんこれは、情報を得るために非常に重要なイベントのようです。

何か不足していますか?単純なタップ ジェスチャの位置を取得するにはどうすればよいですか?

4

1 に答える 1

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 では何も得られません。

警告 emptor
OnClick は、コントロール内の MouseDown と同じコントロール内の MouseUp の後にトリガーされることに注意してください他の MouseUp または Down はありません。OnClick と同じ動作をさせたい場合は、それを確認する必要があります。

ボタンの内側をクリックし、クリックを離す前に外側に移動すると、 として登録されませんclick

OnClick が座標を与えないのはなぜ
FireMonkey の OnClick は VCL の OnClick と同じです。
OnClick は、OnMouseDown と OnMouseUp の合計です。VCL は、Down 座標と Up 座標のどちらかを選択したくないため、クリックが発生した場所は 1 つではありません。

私のアドバイス
は、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 が空間の近くにある場合にのみクリックになるためです。

于 2013-10-04T18:22:21.177 に答える