我开发了一个传统的Delphi 6应用程序,我想增加其中一个表单的字体大小。所有其他表单都有Microsoft Sans Serif 8pt
,但此表单设置为Microsoft Sans Serif 7pt
。所有控件都有ParentFont = True
,因此我只需将表单的字体大小设置为8pt
即可。问题是表单及其控件不会调整大小,标签文本会重叠。是否有一种简单的方法可以在调整字体大小后调整窗体大小,而无需在窗体编辑器中手动调整其控件大小?
答案 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文件的版本进行比较。您将不会接受一些更改,但主要是更改将是您想要的位置和大小更改。