1

使用: 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 に設定されている) のスクリーン キャプチャです。

これは、デザイン モードで最初に表示されるものです。

ティア。

4

1 に答える 1