NSIS對話框單位形成的控件移位問題

在使用NSIS腳本開發安裝卸載程序,使用自定義的nsdialog控件。發如今小部分系統上安裝時,一些控件會消失,或者挪位。因而排除問題,看看這些控件的爲位置和座標,發現基本上是使用了對話框單位的控件,纔會出現這種問題。html

 

 

 

看來在這些出問題的系統裏,1對話框單位對應更多的像素。下邊插講下NSIS的nsdialog庫裏的三種單位。測試

 

========================================================================================字體

nsDialogs.nsh 中的宏 ${NSD_Create*}。這些宏,每一個都帶有 5 個參數 - x, y, width, height 和 text. 每一個宏也都會返回一個值到堆棧,那就是新控件的 HWND。如同對話框的 HWND,它必須從堆棧中被彈出並保存下來。插件

宏使用的全部尺寸單位都可使用如下三種單位類型中的任一種:像素、對話框單位或對話框尺寸的百分比。你能夠指定負值,這表示距離是從右端或底部算起。要使用對話框單位,數值後面必須加上後綴符 u。要使用百分比單位,數值後面必須加上百分符 - %。此外,有無其它的後綴符均表示像素。翻譯

以下所示:htm

Var Textblog

${NSD_CreateText} 0 13u 100% -13u "Type something here..."開發

Pop $Text程序

===========================================================================================im

 

我猜想可能跟系統的分辨率或者字體有關係。可是在不一樣分辨率電腦上測試,發現分辨率對這個沒有影響。那就測試字體,發現系統字體以及字體大小的更改對這個影響也不大。

無論了,先把全部的對話框單位「u」,通過大概的換算,算成像素單位算了。而後去出現問題的電腦上測試,發現仍是字的大小不對,在是正常電腦上沒問題。若是按照出問題的電腦去算像素的話,那麼正常電腦上確定會對不上了。是個難題。

那就乾脆比較兩個電腦系統裏的顯示屬性。發現多是ClearType設置形成的影響。因而在正常的電腦上,更改ClearType,而後運行安裝包。問題重現了。這樣就好辦了。

 

 

若是ClearType不是系統默認的100%,那麼NSIS裏顯示字體就會有問題。會根據ClearType的百分率大小而變化。定位到了問題就能夠找到解決辦法了。

方案:y軸用像素單位,保證控件能顯示出來,窗體底部的控件在ClearType大於100%時,不會跑到窗體下邊去。x軸和控件大小採用對話框單位,保證字體能一行顯示。

${NSD_Createcheckbox} 98u 360 80u 16u  "開始菜單快捷方式" 

${NSD_CreateText} 20u 360 100% -13u "Type something here..."

===================================================================

附:NSIS nsDialog插件(中文簡體翻譯)http://www.xuebuyuan.com/865271.html

相關文章
相關標籤/搜索