ロングタップを有効にするには、TGestureManagerコンポーネントを配置し、フォームの「Touch」→「InteractiveGestures」→「igLongTap」をチェックします。
ロングタップされると、フォームのOnGestureイベントが発生します。
EventInfoのLocationからロングタップされた座標を取得できます。
次のサンプルアプリケーションでは、ロングタップされると色を変更します。
フォームにTGestureManagerコンポーネントとTRectangleを配置します。
フォームの「Touch」→「InteractiveGestures」→「igLongTap」をチェックします。
フォームのOnGestureイベントを追加します。
procedure TForm1.FormGesture(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean);
var
Control: IControl;
Rectangle: TRectangle;
begin
if EventInfo.GestureID = igiLongTap then
begin
if TInteractiveGestureFlag.gfBegin in EventInfo.Flags then
begin
Control := Self.ObjectAtPoint(ClientToScreen(EventInfo.Location));
if Control is TRectangle then
begin
Rectangle := Control as TRectangle;
Rectangle.Fill.Color := Random(4294967295);
end;
end;
end;
end;
TGestureEventInfo型の引数EventInfoのGestureIDでジェスチャのがロングタップかどうかを調べます。
if EventInfo.GestureID = igiLongTap then
iOSではロングタップを開始したときと終了したときにOnGestureイベントが発生します。
Andoroidではロングタップを開始したときのみOnGestureイベントが発生します。
ロングタップが始まったときに色を変更するようにします。
if TInteractiveGestureFlag.gfBegin in EventInfo.Flags then
EventInfoのLocationでロングタップされた位置を取得し、ObjectAtPointメソッドでロングタップされた位置にあるコントロールを取得します。
Control := Self.ObjectAtPoint(ClientToScreen(EventInfo.Location));
ロングタップされた位置にあるTRectangleコンポーネントの色を変更します。
Rectangle.Fill.Color := Random(4294967295);
アプリケーションを実行して、ロングタップすると、コントロールの色が変わります。
2014年2月27日 追記
コメント欄で教えていただいたEventInfo.Flagsの判定処理を追加しました。
EventInfoのFlagsを確認する必要もあると思います。
http://qc.embarcadero.com/wc/qcmain.aspx?d=120082
名前間違えました。
智博 -> 智宏
iOSのほうはEventInfo.Flagsを確認する必要があります。
高橋智宏様
ありがとうございます。エントリーを修正しました。