使用Vcl样式时更改TActionMainMenuBar的字体

时间:2012-10-31 09:11:44

标签: delphi fonts vcl-styles delphi-xe3 taction

通常可以像这样改变TActionMainMenuBar或TMainMenu的字体:

Screen.MenuFont.Name := 'Calibri';

使用Vcl样式时,如果为组件注册了StyleHook,则无法再使用它。 我进入了位图样式设计器(以前称为Vcl样式设计器)并更改了 MenuItemTextNormal 的字体。

问题是更改Font没有任何作用,我只能成功更改文本的颜色。

显然我在这里遗漏了一些东西,为什么我可以更改颜色而不是字体?

1 个答案:

答案 0 :(得分:5)

正如您所说,更改样式设计器中 MenuItemTextNormal 元素(或任何其他)的字体无效,这是因为Vcl样式引擎只是忽略了字体大小和名称,只使用vcl样式文件中定义的字体颜色。

作为解决方法,您必须定义并注册新的TActionBarStyleEx后代并覆盖TCustomMenuItem和TCustomMenuButton类的DrawText方法,使用Screen.MenuFont的值绘制菜单。

我刚刚向Vcl.PlatformVclStylesActnCtrls项目添加了一个新单元(Vcl Styles Utils),该项目实现了一个新的Action Bar Style,允许自定义TActionMainMenuBar组件的字体和大小。

要使用它,只需将Vcl.PlatformVclStylesActnCtrls单位添加到项目中,更改Screen.MenuFont字体的值,如

 Screen.MenuFont.Name := 'Impact';
 Screen.MenuFont.Size := 12;

然后像这样设置TActionManager的样式

  ActionManager1.Style:=PlatformVclStylesStyle;

结果将是

enter image description here