まっさらなフォームにまずボタンを配置してprocedure Button1Clickを記述する。
というやり方はどうやらもう古いのかもしれない。
まっさらなフォームには、まずActionListを配置することにした方が便利なようだ。
(最後にどんでん返しがあるので最後まで読んでください)
アクションリスト
アクションリストはStandardタブの中にある。
アクションリストをフォームに載せてダブルクリックすると、アクションを追加、削除、再配置できるアクションリストエディタが表示される。
アクションリストエディタ
ボタンの試し置きの感覚で、まずは、左上のボタンでアクションを追加してActionを作る。Nameがprocedure名になるのでそのつもりで名前を設定する。Captionは日本語でも大丈夫。
Categoryを入力すると自動的に新しいカテゴリが作られる。Categoryも日本語OK。
アクションリストエディタでカテゴリを選択した状態でアクションを追加するとそのカテゴリに追加される。
アクションのCategoryを消すと自動的にカテゴリなしに移動する。
標準アクションを選ぶと最初からCaption,Name,Categoryが設定されている。
さらに、定義済みのアクションクラスは、自動的にアクションを実行する。これは、かなり便利だ!
アクションリストエディタでアクションをダブルクリックするとコードエディタが呼び出される。
コードを書いたら、次にActionに関連付けたいボタン、メニューアイテムなどを配置する。
ボタンなどのActionプロパティーでアクションを選択する。
1つのアクションに複数のコントロールを関連付けることももちろん可能。
アクションのEnabledやVisibleを変化させるとアクションに関連付けたコントロールも同様に変化する。
Action関連項目へのアクセス
ActionListに含まれるActionの数、個々のActionとそのカテゴリーへのアクセスは以下の通り
procedure TForm1.AdditionalFunctionOffExecute(Sender: TObject);
var
i: integer;
Str: string;
begin
for i := 0 to ActionList1.ActionCount-1 do
begin
Str:= ActionList1.Actions[i].Category;
if Str = 'その他' then
ActionList1.Actions[i].Enabled:= false;
end;
end;
メニューアイテムに関連付けられたProcedureがButtonClick・・・ということはもうなくなるのかな。
VclのTActionList のヘルプには
メモ: アプリケーションのアクションは、TActionList を使用して管理できますが、代わりに Vcl.ActnMan.TActionManager を使用する方がよりシンプルになります。
と書いてあるけどこれは何?
TActionManager
TActionManagerはAdditionalタブの中にある。
TActionManagerは、TActionListの機能に加えて、アクションリストエディタでアクションをカテゴリにドラッグドロップできたり、ActionToolBarを作ったり、ActionToolBarやActionMainMenuBarにアクションをドラッグドロップできたり確かに便利だ。
特に上記の定義済みのアクションと組み合わせるとあっという間に(コーディングなしで)編集機能(EditCopy、EditPaste、EditSelectAllなど)を持ったMemoができてしまった。
今後、まっさらなフォームには、まずActionManagerを配置することにします。