3 回答

TA貢獻1876條經驗 獲得超5個贊
注意:請參閱其他答案,因為它們包含非常有價值的技術。我在這里的回答僅提供警告和警告,以防止容易理解DPI。
我通常避免使用進行DPI感知縮放TForm.Scaled = True
。僅當DPI意識對打電話給我并愿意為此付費的客戶變得重要時,它才對我重要。這種觀點背后的技術原因是,無論是否了解DPI,您都在打開一個通往受傷世界的窗口。許多標準和第三方VCL控件在High DPI中不能很好地工作。值得注意的例外是,包裝Windows Common Controls的VCL部件在高DPI時表現出色。大量的第三方和內置的Delphi VCL自定義控件無法很好地發揮作用,或者根本無法達到很高的DPI。如果您打算打開TForm.Scaled,請確保針對項目中的每個表單,您使用的每個第三方和內置控件都以96、125和150 DPI進行測試。
Delphi本身是用Delphi編寫的。對于大多數形式,它都已打開“高DPI意識”標記,盡管就在大多數形式中,即使在Delphi XE2中,IDE作者自己也決定不打開“高DPI意識”清單標記。請注意,在Delphi XE4和更高版本中,HIGH DPI感知標記已打開,并且IDE看起來不錯。
我建議您不要使用具有高DPI Aware標志(如David的答案所示)的TForm.Scaled = true(這是Delphi中的默認設置,因此,除非您對其進行了修改,否則大多數表單都具有Scaled = true)。使用內置的delphi表單設計器構建的VCL應用程序。
過去,我曾嘗試對TForm.Scaled為true以及Delphi表單縮放出現毛刺時希望看到的那種破損進行最小化的采樣。這些故障并非總是且僅由DPI值(而不是96)觸發。我無法確定其他因素的完整列表,包括Windows XP字體大小的更改。但是,由于大多數故障僅出現在我自己的應用程序中,因此在相當復雜的情況下,我決定向您展示一些可以驗證自己的證據。
在Windows 7中將DPI Scaling設置為“ Fonts @ 200%”時,Delphi XE看起來像這樣,并且在Windows 7和8中,Delphi XE2同樣被破壞,但是這些問題在Delphi XE4上似乎已得到修復:
這些大多數是標準的V控件,在高DPI時表現不佳。請注意,大多數事情根本沒有擴展,因此Delphi IDE開發人員決定忽略DPI意識,并關閉DPI虛擬化。如此有趣的選擇。
僅在需要這種新的痛苦和困難選擇的新來源時,才關閉DPI虛擬化。我建議你別管它。請注意,Windows通用控件似乎似乎可以正常工作。請注意,Delphi數據瀏覽器控件是一個圍繞標準Windows Tree公共控件的C#WinForms包裝器。那純粹是微軟的小故障,要解決這個問題,要么需要Embarcadero為他們的數據瀏覽器重寫一個純凈的本機.Net樹控件,要么編寫一些DPI-check-and-modify-properties代碼來更改控件中的項目高度。甚至Microsoft WinForms都不能自動,自動地且無需自定義kludge代碼來處理高DPI。
更新:有趣的事實:盡管delphi IDE似乎沒有被“虛擬化”,但它并未使用David所示的清單內容來實現“非DPI虛擬化”。也許它在運行時使用一些API函數。
更新2:針對我將如何支持100%/ 125%DPI的要求,我提出了一個兩階段計劃。第1階段是清點我的代碼,以獲取需要針對高DPI進行修復的自定義控件,然后制定計劃對其進行修復或逐步淘汰。第2階段將采用代碼的某些區域,這些區域被設計為沒有布局管理的表單,然后將它們轉換為使用某種布局管理的表單,以便DPI或字體高度更改可以在不進行裁剪的情況下起作用。我懷疑這種“內部控制”布局工作在大多數應用程序中會比“內部控制”工作復雜得多。
- 3 回答
- 0 關注
- 1563 瀏覽
添加回答
舉報