不同DPI下窗体的自适应的有关注意点(转)
不同DPI下窗體的自適應(yīng)的有關(guān)注意點(轉(zhuǎn)自:http://hi.baidu.com/superkinger/blog/item/79e047ec6c80563526979197.html)
1.??????? 在設(shè)計窗體的時候需要考慮是否允許程序在不同DPI自適應(yīng)窗體,不自適應(yīng)的優(yōu)點是在不同的DPI下看到的結(jié)果基本是一樣的,缺點是可能在不同的DPI下看起來太小或者太大。
2.??????? 如果不想自適應(yīng)窗體,則設(shè)置窗體的Scaled為False
3.??????? 如果需要自適應(yīng)窗體,則設(shè)置窗體的Scaled為True(Delphi的窗體默認是允許Scaled的)
4.??????? 將AutoScroll屬性設(shè)置為False并保存窗體,AutoScroll為True表示不在運行期改變窗體的大小,這樣當(dāng)窗體的字體和組件進行縮放時看起來就會很糟糕。(在Delphi 7下,如果窗體可以調(diào)整大小,則AutoScroll會自動設(shè)定為True,而我們大部分的程序都是可以改變窗體大小的,Delphi默認的窗體也是可以改變窗體大小的,所以很多時候窗體就被不小心設(shè)置為Scaled和AutoScroll都是True了)
5.??????? 將窗體的自己設(shè)置為可以自適應(yīng)的TrueType字體,如Arial,Tahoma等;MS San Serif不是TrueType的,雖然大部分情況下看起來還行。(Delphi 2006調(diào)整了窗體的默認字體為Tahoma,可是之前版本的Delphi的窗體的默認字體都是MS San Serif,這個字體也是在Windows 2000等系統(tǒng)下看起來正常的中文字體到了Win98下卻很小很丑的元兇)
6.??????? 如果使用的字體在運行的操作系統(tǒng)中沒有,則Windows會自動在缺失字體的同一體系中選擇一種替換字體,不過替換字體的大小與原來設(shè)定的字體很可能不同,這樣也可能會導(dǎo)致問題。(可以通過向%WinDir%\Fonts添加字體,也可以通過系統(tǒng)消息向系統(tǒng)注冊字體)
7.??????? 將窗體的Position屬性設(shè)置為除poDesigned之外的值(Delphi 2006中的poDefaultPosOnly也不可以),因為如果設(shè)計的時候窗體被拉到Left為650的地方,那么窗體在640*480的分辨率下就會看不到了。
8.??????? 不要將窗體上的各個控件擠在一起,起碼要給各個控件之間留4個像素的位置,這樣當(dāng)Border屬性等導(dǎo)致控件變化的時候不會導(dǎo)致控件重疊在一起。
9.??????? 給單行的Align屬性不是alCenter的Label設(shè)置AutoSize為True。(多行的Label不要設(shè)置AutoSize為True)
10.???? 給Label/CheckBox等等控件足夠的空白范圍以便當(dāng)字體寬度變化時變化。預(yù)留當(dāng)前長度的25%是比較好的(如果要進行多語翻譯則需要更多留白,至少30%)。如果Label的AutoSize為False,則要Label的Width就要足夠大。對于多行的Label,在Label的底部起碼多留一行的空間。
11.???? 不要在不同的DPI下在IDE中打開并保存窗體(和包含窗體的代碼文件)。(對于SCM,推薦使用小字體-96DPI,Windows經(jīng)典主題)
12.???? 無論是在運行期還是在設(shè)計期都不要多次ReScale窗體,因為每次Scale都會帶來浮點精度的舍去;也不要修改一個窗體的PixelsPerInch屬性(IDE會阻止該屬性的修改,但是卻不能阻止手工修改),此外也不要直接修改dfm中的窗體大小等等信息,TextHeight屬性也不能修改。
13.???? 設(shè)計窗體的時候要考慮窗體的大小不要超過程序能運行的最小分辨率。
14.???? 設(shè)計窗體時,要合理設(shè)置控件的Anchors/Align等屬性。
15.???? 此外如TComboBox/TDBLookupCombo等等組件也需要盡量給足寬度,否則可能會看不到完整的信息。
16.???? 在程序中不要使用固定的控件位置和大小,因為這些都可能在運行時變化。(如Button.Top := 50等)
17.???? 設(shè)置了AutoResize的TImage的圖片不會自動放大或縮小,所以不可以采用利用設(shè)計期的圖片的大小來只顯示部分圖像的方法。
18.???? 如果窗體可以記憶上一次運行的大小、位置、WindowsState等,在Load的時候需要注意要確保窗體在屏幕上可見,以及不要調(diào)整不能調(diào)整大小的窗體的大小。
19.???? TFrame是為了在設(shè)計期復(fù)用窗體而引入的,如果要將運行期的窗體嵌入到別的窗體,則需要使用TForm。(DBStudio就不恰當(dāng)?shù)氖褂昧薚Frame)
20.???? 在多語程序中可能會涉及到字體的修改,這時也應(yīng)該考慮多DPI設(shè)定的情況。
21.???? 如果一個電腦在多DPI間切換,則注冊表保存的窗體大小和位置等信息也需要被小心處理。
轉(zhuǎn)載于:https://www.cnblogs.com/mumble/archive/2010/05/11/1732935.html
總結(jié)
以上是生活随笔為你收集整理的不同DPI下窗体的自适应的有关注意点(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。