TActionMainMenuBar有一个绘制根元素没有子项的错误。
使用Delphi XE2 / w7-32bit **
如何重现:
使用TActionMainMenuBar构建菜单,向其添加一些操作:
file | options | help
- New
- Open
- Save
-Exit
为所有操作分配一个空方法
procedure TfrmMain.ActionExecute(Sender: TObject);
begin
//
end;
现在运行应用程序并尝试单击选项或帮助元素 现在单击表单,但菜单元素仍然按下!
是否存在任何变通方法?
upd:查看截图,菜单元素已关闭,但鼠标光标不在菜单上,并且autocheck为false,并且检查也为false。
这里不是表格上的任何色彩映射,经理风格是平台默认
答案 0 :(得分:1)
这是我的解决方法:
创建这样的自定义类:
type
TFastThemedButton = class(TThemedMenuButton)
protected
procedure DrawBackground(var PaintRect: TRect); override;
end;
...
procedure TFastThemedButton.DrawBackground(var PaintRect: TRect);
const
MenuStates: array[Boolean {MouseInControl}, Boolean {Selected}] of TThemedMenu =
((tmMenuBarItemNormal, tmMenuBarItemPushed), (tmMenuBarItemHot, tmMenuBarItemPushed));
var
BannerRect: TRect;
StartCol, EndCol: TColor;
begin
Canvas.Brush.Color := ActionBar.ColorMap.Color;
Canvas.Font := ActionBar.Font;
StyleServices.DrawElement(Canvas.Handle, StyleServices.GetElementDetails(MenuStates[MouseInControl, (State=bsDown)]), PaintRect);
end;
现在你在TActionMainMenuBar.OnGetControlClass中添加这个简单的代码,并设置为buggy actionclients tag = -100
procedure TfrmActions.ActionMainMenuBar1GetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
begin
if ControlClass.InheritsFrom(TCustomMenuButton) and then
begin
if (AnItem.Tag =-100) and (ControlClass = TThemedMenuButton) then
ControlClass := TFastThemedButton;
end;
end;
好吧,现在所有带有-100标签的根项目都按我们的意愿工作
答案 1 :(得分:0)
我在所有表单上使用MainMenuExitMenuLoop事件与MainMenu.RecreateControls一起使用菜单。到目前为止,这将从菜单项中删除卡住的选择。