在150%缩放的TFrame构造函数中,设置Font.Size不能正常工作(Delphi 10.2 Tokyo)

时间:2019-02-24 15:26:03

标签: delphi highdpi

我有一个带有2个标签的TFrame。在设计时将其设置为Verdana 10。另一个在TFrame的构造函数中设置为Verdana 10

设计时外观:

enter image description here

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构造函数中)过大:

enter image description here

如果单击按钮,则标签将正确调整大小: enter image description here

因此,代码在运行时可以正常运行,只是在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处理程序,即使它们为空也会得到不同的/正确的结果。

有什么想法吗?

0 个答案:

没有答案