这意味着我想设置一个特定的字体名称,我的项目中的所有控件将使用,如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,并以此方式查找和替换该字体。
基本上我要在我的应用程序中保持一致,并且在整个过程中使用一个字体是我正在寻找的。
我在这里遗漏了一些完全明显的东西,是我试图为这样的任务做过度的杀伤力?
解决方法
Application.DefaultFont
默认情况下,大多数组件将ParentFont设置为True,因此您无关。奇怪的是TForm。一个全新的默认窗体将ParentFont设置为False。这有点令人失望,但我怀疑反映的事实是,VCL的原始设计师并没有预料到这一点,并且ParentFont在VCL的发展相对较晚。
无论在理想的世界中,应用程序中的所有表单都应该从您控制的普通基类派生出来。如果是这样,那么你可以简单地改变那里,将ParentFont设置为True,确保没有明确的字体设置应用于您的表单上的任何组件,而且您是黄金的。通过单个属性控制整个应用程序的字体。如果您的表单没有共同的基类,这里是添加它的理想时间。如果您不想这样做,那么您需要为每个表单设置ParentFont。
其他相关的属性是Screen.MessageFont
和Screen.MenuFont
.这些提供了对消息框和菜单中使用的字体的全局控制。然而,Delphi的最新版本已经转移到Windows控件上的消息框和菜单的绘制,因此这些属性没有任何作用。