4

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

4

1 回答 1

4

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

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


在运行时,您可以调用ChangeScale

ChangeScale(NewFont.Size, OldFont.Size);

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

然后一种选择是在运行时调用表单持久性框架以生成 .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;

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

于 2013-01-31T16:07:02.470 回答