0

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

我目前正在为我的主菜单项使用“OnClick”处理程序,但我找不到使用TActionMainMenuBar.

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

我试图为此分配一个动作TActionClientItem,但 Delphi XE3 说“你不能设置属性......”,当我点击它时,它给了我一个对话框“当前框架没有实现的动作'无'”。

另一种方法是两个TActions,“样本”和“测试”,“(无类别)”,但我不能将“测试”拖放为我TActionMenuBar之前放置的“样本”的子菜单。看起来我只能拖放主菜单项,而不是空主菜单项上的子菜单项。

4

1 回答 1

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

于 2013-09-06T21:37:50.980 回答