FireMonkey でのジェスチャ

提供: RAD Studio
移動先: 案内検索

FireMonkey アプリケーション ガイド への移動


マルチデバイス アプリケーションでのジェスチャは VCL でのジェスチャとよく似ています。 ジェスチャは、指もと(Windows およびモバイル アプリケーションの場合)かマウス カーソル下(Windows および macOS の場合)にあるコントロールを対象としたものであると見なされます。 あるいは、ジェスチャはそのコントロールの親の 1 つ(階層内でそのジェスチャを最初に処理するもの)で処理することができます。

ジェスチャには以下の 2 種類があります。

  • 標準ジェスチャ:
    • 標準ジェスチャ(Up、Down、Triangle など)は、Windows のアプリケーション ジェスチャや macOS のマルチタッチ シーケンスと同等のものです。 標準ジェスチャは、Windows では 1 本指で、macOS では 2 本で、それぞれ行われます。
    • ジェスチャが完了した際(ユーザーが指を持ち上げたとき)に、OnGesture イベントが発生します(標準ジェスチャが認識された場合)。
  • 対話型ジェスチャ:
    • 対話型ジェスチャは、Windows のシステム ジェスチャや macOS、iOS、Android のジェスチャと同等のマルチタッチ ジェスチャ(Zoom、Rotate など)です。 指がタッチ画面上を移動するたびに、OnGesture イベントが発生します。
    • FireMonkey は、対話型スワイプ ジェスチャ(macOS、iOS、Android、Windows 8)と同等の 4 個の標準ジェスチャ()を使用します。

ジェスチャのプラットフォーム

このトピックでは、デスクトップ アプリケーションとモバイル プラットフォームのジェスチャについて説明します。

  • デスクトップ プラットフォームすべてにおいて、ジェスチャをサポートされています。
    Windows のタッチ画面の場合、対象となるコントロールの境界外では、指が画面から持ち上げられたとしても、ジェスチャは依然としてそのコントロールに送られます。
  • モバイル プラットフォームすべてにおいて、対話型ジェスチャがサポートされています。 「

対話型ジェスチャを有効にする」を参照してください。

FireMonkey でのジェスチャの使用方法

コントロールでジェスチャを使用できるようにするには、そのコントロールに Touch プロパティが必要です。TForm のほか、TFmxObject から派生したオブジェクトの多くがこのプロパティをサポートしています。

標準ジェスチャを有効にする

標準ジェスチャをコントロールでサポートするには、以下を行う必要があります。

  1. フォーム デザイナで、ジェスチャに対するコントロールに TGestureManager を追加します。 GestureManager に一意の名前を付けるか、割り当てられた GestureManager1 などの名前をそのまま使用します。
  2. [オブジェクト インスペクタ]で、コントロールの[Touch|GestureManager]フィールドに TGestureManager を割り当てます。
  3. [オブジェクト インスペクタ]で、コントロールの[Touch|Gestures]フィールドから特定のカスタム ジェスチャ(複数可)を選択します。
  4. そのコントロールの OnGesture イベント ハンドラを実装し、適切な EventInfo.GestureId を処理します。

標準ジェスチャを選択する

以下に示すのは、列挙型 TStandardGesture に定義されているジェスチャで、[オブジェクト インスペクタ]で選択できるように提供されています。

FMX.Touch2.png

OnGesture イベント ハンドラを実装する

"Form 28" という TForm に配置された "Panel1" という TPanelOnGesture 手続きの例を以下に示します(フォームには "TMemo1" という TMemo もあります)。このイベント ハンドラは、FMX.Gestures.GestureToIdent を使用します。

Delphi の場合:

procedure TForm28.Panel1Gesture(Sender: TObject;
  const EventInfo: TGestureEventInfo; var Handled: Boolean);
var
  S: string;
begin
  if GestureToIdent(EventInfo.GestureID, S) then begin
    Memo1.Lines.Add(S);
    Handled := True;
  end;
end;

C++ の場合:

void __fastcall TForm1::Panel1Gesture(TObject *Sender,
        const TGestureEventInfo &EventInfo, bool &Handled) {
        String s;
        if (GestureToIdent(EventInfo.GestureID, s)) {
                Memo1->Lines->Add(s);
                Handled = true;
        }
}

上記のコードでは、イベントの発生原因となったジェスチャの名前(UpZoom など)をメモに書き込んでいます。

対話型ジェスチャを有効にする

対話型ジェスチャをコントロールでサポートするには:

  1. [オブジェクト インスペクタ]で、コントロールの[Touch | InteractiveGesturesフィールドから特定の対話型ジェスチャを選択します。
  2. そのコントロールの OnGesture イベント ハンドラ(手続き)を実装し、適切な EventInfo.GestureId を処理します。


  Android プロジェクト用ジェスチャ プロパティの初期状態   個別ジェスチャを有効にした状態

Android プロジェクト用ジェスチャ プロパティの初期状態

個別ジェスチャを有効にした状態



FireMonkey および VCL でサポートされる主なジェスチャ間の違い

  • FireMonkey では TouchTargetExpansion をサポートしています。これは、タッチで起動できるコントロールの周りの指定ゾーンを、あたかもコントロールの一部であるかのように追加することで、コントロールのタッチ ターゲットを拡張するプロパティです。 (VCL は TouchTargetExpansion をサポートしていません。)
  • サポートされている対話型ジェスチャについては、「FMX.Types.TInteractiveGestures」および「Vcl.Controls.TInteractiveGestures」で説明されています。
    • Windows プラットフォームの場合:
      • FireMonkey では、次のinteractive gesturesをサポートしています: ズームパン回転2 本指タッププレス アンド タップダブルタップロング タップ。 (これは、VCL と同じです)
    • macOS:
      • FireMonkey でサポートしている対話型ジェスチャは、ズームパン回転のみです。 (VCL は、Mac 上での開発をサポートしていません。)
    • iOS の場合:
      • FireMonkey は、ズームパン回転2 本指タップダブルタップロングタップ をサポートしています(VCL は iOS 上での開発をサポートしていません。)
    • Android の場合:
      • FireMonkey が Android 上でサポートしているジェスチャは、iOS プラットフォーム上のものと同じで、 ズームパン回転2 本指タップダブルタップロングタップです。
  • FireMonkey は、カスタム ジェスチャをサポートしていません。 (VCL は、カスタム ジェスチャをサポートしています)。
    • TabletOptions は、FireMonkey ではサポートされていません。
  • マウス ジェスチャは、Windows 7 および Windows 8 でのみ機能します。
  • Windows 8 では、対話型ジェスチャと標準ジェスチャを同時に使用することはできません。

関連項目


コード サンプル