是否有一种快速有效的方法来应用在项目中使用的全局字体?
我的意思是我想设置,在我的项目中的所有控件都将使用如特定的字体名称TButton,TEdit,TLabel等.
通常为表单而不是特定控件设置字体会将该表单上的所有控件更改为指定的字体.
但是,如果您在特定控件上手动更改了字体,那么通过表单设置字体将不再更新先前已手动更改的控件.
想法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;
Run Code Online (Sandbox Code Playgroud)
但这样做看起来非常混乱,对于一个简单的任务来说,它也将是相当多的代码.
想法2
我知道我可以在设计时手动为每个控件逐个手动更改字体,但有几种形式要经过这可能需要时间,即使这样我也可能错过了一个控件.
想法3
与Idea 2类似,另一种方法可以是将表单视为文本(DFM)以及查找和替换该方式的字体.
基本上我要在我的应用程序中保持一致性,并且始终使用一个Font是我想要实现的.
我在这里错过了一些完全明显的东西,我正在尝试为这样的任务做些过分吗?
Dav*_*nan 25
正如评论中所讨论的,关键是ParentFont财产.此属性在VCL层次结构中的各个点定义.如果设置ParentFont为True链中的所有组件,则只需修改即可更改整个应用程序的字体
Application.DefaultFont
Run Code Online (Sandbox Code Playgroud)
默认情况下,大多数组件都设置ParentFont为True,因此您无需执行任何操作.奇怪的是,虽然是TForm.一个全新的默认表单已ParentFont设置为False.这有点令人失望但我怀疑这反映了这样一个事实,即VCL的原始设计师没有预料到这一点,并且ParentFont在VCL开发的相对较晚的时候嫁接了.
无论如何,在理想的世界中,应用程序中的所有表单都应该来自您控制的公共基类.如果是这样,那么你可以简单地在那里进行更改,设置ParentFont为True,确保没有明确的字体设置应用于表单上的任何组件,并且你是金色的.通过单个属性控制整个应用程序的字体.如果您没有表单的公共基类,这是添加表单的理想时间.如果您不想这样做,则需要ParentFont为每个表单设置.
其他相关的属性是Screen.MessageFont和Screen.MenuFont.它们提供对消息框和菜单中使用的字体的全局控制.但是,最新版本的Delphi已经回复了Windows对消息框和菜单绘制的控制,因此这些属性没有任何效果.