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