使用: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)的截屏:
TIA。
答案 0 :(得分:0)
在添加您的操作项后调用ActionMainMenuBar1.ActionClient.Items[3].CommandStyle := csMenu;
将强制重新创建Commandproperties,因此您的会话类别将可访问。