我有一个用Delphi 6编写的应用程序,并在Windows XP上编译。通常我会在控件和表单边缘之间留出8px的空白。
当此应用程序在Vista或Win 7上运行时,此差距较小或根本不存在。我想这可能是因为这些版本的Windows具有较厚的边框形式。
现在我正在将应用程序迁移到Delphi 2007.在表单设计器中,表单已经失去了底部和右边的空白。
我该如何处理?我有数百种表格,不想改变它们。此外,我们的大多数用户在Win XP上运行应用程序,因此我不想让它在XP中看起来很糟糕。
答案 0 :(得分:11)
简短版本:将所有表单更改为AutoScroll = False
问题是表单的AutoScroll
属性,以及它如何影响在DFM中存储的表单大小。
如果AutoScroll
为真(默认值),则DFM将存储Width
和Height
:
object Form1: TForm1
Left = 192
Top = 114
Width = 544
Height = 375
Caption = 'Form1'
...
如果AutoScroll
false (首选设置),则DFM将存储ClientWidth
和ClientHeight
:
object frmSplash: TfrmSplash
Left = 192
Top = 114
ClientWidth = 536
ClientHeight = 348
Caption = 'Form1'
存储Height
的问题是当用户的标题栏与开发机器的大小不同时会发生的问题,例如
Windows 2000有一个4像素的边框,带有23像素的标题栏。 DFM存储{37}的Height
,这为表单客户区留下348px。
在Windows XP上运行相同的程序,Windows XP具有更高的(28像素)标题栏。 DFM存储375像素的Height
,这为客户区留下了343px。
您的表单“缩短了5个像素”。
您需要强制Delphi通过关闭ClientWidth
将ClientHeight
和AutoScroll
存储在DFM中。
现在,当您在Windows XP上创建348px高的表单时,它将在客户端区域中继续保留348像素 - 但是如果需要额外的高,则需要一个标题栏。
如果我的帮助库代码发现任何错误地将OutputDebugString
设置为 true 的表单,我甚至会有AutoScroll
和断点触发器。
编辑:因为我试图成为一名优秀的开发者,所以我的表单会尊重用户的字体偏好。在我所有表单的OnCreate
期间,我调用StandardizeForm(Self)
函数:
Scaled
,则AutoScroll
为真,则发出ODS和断点(并将其设置为false) ShowHint
为假(并将其打开)你可以做类似的事情。是的,你必须添加:
procedure TCustomerEditForm.FormCreat(Sender: TObject);
begin
StandardizeForm(Self); //Pay your taxes!
...
end;
但这对我来说是值得的。