如何在ActionMainMenuBar上的主菜单(= Category,via TAction子菜单)上添加OnClick事件?

时间:2013-09-06 17:58:11

标签: delphi delphi-xe3 tactionmanager

我正在用TMainMenu替换我的旧TActionMainMenuBar,但是有一些问题。

我目前正在使用'OnClick'处理程序的主菜单项,但我找不到用TActionMainMenuBar重现相同行为的方法。

例如,我使用“Sample”类别创建了一个TAction“Test”,然后将其拖放到TActionMainMenuBar上。我可以将代码添加到子菜单“Test”的执行处理程序中,因为它分配了TAction,但是我不能将事件代码添加到主菜单项“Sample”,因为它只是一个没有事件的“测试”类别/ TActionClientItem。

我尝试将动作分配给此TActionClientItem,但是Delphi XE3说“你不能设置属性......”当我点击它时它会给我一个对话框“动作未针对当前框架实现”无“”。

另一种方式是两个TActions,“Sample”和“Test”带“(无类别)”,但我无法拖放“Test”作为“Sample”的子菜单之前已放弃TActionMenuBar。看起来我只能拖放主菜单项,而不是空主菜单项上的子菜单项。

1 个答案:

答案 0 :(得分:0)

使用主菜单项的OnClick处理程序的目的通常是确定子菜单项是启用/禁用还是可见。通常也可以启用/禁用执行相同功能的工具栏按钮之类的东西:

procedure TForm1.MyMainMenuItemClick(Sender: TObject);
begin
  SomeMenuItem.Enabled := SomeConditionTest;
  SomeToolButton.Enabled := SomeMenuItem.Enabled;
  AnotherMenuItem.Enabled := AnotherConditionTest;
  AnotherToolButton.Enabled := AnotherMenuItem.Enabled;
end;

对于TActionMainMenuBar项,您可以在OnUpdate事件中的单个操作中执行此操作。这样做的好处是,当您启用/禁用操作时,连接到操作的所有控件也会同时启用/禁用。

procedure TForm1.SomeActionUpdate(Sender: TObject);
begin
  SomeAction.Enabled := SomeConditionTest;  // Also controls the toolbutton
end;

procedure TForm1.AnotherActionUpdate(Sender: TObject);
begin
  AnotherAction.Enabled := AnotherConditionTest; // Toolbutton too.
end;

在显示子项之前调用OnUpdate事件,这与调用旧主菜单项OnClick的时间相同。