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。 其他相关的属性是 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |