Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


【Delphi】TActionListの便利な活用方法

TActionListコンポーネントを使用すると、
共通のコードを共有して複数のコントロールからアクションを実行したり、
アプリケーションの状態に応じて項目を使用可/使用不可にするなど操作を一元化できます。

今回はその簡単な利用方法についてご説明しています。

 


別のコントロールで同じアクションを実行

メニューとボタンなどのコントロールが同じ動作を行うとき、
ActionList内のActionでその動作を記述することで、動作を一元管理できます。

ここではデータファイルのOpenとCloseを行うActionを設定する画面を例としてご説明します。

ファイルのOpen・Closeを確認できるように、
TFDConnection・TFDQuery・DataSource・DBGridを配置し、
DBGridにデータを表示できる画面を想定します。

そこへTActionListTMainMenuと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に関連付けされたメニューやボタンの状態も変わります。

 

 


<参考リンク>

 

(旧Tips Delphi/400 入門 Tips29「ActionListの使用方法」より)