通常可以像这样更改 TActionMainMenuBar 或 TMainMenu 的字体:
Screen.MenuFont.Name := 'Calibri';
使用 Vcl 样式时,如果为组件注册了 StyleHook,则不再可能。我进入位图样式设计器(以前称为 Vcl 样式设计器)并更改了MenuItemTextNormal的字体。
问题是更改字体没有任何作用,我只能成功更改文本的颜色。
显然我在这里遗漏了一些东西,为什么我可以更改颜色而不是字体?
通常可以像这样更改 TActionMainMenuBar 或 TMainMenu 的字体:
Screen.MenuFont.Name := 'Calibri';
使用 Vcl 样式时,如果为组件注册了 StyleHook,则不再可能。我进入位图样式设计器(以前称为 Vcl 样式设计器)并更改了MenuItemTextNormal的字体。
问题是更改字体没有任何作用,我只能成功更改文本的颜色。
显然我在这里遗漏了一些东西,为什么我可以更改颜色而不是字体?
正如您所说,在样式设计器中更改MenuItemTextNormal元素(或任何其他元素)的字体没有效果,这是因为 Vcl 样式引擎只是忽略了字体大小和名称,而只是使用 vcl 样式文件中定义的字体颜色.
作为解决方法,您必须定义和注册一个新的TActionBarStyleEx后代并覆盖 TCustomMenuItem 和 TCustomMenuButton 类的 DrawText 方法,使用 Screen.MenuFont 的值来绘制菜单。
我刚刚在Vcl Styles UtilsVcl.PlatformVclStylesActnCtrls
项目中添加了一个新单元 ( ),它实现了一个新的 Action Bar Style,它允许自定义组件的字体和大小。TActionMainMenuBar
要使用它,只需将 Vcl.PlatformVclStylesActnCtrls 单元添加到您的项目中,更改Screen.MenuFont
字体的值,例如
Screen.MenuFont.Name := 'Impact';
Screen.MenuFont.Size := 12;
然后像这样设置 TActionManager 的样式
ActionManager1.Style:=PlatformVclStylesStyle;
结果将是