kol*_*kol 4 forms delphi resize
我开发了一个遗留的 Delphi 6 应用程序,我想增加其中一个表单的字体大小。所有其他形式都有Microsoft Sans Serif 8pt,但这一形式设置为Microsoft Sans Serif 7pt。所有控件都有ParentFont = True,所以我可以简单地将表单的字体大小设置为8pt. 问题是表单及其控件不会调整大小,并且标签的文本会重叠。有没有一种简单的方法可以在调整字体大小后调整表单大小,而无需在表单编辑器中手动调整其控件大小?
在设计时,您可以通过手动编辑 .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 文件版本进行比较。会有一些您不想接受的更改,但大多数更改将是您确实想要的位置和大小更改。
| 归档时间: |
|
| 查看次数: |
1845 次 |
| 最近记录: |