[英]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 將存儲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 存儲的Height
為 375,這為表單客戶區留下了 348 像素。
在具有更高(28 像素)標題欄的 Windows XP 上運行相同的程序。 DFM 存儲 375 像素的Height
,這為客戶區域留下了 343 像素。
您的表單“縮短了 5 個像素”。
您需要通過關閉AutoScroll
來強制 Delphi 將ClientWidth
和ClientHeight
存儲在 DFM 中。
現在,當您在 Windows XP 上創建 348 像素高的表單時,它在客戶區域中將繼續具有 348 像素 - 但是需要額外高才能具有標題欄。
我 go 到目前為止,如果我的幫助程序庫代碼發現任何形式錯誤地將AutoScroll
設置為true ,那么它就有一個OutputDebugString
和一個斷點觸發器。
編輯:因為我試圖成為一名優秀的開發人員,所以我讓我的表單尊重用戶的字體偏好。 在我所有的 forms 的OnCreate
期間,我調用StandardizeForm(Self)
function :
Scaled
,則發出 ODSAutoScroll
為真(並將其設置為假),則發出 ODS 和斷點ShowHint
為假,則發出 ODS 和斷點(並將其打開)你可以做類似的事情。 是的,您必須添加:
procedure TCustomerEditForm.FormCreat(Sender: TObject);
begin
StandardizeForm(Self); //Pay your taxes!
...
end;
但這對我來說是值得的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.