Delphi – 整个项目的字体一致性?

前端之家收集整理的这篇文章主要介绍了Delphi – 整个项目的字体一致性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有一个快速有效的方法来应用一个要在项目中使用的全局字体?

这意味着我想设置一个特定的字体名称,我的项目中的所有控件将使用,如TButton,TEdit,TLabel等。

通常,为Form而设置Font而不是特定的控件会将该窗体上的所有控件都更改为指定的Font。

但是,如果您在特定控件上手动更改字体,则会出现一个小问题,然后通过表单设置字体将不再更新以前已手动更改的控件。

想法1

我正在考虑使用For循环并遍历我的Forms上的每个组件,并以这种方式设置Font,例如:

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  with TForm(Self) do
  begin
    for i := 0 to ComponentCount - 1 do
    begin
      if Components[i] is TButton then
      begin
        TButton(Components[i]).Font.Name  := 'MS Sans Serif';
        TButton(Components[i]).Font.Size  := 8;
        TButton(Components[i]).Font.Style := [fsBold];
      end;

      if Components[i] is TLabel then
      begin
        TLabel(Components[i]).Font.Name  := 'MS Sans Serif';
        TLabel(Components[i]).Font.Size  := 8;
        TLabel(Components[i]).Font.Style := [fsBold];
      end;
    end;
  end;
end;

但是这样做看起来很混乱,它也将是一个相当数量代码,用于一个简单的任务。

想法2

我知道我可以在设计时手动更改每个控件的字体,但是通过这种方式可以花费时间,甚至可能会错过一个控件。

想法3

与Idea 2类似,另一种方法可能是以Form(DFM)形式查看Form,并以此方式查找和替换该字体。

基本上我要在我的应用程序中保持一致,并且在整个过程中使用一个字体是我正在寻找的。

我在这里遗漏了一些完全明显的东西,是我试图为这样的任务做过度的杀伤力?

解决方法

正如评论中所讨论的,这个关键是ParentFont属性。该属性在VCL层次结构中的各个点定义。如果将ParentFont设置为链中所有组件的True,那么您可以通过修改整个应用程序来更改整个应用程序的字体
Application.DefaultFont

默认情况下,大多数组件将ParentFont设置为True,因此您无关。奇怪的是TForm。一个全新的默认窗体将ParentFont设置为False。这有点令人失望,但我怀疑反映的事实是,VCL的原始设计师并没有预料到这一点,并且ParentFont在VCL的发展相对较晚。

无论在理想的世界中,应用程序中的所有表单都应该从您控制的普通基类派生出来。如果是这样,那么你可以简单地改变那里,将ParentFont设置为True,确保没有明确的字体设置应用于您的表单上的任何组件,而且您是黄金的。通过单个属性控制整个应用程序的字体。如果您的表单没有共同的基类,这里是添加它的理想时间。如果您不想这样做,那么您需要为每个表单设置ParentFont。

其他相关的属性Screen.MessageFontScreen.MenuFont.这些提供了对消息框和菜单中使用的字体的全局控制。然而,Delphi的最新版本已经转移到Windows控件上的消息框和菜单的绘制,因此这些属性没有任何作用。

猜你在找的Delphi相关文章