通常情况下一个可以改变一个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.PlatformVclStylesActnCtrls
)到Vcl的样式utils的项目,该项目实现了新的操作栏样式,允许自定义的字体和大小TActionMainMenuBar
组件。
要使用它只有Vcl.PlatformVclStylesActnCtrls单元添加到项目中,改变的值Screen.MenuFont
字体像
Screen.MenuFont.Name := 'Impact';
Screen.MenuFont.Size := 12;
然后设置你的TActionManager的风格,像这样
ActionManager1.Style:=PlatformVclStylesStyle;
其结果将是