У меня есть TFrame с 2 метками.Один установлен на Verdana 10
во время разработки.Другой установлен в Verdana 10
в конструкторе TFrame.
Внешний вид времени разработки:
![enter image description here](https://i.stack.imgur.com/qskTp.png)
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;
Когда я запускаю приложение, метка со шрифтом, измененная во время выполнения (в конструкторе TFrame.Create), непропорционально велика:
![enter image description here](https://i.stack.imgur.com/Vzocc.png)
Если я нажму на кнопку, размер метки будет изменен правильно: ![enter image description here](https://i.stack.imgur.com/2c0vR.png)
Таким образом, код работает правильно во время выполнения, простоне работает в 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
).Простая установка обработчика OnChange для Frame.Font и Label.Font, даже если они пусты, приведет к другому / правильному результату.
Есть идеи?