delphi – 解决TActionMainMenuBar绘图错误,其中项目未取消选择
发布时间:2020-12-15 09:46:12 所属栏目:大数据 来源:网络整理
导读:TActionMainMenuBar有一个绘制根元素没有子项的错误. 使用Delphi XE2 / w7-32bit ** 如何重现: 使用TActionMainMenuBar构建菜单,向其添加一些操作: file | options | help - New - Open - Save -Exit 为所有操作分配一个空方法 procedure TfrmMain.ActionE
TActionMainMenuBar有一个绘制根元素没有子项的错误.
使用Delphi XE2 / w7-32bit ** 如何重现: file | options | help - New - Open - Save -Exit 为所有操作分配一个空方法 procedure TfrmMain.ActionExecute(Sender: TObject); begin // end; 现在运行应用程序并尝试单击选项或帮助元素. 有任何变通方法吗? upd:看截图,菜单元素是down,但是鼠标光标不在菜单上,而autocheck是false,并且检查也是false. 解决方法
这是我的解决方法:
像这样创建自定义类: 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标签的根项目都按我们的意愿工作 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |