我有一个带有2个标签的TFrame。在设计时将其设置为Verdana 10
。另一个在TFrame的构造函数中设置为Verdana 10
。
设计时外观:
procedure TMyFrame.Button1Click(Sender: TObject);
begin
SetFont;
end;
constructor TMyFrame.Create(AOwner: TComponent);
begin
inherited;
SetFont;
end;
procedure TMyFrame.SetFont;
begin
Label1.Font.Name := 'Verdana';
Label1.Font.Size := 10;
end;
我以主窗体动态创建框架:
procedure TForm1.FormCreate(Sender: TObject);
begin
FMyFrame := TMyFrame.Create(Self);
FMyFrame.Parent := Self;
FMyFrame.Align := alClient;
end;
运行应用程序时,在运行时更改的带有字体的Label(在TFrame.Create构造函数中)过大:
因此,代码在运行时可以正常运行,只是在TFrame.Create中不起作用。
如何纠正?
我在Windows 10上以150%的缩放比例运行,并且运行Delphi 10.2 Tokyo。
编辑
基于评论,我为Font.OnChange添加了一些处理程序,如下所示:
constructor TMyFrame.Create(AOwner: TComponent);
begin
inherited;
Self.Font.OnChange := FontChanged;
Self.Label1.Font.OnChange := LabelFontChanged;
SetFont;
end;
procedure TMyFrame.FontChanged(Sender: TObject);
begin
// empty
end;
procedure TMyFrame.LabelFontChanged(Sender: TObject);
begin
// empty
end;
我非常奇怪的是,在这种情况下,结果是预期的(即正确的Verdana 10
)。只需为Frame.Font和Label.Font设置一个OnChange处理程序,即使它们为空也会得到不同的/正确的结果。
有什么想法吗?