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 воссоздать, так что ваша категория сеанса будет доступна.