MDI アプリケーションがあり、TActionManager を使用してアプリケーション内のアクションを管理しています。これは、MDIChild フォームのアクションが含まれていることも意味します。
私の問題を再現する簡単な例を次に示します。
2 つのフォームを含む新しい VCL フォーム アプリケーションを作成します。Form1 & Form2 Form1 に TButton と TActionManager をドロップします。TActionManager のポップアップ エディタを使用して 2 つの TAction を作成します。Form1 に FormStyle := fsMDIForm を設定します。Form2 に FormStyle := fsMDIChild を設定します。
このコードを対応するイベントに追加します。
// Form1
procedure TForm1.Action1Execute(Sender: TObject);
begin
ShowMessage('Action1');
end;
procedure TForm1.Action2Execute(Sender: TObject);
begin
ShowMessage('Action2');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
oForm2: TForm2;
begin
oForm2 := TForm2.Create(Application);
end;
// Form 2
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
Form2 に TActionToolBar をドロップします。TActionManager PopUp Editor を使用して、この TActionToolBar に Action1 と Action2 をドロップします。保存して実行します。Form1 のボタンをクリックして、Form2 を表示します。すべてが期待どおりに機能します。Form2 を閉じて、再度開きます。アクションが不足しています...
本当に TActionManager を使用する必要があることを知って、アクションが失われないようにする方法はありますか?