当这个应用程序在Vista或Win 7上运行时,这个差距更小或根本不存在.我认为这可能是因为这些版本的Windows具有较厚的表单边框.
现在我将应用程序移动到Delphi 2007.在表单设计器中,表单已经失去了底部和右侧的差距.
我应该怎么处理这个?我有数百种表格,不想改变它们.此外,我们的大多数用户在Win XP上运行应用程序,因此我不想让它在XP中看起来很糟糕.
问题是表单的AutoScroll属性,以及它如何影响DFM中存储的表单大小.
如果AutoScroll为true(默认值),DFM将存储宽度和高度:
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'
存储高度的问题是当用户的标题栏与开发机器的大小不同时发生的问题,例如,
>您在Windows 2000上开发,程序在Windows XP上运行
>您在Windows XP上开发,程序在Windows Vista上运行
>使用小字体开发,使用大字体运行程序
Windows 2000有一个4像素的边框,带有23像素的标题栏. DFM存储高度为375,这为表单客户区留下348px.
在Windows XP上运行相同的程序,它具有更高的(28像素)标题栏. DFM存储高度为375像素,这为客户区留下了343px.
你的表格“缩短了5个像素”.
您需要通过关闭AutoScroll强制Delphi将ClientWidth和ClientHeight存储在DFM中.
现在,当您在Windows XP上创建348px高的表单时,它将在客户端区域中继续保留348像素 – 但是需要超高才能拥有标题栏.
如果我的帮助库代码找到任何错误地将AutoScroll设置为true的表单,我甚至会有一个OutputDebugString和一个断点触发器.
编辑:因为我试图成为一个优秀的开发人员,我使我的表格尊重用户的字体偏好.在我的所有表单的OnCreate期间,我调用StandardizeForm(Self)函数:
>缩放表单以匹配用户的默认字体大小
>将表单上所有控件上的字体更改为用户的首选项
>如果表单被错误地设置为Scaled,则发出ODS
>如果AutoScroll为true,则发出ODS和断点(并将其设置为false)
>如果ShowHint为false(并将其打开),则发出ODS和断点
>等
你可以做类似的事情.是的,你必须添加:
procedure TCustomerEditForm.FormCreat(Sender: TObject); begin StandardizeForm(Self); //Pay your taxes! ... end;
但这对我来说是值得的.