在使用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