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

标签 delphi fonts vcl-styles delphi-xe3 taction

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

Screen.MenuFont.Name := 'Calibri';

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

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

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

最佳答案

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

作为解决方法,您必须定义并注册一个新的 TActionBarStyleEx派生并重写 TCustomMenuItem 和 TCustomMenuButton 类的 DrawText 方法,使用 Screen.MenuFont 的值来绘制菜单。

我刚刚向 Vcl.PlatformVclStylesActnCtrls 添加了一个新单位 ( Vcl Styles Utils )项目实现了新的操作栏样式,允许自定义TActionMainMenuBar的字体和大小。组件。

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

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

然后像这样设置 TActionManager 的样式

  ActionManager1.Style:=PlatformVclStylesStyle;

结果将是

enter image description here

关于delphi - 使用 Vcl 样式时更改 TActionMainMenuBar 的字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13154517/

相关文章:

delphi - 在 Delphi 中如何查看谁触发了某个操作?

android - 如何支持 Android 默认语言环境中不存在的自定义语言环境字体

delphi - 如何在Delphi中禁用VCL样式

delphi - 使用VCL主题在FormClose中获取访问冲突错误

php - 在 Magento 商店中更改字体

delphi - TDateTimePicker 的样式属性

delphi - TValue 字符串<--> bool 值来回

delphi - 标准用户(XP/Server 2003及以下)如何获取所有正在运行的进程的镜像路径?

Delphi 无边框和无标题应用程序

c# - 获取字体支持的字符 - 在 C# 中