我正在开发一个旧版Delphi 6应用程序,我想增加其中一个窗体的字体大小。所有其他窗体都是“Microsoft Sans Serif 8pt”,但这个窗体设置为“Microsoft Sans Serif 7pt”。所有控件都使用了“ParentFont = True”,因此我可以简单地将窗体的字体大小设置为“8pt”。问题是窗体及其控件不会自动调整大小,标签文本会重叠。是否有一种简单的方法,在调整字体大小后调整窗体的大小,而无需在窗体编辑器中手动调整其控件大小?
在设计时,您可以通过手动编辑 .dfm 文件来进行更改。确保将表单保存并设置为 Scaled
属性为 True
。
然后,在 Delphi 中关闭项目或关闭 Delphi。接下来,在文本编辑器中打开 .dfm 文件并调整表单的 TextHeight
属性。例如,如果您想将比例从 7pt 缩放到 8pt,并且 TextHeight
设置为 13
,那么您应将其更改为 11
。然后重新加载项目并在设计器中打开表单,您的表单将被缩放。这不会完全精确缩放,因为您不能使用浮点值来设置 TextHeight
。但它可能已经足够好了。
在运行时,您可以调用 ChangeScale
:
ChangeScale(NewFont.Size, OldFont.Size);
ChangeScale
是一个受保护成员。因此,根据您调用的位置,您可能需要使用受保护成员hack。TextHeight
更精确地控制。OnShow
事件上:procedure TMyForm.FormShow(Sender: TObject);
var
BinaryStream, TextStream: TStream;
begin
BinaryStream := TMemoryStream.Create;
Try
BinaryStream.WriteComponent(Self);
BinaryStream.Position := 0;
TextStream := TFileStream.Create('MyForm.dfm', fmCreate);
Try
ObjectBinaryToText(BinaryStream, TextStream);
Finally
TextStream.Free;
End;
Finally
BinaryStream.Free;
End;
end;
ChangeScale
的运行时选项仍然是最好的选择。这将为您提供最准确的缩放。 - David HeffernanPixelsPerInch
。我认为这些都是神奇的属性,用于存储上一次设计该表单的机器的度量标准。如果您在具有不同字体缩放比例的机器上打开表单,则会调用ChangeScale
并缩放表单。但我不记得细节了。我上次看这个已经很久了。 - David Heffernan