单击类别时动态修改ActionMenuBar项

时间:2015-07-03 12:31:23

标签: delphi

我正在使用ActionManager和ActionMenuBar创建菜单。我想在单击顶级菜单节点时从菜单中添加和减去项目,但我找不到干净的方法来执行此操作。例如,我想创建一个顶级菜单“Windows”,它托管与每个无模式窗体相对应的项目。我可以通过在ActionManager中创建一个名为Windows的类别并将“Windows”拖动到菜单栏来创建顶级“Windows”菜单。单击“Windows”时,我希望使用与应用程序的无模式窗体相对应的TActionClientItems填充Items属性。我确实知道在运行时动态添加动作客户端的机制(例如,在窗体的oncreate事件中)但我找不到在单击类别(在本例中为“Windows”)时触发的动作。

我可以通过在隐藏或显示表单时更新菜单来解决这个问题,但与按需更新菜单相比,这似乎是不优雅的。我尝试将动作附加到“Windows”actionclientitem,但动作的onexecute不会触发(显然是因为它是一个类别)。

可以通过以下步骤演示调用onexecute处理程序的失败:

  1. 在Actionmanager中创建名为“Action1”的动作并分配其动作 类别属性为“Windows”。
  2. 将“Windows”类别拖到 菜单栏。
  3. 创建名为WindowAction的操作并指定no 类别。
  4. 添加“Showmessage('x');”到了OnExecute WindowAction。
  5. 在设计器中,单击ActionManager1-> ActionBars-> 0-> Items - 。“0-Windows”(即TActionClients [0])。设置TActionClients [0] .Action:= WindowAction。
  6. 更正TActionClients [0]的标题,使其再次成为“Windows”。
  7. 运行程序,单击菜单上的“Windows”并显示未显示的消息。

0 个答案:

没有答案