gpt4 book ai didi

windows - 从Delphi 6和WinXP到Delphi 2007和Vista/Win7如何处理窗体大小问题

转载 作者:可可西里 更新时间:2023-11-01 13:20:20 25 4
gpt4 key购买 nike

我有一个用 Delphi 6 编写并在 Windows XP 上编译的应用程序。通常我在控件和表单边缘之间留出 8px 的空隙。

当此应用程序在 Vista 或 Win 7 上运行时,此差距较小或根本不存在。我认为这可能是因为这些版本的 Windows 具有较粗的窗体边框。

现在我正在将应用程序移动到 Delphi 2007。在表单设计器中,表单已经失去了底部和右侧的空白。

我该如何处理?我有数百种形式,不想全部更改。此外,我们的大多数用户都在 Win XP 上运行该应用程序,因此我不想让它在 XP 中看起来很糟糕。

最佳答案

简短版本:将所有表单更改为 AutoScroll = False


问题是表单的 AutoScroll 属性,以及它如何影响存储在 DFM 中的表单大小。

如果 AutoScrolltrue(默认值),DFM 将存储 WidthHeight:

object Form1: TForm1
Left = 192
Top = 114
Width = 544
Height = 375
Caption = 'Form1'
...

如果 AutoScrollfalse(首选 设置),DFM 将存储 ClientWidthClientHeight :

object frmSplash: TfrmSplash
Left = 192
Top = 114
ClientWidth = 536
ClientHeight = 348
Caption = 'Form1'

存储 Height 的问题是当用户的标题栏 与您的开发机器的尺寸不同时会发生什么,例如

  • 你在Windows 2000上开发,程序在Windows XP上运行
  • 您在 Windows XP 上开发,程序在 Windows Vista 上运行
  • 你用小字体开发,程序用大字体运行

Windows 2000 有一个 4 像素的边框和一个 23 像素的标题栏。由于 DFM 存储的 Height 为 375,因此表单客户区还剩下 348px。

在标题栏更高(28 像素)的 Windows XP 上运行相同的程序。由于 DFM 存储了 375 像素的 Height,因此客户区还剩下 343px。

您的表单“缩短了 5 个像素”。

您需要通过关闭 AutoScroll 来强制 Delphi 在 DFM 中存储 ClientWidthClientHeight

现在,当您在 Windows XP 上创建 348 像素高的表单时,它在客户区中将继续具有 348 像素 - 但是需要更高才能拥有标题栏。

如果我的助手库代码发现任何错误地将 AutoScroll 设置为 true OutputDebugString 和一个断点触发器强>.


编辑:因为我努力成为一名优秀的开发人员,所以我让我的表单尊重用户的字体偏好。在我所有表单的 OnCreate 期间,我调用了一个 StandardizeForm(Self) 函数:

  • 缩放表单以匹配用户的默认字体大小
  • 根据用户的喜好更改表单上所有控件的字体
  • 如果表单被错误地设置为 Scaled,则发出 ODS
  • 如果 AutoScroll 为真(并将其设置为假)则发出 ODS 和断点
  • 如果 ShowHint 为假(并打开它),则发出 ODS 和断点
  • 等等

您可以做类似的事情。是的,您必须添加:

procedure TCustomerEditForm.FormCreat(Sender: TObject);
begin
StandardizeForm(Self); //Pay your taxes!
...
end;

但这对我来说是值得的。

关于windows - 从Delphi 6和WinXP到Delphi 2007和Vista/Win7如何处理窗体大小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6213965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com