使用: Delphi XE2、32 ビット Windows VCL フォーム アプリケーション
ActionManager で、アクションを追加し、カテゴリ名を割り当てました。次に、カテゴリを ActionManager からフォームの ActionMainMenuBar にドラッグ アンド ドロップします。これは、ActionMainMenuBar にメニュー項目を作成するために行いました。コードを介して手動でアクションを作成および追加する予定であり、「最初の」アクションを実際に使用しないため、 を設定して非表示にしますVisbile := False
。
ただし、実行時に、プログラムでアクションを作成してメニューに追加した後でも、メニューは無効のままになります。追加されたアクションが有効になり、有効な OnExecute イベント ハンドラーがあるため、これは予期されていません。
私の質問は、1 つ以上のアクション アイテム (サブ メニュー アイテム) を追加した後に有効になるように、メニュー アイテムを更新するにはどうすればよいですか?
コードでは、私はこれを持っています:
// Create menu for each session in the Session menu
// eg. Session 1, Session 2, Session 3 etc.
var
p: Integer;
s: String;
begin
// this code executes a number of times ie in a loop
p := Pos(' ', s);
a := TAction.Create(actMgr);
a.Category := 'Session';
a.Name := 'actSession' + Copy(s, p + 1, Length(s) - p);
a.Caption := 'Session ' + Copy(s, p + 1, Length(s) - p);
a.Enabled := True;
a.OnExecute := actSessionExecute;
p := ActionMainMenuBar1.ActionClient.Items[3].Items.Count - 1;
actMgr.AddAction(a, ActionMainMenuBar1.ActionClient.Items[3].Items[p]);
end;
procedure TfMain.actSessionExecute(Sender: TObject);
begin
showmessage(TAction(Sender).Name);
end;
以下は、デザイン モードでの ActionMainMenuBar、ActionManager、および初期アクション (Visible が False に設定されている) のスクリーン キャプチャです。
ティア。