簡體   English   中英

如何處理從 Delphi 6 和 WinXP 到 Delphi 2007 和 Vista/Win7 的表單大小問題

[英]How to deal with form size issues from Delphi 6 and WinXP to Delphi 2007 and Vista/Win7

我有一個用 Delphi 6 編寫並在 Windows XP 上編譯的應用程序。 通常我在控件和 forms 的邊緣之間留出 8px 的空白。

當這個應用程序在 Vista 或 Win 7 上運行時,這個差距會更小或根本不存在。 我認為這可能是因為這些版本的 Windows 具有更厚的邊框。

現在我將應用程序移動到 Delphi 2007。在表單設計器中,forms 失去了底部和右側的間隙。

我應該如何處理? 我有數百個 forms 並且不想 go 全部更改。 此外,我們的大多數用戶都在 Win XP 上運行該應用程序,所以我不想讓它在 XP 中看起來很糟糕。

簡短版本:將所有表單更改為AutoScroll = False


問題在於表單的AutoScroll屬性,以及它如何影響 DFM 中存儲的表單大小。

如果AutoScroll(默認),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 上運行
  • 您使用小型 fonts 進行開發,程序使用大型 fonts 運行

Windows 2000 的邊框為 4 像素,標題欄為 23 像素。 DFM 存儲的Height為 375,這為表單客戶區留下了 348 像素。

在具有更高(28 像素)標題欄的 Windows XP 上運行相同的程序。 DFM 存儲 375 像素的Height ,這為客戶區域留下了 343 像素。

您的表單“縮短了 5 個像素”。

您需要通過關閉AutoScroll來強制 Delphi 將ClientWidthClientHeight存儲在 DFM 中。

現在,當您在 Windows XP 上創建 348 像素高的表單時,它在客戶區域中將繼續具有 348 像素 - 但是需要額外高才能具有標題欄。

我 go 到目前為止,如果我的幫助程序庫代碼發現任何形式錯誤地將AutoScroll設置為true ,那么它就有一個OutputDebugString和一個斷點觸發器。


編輯:因為我試圖成為一名優秀的開發人員,所以我讓我的表單尊重用戶的字體偏好。 在我所有的 forms 的OnCreate期間,我調用StandardizeForm(Self) function :

  • 縮放表單以匹配用戶的默認字體大小
  • 將表單上所有控件的字體更改為用戶的偏好
  • 如果表單被錯誤地設置為Scaled ,則發出 ODS
  • 如果AutoScroll為真(並將其設置為假),則發出 ODS 和斷點
  • 如果ShowHint為假,則發出 ODS 和斷點(並將其打開)
  • ETC

你可以做類似的事情。 是的,您必須添加:

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

但這對我來說是值得的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM