自定义页面大小

时间:2011-04-03 15:00:59

标签: nsis

我正在尝试创建一个显示我的网站(nsWeb::ShowWebInPage)的页面。 问题是,它无法显示整个页面。

如何为此页面定义新尺寸(高x宽)?

3 个答案:

答案 0 :(得分:8)

这是一项艰巨的任务。以下是以一种灵活的方式使其工作的步骤。

下载资源黑客:http://www.angusj.com/resourcehacker/

然后决定是否要编辑NSIS的Unicode或ANSI版本。你可以做到这两点,但为什么要这么麻烦。首先找到您的Program Files \ NSIS文件夹。如果要编译ANSI,这将是下一步中以下目录的BASE文件夹。如果您正在编译unicode,请进入Program Files \ NSIS \ Unicode文件夹,现在这是您的基本文件夹,用于后续步骤。

查看\ Contrib \ UIs文件夹。该文件夹存储了一堆可执行文件。根据您使用的MUI2的配置,您需要编辑相应的文件AND modern.exe。文件的版本取决于你是否有标题图片,是否正确调整,等等。

例如,就我而言,我在安装程序脚本中有这些定义

!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_RIGHT

现在,当我查看\ Contrib \ Modern UI 2 \ Interface.nsh时,我可以很容易地找出需要编辑的文件。以下是我的观点:

!insertmacro MUI_DEFAULT MUI_UI "${NSISDIR}\Contrib\UIs\modern.exe"
!insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE "${NSISDIR}\Contrib\UIs\modern_headerbmp.exe"
!insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE_RIGHT "${NSISDIR}\Contrib\UIs\modern_headerbmpr.exe"
!insertmacro MUI_DEFAULT MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!insertmacro MUI_DEFAULT MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
!insertmacro MUI_DEFAULT MUI_BGCOLOR "FFFFFF"

由于我使用的是MUI_HEADERIMAGE_RIGHT,因此我将编辑modern_headerbmpr.exe文件。

现在,打开Resource Hacker并加载要编辑的文件。资源黑客有一个GUI,因此当您逐步浏览对话框中的每个对话框和每个控件时,您可以在按下“重新编译”后看到GUI更改方面。这部分非常简单。单步执行所有对话框(为什么不),编辑控件和大小,包括主安装程序的大小。在这个文件中,只有一个,所以你还需要打开modern.exe,它包含进入安装程序页面的子控件。再次,逐步执行所有对话框并更改所有大小,以便每个控件看起来都很好。编译,并将文件保存回此文件夹。

奖励积分:要进行测试,只需覆盖原始文件即可。你做了备份,对吧?对于部署,请为您编辑的每个文件命名新文件,例如" modern-wide.exe"。之后,我们可以通过一点魔力动态切换它们。

重新编译您的安装程序,现在您应该看到一个新的大小安装程序。

如果您没有,请检查您实际上是否在ANSI和UNICODE文件夹中,或者您的更改无法正常工作。

但是,某些屏幕会动态添加控件。例如,请查看\ Contrib \ Modern UI 2 \ Pages \ Welcome.nsh。

此文件在代码中添加标题标签和欢迎文本,而不是通过exe文件。唉,我知道!找到宏:

!macro MUI_FUNCTION_WELCOMEPAGE PRE LEAVE

这些代码行:

${NSD_CreateBitmap} 0u 0u 109u 193u ""
...
${NSD_CreateLabel} 120u 10u 195u ${MUI_WELCOMEPAGE_TITLE_HEIGHT}u "${MUI_WELCOMEPAGE_TITLE}"
...
${NSD_CreateLabel} 120u ${MUI_WELCOMEPAGE_TEXT_TOP}u 195u 130u "${MUI_WELCOMEPAGE_TEXT}"

如您所见,这里的单位是X Y WIDTH HEIGHT,所以现在您可以修改这些控件。当然,如果您不使用欢迎页面,请不要打扰。但您可能需要以这种方式编辑不适合您的页面。

