FireMonkey でのジェスチャ
マルチデバイス アプリケーションでのジェスチャは VCL でのジェスチャとよく似ています。 ジェスチャは、指もと(Windows およびモバイル アプリケーションの場合)かマウス カーソル下(Windows および macOS の場合)にあるコントロールを対象としたものであると見なされます。 あるいは、ジェスチャはそのコントロールの親の 1 つ(階層内でそのジェスチャを最初に処理するもの)で処理することができます。
目次
ジェスチャには以下の 2 種類があります。
- 標準ジェスチャ:
- 対話型ジェスチャ:
- 対話型ジェスチャは、Windows のシステム ジェスチャや macOS、iOS、Android のジェスチャと同等のマルチタッチ ジェスチャ(Zoom、Rotate など)です。 指がタッチ画面上を移動するたびに、OnGesture イベントが発生します。
- FireMonkey は、対話型スワイプ ジェスチャ(macOS、iOS、Android、Windows 8)と同等の 4 個の標準ジェスチャ(上、下、左、右)を使用します。
ジェスチャのプラットフォーム
このトピックでは、デスクトップ アプリケーションとモバイル プラットフォームのジェスチャについて説明します。
- デスクトップ プラットフォームすべてにおいて、ジェスチャをサポートされています。
- Windows のタッチ画面の場合、対象となるコントロールの境界外では、指が画面から持ち上げられたとしても、ジェスチャは依然としてそのコントロールに送られます。
- モバイル プラットフォームすべてにおいて、対話型ジェスチャがサポートされています。 「
対話型ジェスチャを有効にする」を参照してください。
FireMonkey でのジェスチャの使用方法
コントロールでジェスチャを使用できるようにするには、そのコントロールに Touch プロパティが必要です。TForm のほか、TFmxObject から派生したオブジェクトの多くがこのプロパティをサポートしています。
標準ジェスチャを有効にする
標準ジェスチャをコントロールでサポートするには、以下を行う必要があります。
- フォーム デザイナで、ジェスチャに対するコントロールに TGestureManager を追加します。 GestureManager に一意の名前を付けるか、割り当てられた GestureManager1 などの名前をそのまま使用します。
- [オブジェクト インスペクタ]で、コントロールの[Touch|GestureManager]フィールドに TGestureManager を割り当てます。
- [オブジェクト インスペクタ]で、コントロールの[Touch|Gestures]フィールドから特定のカスタム ジェスチャ(複数可)を選択します。
- そのコントロールの OnGesture イベント ハンドラを実装し、適切な EventInfo.GestureId を処理します。
標準ジェスチャを選択する
以下に示すのは、列挙型 TStandardGesture に定義されているジェスチャで、[オブジェクト インスペクタ]で選択できるように提供されています。
OnGesture イベント ハンドラを実装する
"Form 28" という TForm に配置された "Panel1" という TPanel の OnGesture 手続きの例を以下に示します(フォームには "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;
}
}
上記のコードでは、イベントの発生原因となったジェスチャの名前(Up、Zoom など)をメモに書き込んでいます。
対話型ジェスチャを有効にする
対話型ジェスチャをコントロールでサポートするには:
- [オブジェクト インスペクタ]で、コントロールの[Touch | InteractiveGestures]フィールドから特定の対話型ジェスチャを選択します。
- そのコントロールの OnGesture イベント ハンドラ(手続き)を実装し、適切な EventInfo.GestureId を処理します。
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 本指タップ、ダブルタップ、ロングタップです。
- Windows プラットフォームの場合:
- FireMonkey は、カスタム ジェスチャをサポートしていません。 (VCL は、カスタム ジェスチャをサポートしています)。
- TabletOptions は、FireMonkey ではサポートされていません。
- マウス ジェスチャは、Windows 7 および Windows 8 でのみ機能します。
- Windows 8 では、対話型ジェスチャと標準ジェスチャを同時に使用することはできません。
- Windows 8 ジェスチャ サポートに関する詳細については、「Metropolis UI アプリケーションでのジェスチャ サポート」を参照してください。
関連項目
- FireMonkey におけるタッチ ターゲットのサポート
- 列挙型 TStandardGesture
- FMX.Controls.TControl.Touch
- FMX.Controls.TControl.OnGesture
- FMX.Types.TGestureEventInfo
- FMX.Types.TControl.TouchTargetExpansion
- FMX.Types.TInteractiveGesture
- モバイル コード サンプル