在表单编辑器中调整字体大小后调整 Delphi 表单的大小

kol*_*kol 4 forms delphi resize

我开发了一个遗留的 Delphi 6 应用程序,我想增加其中一个表单的字体大小。所有其他形式都有Microsoft Sans Serif 8pt,但这一形式设置为Microsoft Sans Serif 7pt。所有控件都有ParentFont = True,所以我可以简单地将表单的字体大小设置为8pt. 问题是表单及其控件不会调整大小,并且标签的文本会重叠。有没有一种简单的方法可以在调整字体大小后调整表单大小,而无需在表单编辑器中手动调整其控件大小?

Dav*_*nan 5

在设计时,您可以通过手动编辑 .dfm 文件来实现更改。确保保存表单时Scaled属性设置为True

然后,关闭 Delphi 中的项目,或完全关闭 Delphi。接下来在文本编辑器中打开 .dfm 文件并调整 formsTextHeight属性。例如,如果您想从 7pt 缩放到 8pt,并且TextHeight设置为13,那么您应该将其更改为11。然后重新加载项目并在设计器中打开表单,您的表单将被缩放。这不会是完美的缩放,因为不允许使用浮点值TextHeight。但这可能已经足够好了。


在运行时,您可以调用ChangeScale

ChangeScale(NewFont.Size, OldFont.Size);
Run Code Online (Sandbox Code Playgroud)

请注意,这ChangeScale是一个受保护的成员。因此,根据您调用此方法的位置,您可能需要使用受保护的成员 hack。

一种选择是在运行时调用表单持久性框架来生成 .dfm 文件的缩放版本。这会让你比玩花样更精确的控制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;
Run Code Online (Sandbox Code Playgroud)

这将根据运行时状态生成一个新的 .dfm 文件。然后,您可以将其与版本控制系统中的 .dfm 文件版本进行比较。会有一些您不想接受的更改,但大多数更改将是您确实想要的位置和大小更改。

  • @Torbins 这将是一个非常巧妙的方法。一次性过程是否合理是值得商榷的。我个人希望在 CnPack/GExperts 中看到此功能,但我在他们的网站上找不到它。 (3认同)