TActionListコンポーネントを使用すると、
共通のコードを共有して複数のコントロールからアクションを実行したり、
アプリケーションの状態に応じて項目を使用可/使用不可にするなど操作を一元化できます。
今回はその簡単な利用方法についてご説明しています。
別のコントロールで同じアクションを実行
メニューとボタンなどのコントロールが同じ動作を行うとき、
ActionList内のActionでその動作を記述することで、動作を一元管理できます。
ここではデータファイルのOpenとCloseを行うActionを設定する画面を例としてご説明します。
ファイルのOpen・Closeを確認できるように、
TFDConnection・TFDQuery・DataSource・DBGridを配置し、
DBGridにデータを表示できる画面を想定します。
そこへTActionListとTMainMenuと2つのTButtonを配置します。
まずTActionListの設定を行います。
ActionList1をダブルクリックすると、編集画面が表示されます。
(または右クリックして「アクション リストの設定」を選択)
追加ボタンを押して、ActionList内にTActionを2つ追加します。
追加したActionのそれぞれのCaptionプロパティを「Open」「Close」と設定し、
それぞれのOnExecuteイベントで実行時のコード(ファイルのOpenとClose)を記述します。
// Openボタン押下時、明細を開く
procedure TForm1.Action1Execute(Sender: TObject);
begin
FDQuery1.Open;
end;
// Closeボタン押下時、明細を閉じる
procedure TForm1.Action2Execute(Sender: TObject);
begin
FDQuery1.Close;
end;
次にTMainMenuの設定を行います。
MainMenu1をダブルクリックすると、メニューの編集画面が表示されます。
(または右クリックして「メニュー デザイナ」を選択)
Captionプロパティで「ファイル」と入力します。
メニューの「ファイル」を選択すると下に囲みができますので、それを選びます。
Actionプロパティで「Action1」を選択するとCaptionに自動で反映されます。
その下にも同様にメニューを追加して「Action2」をActionプロパティに設定します。
Buttonにも同じくActionプロパティがありますので、
同様にそれぞれのボタンで「Action1」「Action2」を選択します。
こちらも、CaptionプロパティにActionの内容が反映されます。
実行すると、メニューとボタンで同じアクションが実行されることが確認できます。
ショートカットキーの活用
ActionにはShortcutプロパティが存在し、
設定したショートカットキーを押下するとそのActionを実行できます。
例えば今回作成した画面で、
・Action1のShortcutプロパティに「F5」
・Action2のShortcutプロパティに「F3」
とそれぞれ設定した場合、実行時にそれぞれ
F5キーを押すとファイルがOpenされ、F3キーでCloseされることを確認できます。
また、TMainMenuの各メニュー項目もShortcutプロパティを持っているため、
紐づいたActionにShortcutを設定するとこちらにも反映されます。
このショートカットキーにはF1~F12のほか、
Shift・Ctrl・Altを組み合わせたキーも設定可能です。
アクションの使用可・不可を設定
アプリケーションの状態に応じてアクションを使用可/使用不可にすることで
コントロールの状態も制御できます。
ファイルがClose状態のときには、[Open]ボタンは有効で[Close]ボタンは無効、
ファイルがOpen状態のときには、[Open]ボタンは無効で[Close]ボタンは有効になるように設定してみましょう。
ActionのEnabledプロパティで有効/無効を設定しますが、
OnUpdateイベントで記述します。
このイベントはアプリケーションが待機状態の時は常に走り続けています。
// 明細が閉じている場合のみ、Open使用可能にする
procedure TForm1.Action1Update(Sender: TObject);
begin
if not FDQuery1.Active then
Action1.Enabled := True
else
Action1.Enabled := False;
//(または
// Action1.Enabled := not FDQuery1.Active;)
end;
// 明細が開いている場合のみ、Close使用可能にする
procedure TForm1.Action2Update(Sender: TObject);
begin
if FDQuery1.Active then
Action2.Enabled := True
else
Action2.Enabled := False;
//(または
// Action2.Enabled := FDQuery1.Active;)
end;
実行させるとファイルの状態(ここではFDQuery1のActiveプロパティ)により
Actionに関連付けされたメニューやボタンの状態も変わります。
<参考リンク>
- Vcl.ActnList.TActionList – RAD Studio API Documentation
- Vcl.ActnList.TAction – RAD Studio API Documentation
- System.Actions.TContainedAction.ShortCut – RAD Studio API Documentation
- キーおよびショートカットの表現 – RAD Studio
(旧Tips Delphi/400 入門 Tips29「ActionListの使用方法」より)