次のショートカットしません
-
21-08-2019 - |
質問
を使用していDelpho2006年。シナリオ:
のデータモジュールを持っActionList.この対策のひとつとしてはショートカットCtrl+F4いて二次的なショートカットCtrl+Wまた、以下の全てを準備してお
加えCtrl+W行為SecondaryShortcutリストのバーコードを作成。
追加するのDataModuleCreate使用時の手順のいずれか
ActFileCloseFile.SecondaryShortCuts.Add('Ctrl+W');
または
ActFileCloseFile.SecondaryShortCuts.AddObject('Ctrl+W',
TObject(Menus.ShortCut(87, [ssCtrl])));
の両方を使いこれらの方法を作成またはFormShow手続きの形式で使用されます。
第一ショートカットもの作品ではなく、二の次になっている。
こんなくだらないことにActionListの主力形式ではなく、データモジュールを動作させることができるだけで追加Ctrl+Wのバーコードを作成。?が悪いのでしょうか。
解決
これまでに見つかった最もエレガントな解決策はこれです:
あなたはOnShortCutイベントにこれを追加し、SecondaryShortCutを処理するフォームで
procedure TMyForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
Handled := dmDataModule.ActionList1.IsShortCut(Msg);
end;
オルタナティブます:
(これが真の解決策が、回避策はありません。)
データモジュール上のものと同一の作用を有し、フォーム上のアクションリストを置きます。その実行し、アップデートのイベントでは、唯一のデータモジュールのアクションにイベントを転送します。フォーム上のメニューは、ローカルアクションを使用します。
このケースでは、IDEを使用してSecondaryShortCutsプロパティにはCtrl + Wを追加すればよい。
もちろん、データモジュールの変更のアクションは、私はあまりにもすべてのローカルアクションを変更する必要があるときます。
他のヒント
はない真の解決策が、あなたはそれが動作メインフォーム内からDataModuleのを作成する場合:
procedure TMainForm.FormCreate(Sender: TObject);
begin
FDataModule := TMyDataModule.Create(self);
TMyButton.Action := FDataModule.TheAction;
end;
procedure TMyDataModule.DataModuleCreate(Sender: TObject);
begin
TheAction.SecondaryShortCuts.Add('Ctrl+W');
end;
私はショートカットが現在のフォーカスを持つフォームによって処理されていると思います。あなたが別の形でそれらを使用しているのであればよ、おそらく同じ問題を取得します。
答え:行えない 自動的に 火事の形態およびデータ-モジュールです。
た場合の指示にしたがってくださいという問いかないというものショートカットです。ることができます.これは重要な足がかり残されていったのです。つまり明らかにしていくものOPを経験した主なショートカットの焼成な二次ます。
場のニーズに合わせてさまざまな追加の手順:
- 追加メニュー。
- リンクメニュー項目を入力します。
その後、主にショートカットできる火力します。この成分を押し、設定メニューの項目を含む ShortCut
ている。しかし、 TMenuItem
な実行し二次元短います。その一つ作品なのです。
一時停止について検討するアプリは様々な形のデータモジュールとに意義が行えが火事全員について記入してください。なかなかできない 自動的に 火災なく明確にコードを許可することがあります。すな背景の形を行うバンチのもので、設定ショートカットキーが押せるもののその他の無関係です。
の 文書 ポイントの利益の行動リストとデータ-モジュールです。があるようには見えません意を得ている場合はこの限りでは説明の利用行為 短いカット データ-モジュール 正しく.確かなこの場所、すなわち、 ショートカット や SecondaryShortcuts.(さんさいが、私の期待も書いてドラッグを非常に低くする事が出来る。)
なので---
何 すべ さ行為の短いカットを越えた形でのデータモジュール?
を行っていますビットの調査のみに限られます。としても、評価は相対的に何をしようとしている。
時にドロップアクションリスト(海外)、すべての短いカット作業として期待される。もっとも一般的なシナリオの場合に適用される行動は地形に固有のものです。
時にドロップアクションリストは、すべての短いカットできる火災その他の形式です。こちらの申請-広短いカットなどの開ど)として提供しています。
注意: あprioritisation配列している場合のカレントディレクトリが試されます。その形はショートカットマッチングのメインフォーム、ショートカット処理されます。およびコミットメントラインは当然と思っておきたいところです。
- が形で試合の取扱いは、ショートカット、 有成分 も確認します。(このはなぜ最初の二つの仕組みについての理解を深め.) これを設定するだけで
Owner
データ-モジュールを適切にできる短いカットに適用されます。
I.。代わりに:
Application.CreateForm(TDataModule1, DataModule1);
には以下のようなものを使います:
DataModule1 := TDataModule1.Create(LocalForm);
しかし、それぞれのインスタンスデータモジュールできる唯一のオーナー:というを複数インスタンスをせずに複数の形式の短います。ているかどうかのオプションに依存しておき下さい。しかし、このままの形式のオーナーのデータモジュールを少しと同等のオプションです。
- 最終オプションを提供する最も制御OP自分の答えです。I.。る形式をサポート"の外部短削減"に対応しておりOnShortCutイベントは、次のコード:
このコード例できる権限を委譲シナリストの異なる箇所においても優先度に応じた使い分けてみましょう。
procedure TMyForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
Handled := DataModule1.ActionList3.IsShortCut(Msg);
Handled := Handled or DataModule2.ActionList1.IsShortCut(Msg);
Handled := Handled or DataModule1.ActionList1.IsShortCut(Msg);
end;
アクションは、フォームに飲み込まなっている...あなたがアクションを処理するための二次形式/フレーム/ DataModuleのをしたい場合は...あなたが最初のプライマリからACTIONLISTを無効にする必要があり...
この Form1.ActionList1.State:= asSuspended。
この DataModule1.ActionList1.State:= asNormal;