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

时间:2013-01-31 16:04:56

标签: forms delphi resize

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

1 个答案:

答案 0 :(得分:4)

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

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


在运行时,您可以拨打ChangeScale

ChangeScale(NewFont.Size, OldFont.Size);

请注意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;

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