2

多くのアクションを持つユニットがあり、一部のアクションにはショートカットがあり、一部のアクションには同じショートカットさえあります。これは、それらがアプリケーション内の異なるモジュールに属しており、同時にコンテキストにないためです。

これで、いつでもどこでも開始できるグローバルな非モーダル ダイアログ (objectinspector と呼ばれる) ができました。モジュール内の他の場所と同じショートカットを持ついくつかのアクションがあります。

そのため、objectinspector がアクティブなときに同等のショートカットを共有するアクションを一時的にオーバーライドし、非アクティブ化されたときに解放したいと考えています。

objectinspectors の OnActivate イベントに次のコードがあります。

  ClientActions.RegisterAction(ClientActions.actObjectInspectorNewWindow, ShowNewObject);
  • ClientActions は、アクションを含むユニットです。
  • RegisterAction は、イベントをアクションに接続するメソッドです。
  • actObjectInspectorNewWindow が実際のアクションです。
  • ShowNewObject は、アクションが実行されたときに呼び出されるイベントです。

したがって、すべてのモジュールとモーダルレス ダイアログには、上記の方法で登録されるいくつかのアクションがあります。問題は、2 つのアクションが同じショートカットを共有している場合に発生します。ユーザーがショートカットを押すと、最初に登録されたアクションが勝ち、実行されるようです。そのショートカットにアクションを登録する最後のアクションが実行されることを好みました。

これはどのように行うことができますか?

よろしく

4

2 に答える 2

1

あなたの質問を正しく理解できれば、あなたのアプリケーションには複数の TActionList があります。異なるアクション リストのアクションは、同じショートカット キーを使用する場合があります。実行時にどのアクションを実行するかを制御したい

その方法は、フォームの OnShortCut イベント ハンドラを割り当てることです。そのイベント ハンドラで、アクション リストの優先順位に従って TActionList.IsShortCut() を呼び出します。TActionList.IsShortCut() が True を返したら、OnShortCut の Handled パラメータを True に設定して終了します。TActionList.IsShortCut() が True を返すと、実際にアクションが実行されたことになります。

于 2009-10-27T11:24:09.873 に答える