アプリケーションでカスタムジェスチャを登録する

By: Chikako Yonezawa

Abstract: GestureRecorder コンポーネントを使用すると、アプリケーションで動的にカスタムジェスチャを作成することができます。Delphi で、カスタムジェスチャの登録と、ジェスチャファイルへの格納 (エクスポート)、および、読み込み (インポート) を行う簡単なアプリケーションを作成して動作を確認します

GestureRecorder コンポーネントを使用すると、アプリケーション上で動的にカスタムジェスチャを作成することができます。

そして、登録したカスタムジェスチャは、ジェスチャファイル(.dgf)に格納することができますし、ジェスチャファイルからカスタムジェスチャを読み込むこともできます。

Delphi で、カスタムジェスチャの登録と、ジェスチャファイルへの格納 (エクスポート)、および、読み込み (インポート) を行う簡単なアプリケーションを作成して動作を確認してみましょう。

  1. [ファイル|新規作成|VCLフォームアプリケーション - Delphi]を選択します。

Hide image
Click to see full-sized image

  1. フォーム上に TEdit, TButton x3, TGestureManager, TGustureListView, TGestureRecorderコンポーネントをドラッグ&ドロップし、フォームの体裁を整えます。

Hide image
RADXE_Touch50

  1. オブジェクトインスペクタ上で Edit1 を選択し、Text プロパティの内容をクリア(削除)します。

Hide image
RADXE_Touch51

  1. オブジェクトインスペクタ上で Button1 を選択し、Captionプロパティに 'Record' と記載します。

Hide image
RADXE_Touch52

  1. オブジェクトインスペクタ上で Button2 を選択し、Captionプロパティに 'Export' と記載します。

Hide image
RADXE_Touch53

  1. オブジェクトインスペクタ上で Button3 を選択し、Captionプロパティに 'Import' と記載します。

Hide image
RADXE_Touch54

  1. オブジェクトインスペクタで、GestureListView1 を選択して、GestureManager プロパティに GestureManager1 を設定します。

Hide image
Click to see full-sized image

  1. オブジェクトインスペクタで、GestureRecorder1 を選択して、GestureManager プロパティに GestureManager1 を設定します。また、表示エリアがわかりやすいように Color プロパティを clInactiveCaption に変更し、更に登録する時のみコンポーネントを表示させたいので、Visible プロパティを False に設定します。

Hide image
RADXE_Touch56

Hide image
RADXE_Touch57

  1. 今回、カレントのディレクトリ内に Samples.dgf というジェスチャファイルを作成し、そのファイルに対し格納と読み込みの動作を行いますので、オブジェクトインスペクタ上で Button2 を選択し、イベントタグに切り替え、OnClick の部分をマウスでダブルクリックし、イベントを作成します。その Button2 の OnClieck イベントに以下のコードを記述します。
GestureManager1.SaveToFile('Samples.dgf');

Hide image
RADXE_Touch58

  1. Button3 も同様に OnClick イベントを作成し、以下のコードを記述します。
GestureManager.LoadFromFile('Samples.dgf');
  1. Button1 も同様に OnClick イベントを作成します。ここには、ジェスチャを登録するための GestureRecorder コンポーネントを表示させるコードを記述します。
GestureRecorder1.Visible := True;

Hide image
Click to see full-sized image

  1. GestureRecorder コンポーネント上で、登録したいジェスチャを描くと OnGestureRecorded イベントが作動します。ここで、このジェスチャの名前と登録終了後の処理 (GestureRecorderコンポーネントの非表示と、Edit 上に記載された文字のクリア) を記述します。
RecordedGesture.Name := Edit1.Text;
GestureRecorder1.Visible := False;
Edit1.Text := ''; 

Hide image
Click to see full-sized image

  1. アプリケーションの設定は以上となります。メニューの[実行|実行]で動作させてみましょう。

Hide image
RADXE_Touch61

  • Editの部分に何か入力し、[Record] ボタンを押すと、GestureRecorder コンポーネントが表示され、このGestureRecorder コンポーネント上で、登録したいジェスチャを描くと、自動的に GestureListView 側に登録されます。
  • [Export] ボタンをクリックすると、カレントのディレクトリ内に Samples.dgf ファイル無ければファイルが作成され、あればそのファイルの内容を上書きします。
  • [Import] ボタンをクリックすると、カレントのディレクトリ内にある Samples.dgf ファイルからジェスチャデータを読み込み、GetureListView に表示します。

注意: このサンプルでは、確認やエラー処理などのコードは記載していません。

Gesture コントロールは、管理のための GestureManager に、管理される GestureCollection が関連付けされ、GestureCollection は、それぞれ個々のジェスチャが登録された GestureCollectionItem を保持しています。

このアプリケーションでは、GestureRecorder コンポーネント上での描画が終了 (Mouseup) すると、TGestureManager.AddRecordedGesture が実行され デフォルトの TgestureCollectionItem が追加されます。その際、すでに同じものが登録されていないかを確認 (Nameプロパティ等の値を確認) し、同じものが存在する場合はエラーメッセージを出力します。

エラー無く GestureCollectionItem が追加された後、OnGestureRecorded 内で記載したコードが実行され、追加した GestureCollectionItem の名前が変更されるというロジックで動作しています。

たとえば、表示されている Edit に何も記載しなかった場合、次に [Record] ボタンを押して何かジェスチャを登録しようとした際に、既に登録されている空の名前のジェスチャが存在するためにエラーが表示されます。

Hide image
RADXE_Touch62


Server Response from: ETNASC04