我正在用TMainMenu
替换我的旧TActionMainMenuBar
,但是有一些问题。
我目前正在使用'OnClick'处理程序的主菜单项,但我找不到用TActionMainMenuBar
重现相同行为的方法。
例如,我使用“Sample”类别创建了一个TAction
“Test”,然后将其拖放到TActionMainMenuBar
上。我可以将代码添加到子菜单“Test”的执行处理程序中,因为它分配了TAction
,但是我不能将事件代码添加到主菜单项“Sample”,因为它只是一个没有事件的“测试”类别/ TActionClientItem。
我尝试将动作分配给此TActionClientItem
,但是Delphi XE3说“你不能设置属性......”当我点击它时它会给我一个对话框“动作未针对当前框架实现”无“”。
另一种方式是两个TActions
,“Sample”和“Test”带“(无类别)”,但我无法拖放“Test”作为“Sample”的子菜单之前已放弃TActionMenuBar
。看起来我只能拖放主菜单项,而不是空主菜单项上的子菜单项。
答案 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
的时间相同。