ActionMainMenuBar - пункт меню не обновляет свое отключенное состояние после добавления элементов действий вручную

Использование: Delphi XE2, 32-битное приложение Windows VCL формы

В ActionManager я добавил действие и назначил имя категории. Затем я перетаскиваю категорию из ActionManager в ActionMainMenuBar на форме. Я сделал это, чтобы создать пункт меню на ActionMainMenuBar. Поскольку я планирую создавать и добавлять действия вручную с помощью кода и не буду использовать "первое" действие, я его скрываю, установив Visbile := False,

Однако во время выполнения, даже после программного создания действий и добавления их в меню, меню остается отключенным - что не ожидается, поскольку добавляемые действия включены и имеют действительный обработчик события OnExecute.

У меня вопрос, как я могу обновить пункт меню, чтобы он был включен после добавления одного или нескольких элементов действий (элементов подменю)?

В коде у меня есть это:

  // 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 и начального Action (для которого Visible установлено значение False) в режиме разработки:

Вот как это выглядит изначально в режиме дизайна

ТИА.

1 ответ

Призвание ActionMainMenuBar1.ActionClient.Items[3].CommandStyle := csMenu; после добавления ваших элементов действия вы заставите свойства Command воссоздать, так что ваша категория сеанса будет доступна.

Другие вопросы по тегам