您可以覆盖原件,或者再次使用" -wide"保存文件。附加到文件名。

现在,你基本完成了!

现在,为了让这个更容易切换,我会假设你保存了:

welcome.nsh as welcome-wide.nsh
modern.exe as modern-wide.exe 
and let's say modern_headerbmpr.exe as modern_headerbmpr-wide.exe

现在,在你的安装程序中,添加这个!定义BEFORE包括MUI2.nsh:

!define MUI_ALTERNATE_SIZE_EXT "-wide" 
在interface.nsh中

,将代码更改为:

!ifdef MUI_ALTERNATE_SIZE_EXT
    !insertmacro MUI_DEFAULT MUI_UI "${NSISDIR}\Contrib\UIs\modern${MUI_ALTERNATE_SIZE_EXT}.exe"
    !insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE "${NSISDIR}\Contrib\UIs\modern_headerbmp.exe"
    !insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE_RIGHT "${NSISDIR}\Contrib\UIs\modern_headerbmpr${MUI_ALTERNATE_SIZE_EXT}.exe"
    !insertmacro MUI_DEFAULT MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
    !insertmacro MUI_DEFAULT MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
    !insertmacro MUI_DEFAULT MUI_BGCOLOR "FFFFFF"
!else
    !insertmacro MUI_DEFAULT MUI_UI "${NSISDIR}\Contrib\UIs\modern.exe"
    !insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE "${NSISDIR}\Contrib\UIs\modern_headerbmp.exe"
    !insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE_RIGHT "${NSISDIR}\Contrib\UIs\modern_headerbmpr.exe"
    !insertmacro MUI_DEFAULT MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
    !insertmacro MUI_DEFAULT MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
    !insertmacro MUI_DEFAULT MUI_BGCOLOR "FFFFFF"
!endif

这实质上将您的安装程序从常规切换到" -wide"当您将MUI_ALTERNATE_SIZE_EXT定义为" -wide"时。注意:我如何加入$ {} MUI_ALTERNATE_SIZE_EXT直接将文件名包括我更改的文件,当然你应该为你做这个最终改变的文件,当您开始。

现在,您还需要在MUI2.NSH文件中执行此操作,如下所示:

!ifdef MUI_ALTERNATE_SIZE_EXT
    !include "Pages\Components.nsh"
    !include "Pages\Directory.nsh"
    !include "Pages\Finish.nsh"
    !include "Pages\InstallFiles.nsh"
    !include "Pages\License.nsh"
    !include "Pages\StartMenu.nsh"
    !include "Pages\UninstallConfirm.nsh"
    !include "Pages\Welcome${MUI_ALTERNATE_SIZE_EXT}.nsh"
!else
    !include "Pages\Components.nsh"
    !include "Pages\Directory.nsh"
    !include "Pages\Finish.nsh"
    !include "Pages\InstallFiles.nsh"
    !include "Pages\License.nsh"
    !include "Pages\StartMenu.nsh"
    !include "Pages\UninstallConfirm.nsh"
    !include "Pages\Welcome.nsh"
!endif

在编辑更多文件时,只需在单独的文件名中保留您创建的每个新UI的版本,现在只需使用一个定义即可切换安装程序的UI样式。您可以根据需要命名文件,并将此方案扩展到可能遇到麻烦的其他区域。

这不是一件容易的事,但可以做到。

答案 1 :(得分:3)

您有两种选择:

  • 使用ChangeUI指令以及Resource Hacker创建的自定义/调整大小的UI(NSIS附带了contrib文件夹中的默认和现代ui,您只需修改它们)
  • 在运行时使用系统插件(调用user :: SetWindowPos)在页面的show callback中调整对话框的大小

答案 2 :(得分:1)

您必须使用Resource Hacker调整所有对话框的大小。 标准对话框(内部)大小为300 * 140单位,可根据需要增加。

不要忘记在这个新尺寸上增加所有对话框(许可证页面,安装页面,目录页面等)。