2012-03-06 10 views
3

私は検索して見つけましたHow can I see who triggered an action in Delphi?Delphiでジェスチャースタンダードアクションをトリガーした人はどうすればわかりますか?

その解決策はTAction.ActionComponentを使用しています。

私はTGestureManagerを持つフォームを用意しています。標準的なジェスチャー(例えば、左右)をアクションで設定しています。

今実行イベントでは、何をすべきかを決定できるように、どのコンポーネントがジェスチャを初期化したのかを知ることは良いことです。 (たとえば、2つのパネルがあり、どのパネルをスクロールするかを知る必要があります)。

ただし、TAction.ActionComponentはこの場合はnilです。

私はOnGestureを試しましたが、ジェスチャーはそのイベントをトリガーしないと定義し、送信者は常にフォームそのものです。

だから、どのコンポーネントがそのジェスチャーアクションをトリガーしたのか分かりますか?

ありがとうございます。

答えて

0

多くのテストでは、アクションの1つを使用してスキップし、Form.OnGestureを使用してから、EventInfo.Locationを使用してジェスチャが開始されたコンポーネントを見つけ出すと考えています。次に、EventInfo.GestureIDを使用して、何をすべきかを決定することができます。

procedure TForm5.FormGesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean); 
var 
    C : TControl; 
begin 
    C := FindVCLWindow(ClientToScreen(EventInfo.Location)); 
    if Assigned(C) and (EventInfo.GestureID < 0) then 
    edt1.Text := C.Name 
    case EventInfo.GestureID of 
    1 : DoThis; 
    2 : DoThat; 
    end; 
end; 

より良い回答は、アクションの実行が歓迎されていることが好ましいです。

+0

真実は、 'TActionManager.OnExecute'イベントパラメータ' Action.ActionComponent = nil'ですが、アクション自体が実行されています。あなたがなぜアクション( 'TAction')を使用したいのか、そして' GestureID'か何かを手掛かりにしているのかどうか分かりません。特定のコンポーネントのジェスチャーに「TAction」を割り当てて実行するだけで、それが実行されます。 – TLama

+0

元の質問を読んだら、割り当てられたアクションで実行されたときに見つけられないコントロールからのジェスチャー開始を知りたいと思うことがわかります。 – Justmade

関連する問題