【问题标题】:nsis custom page sizesnsis 自定义页面大小
【发布时间】:2011-04-03 15:00:58
【问题描述】:

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

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

【问题讨论】:

  • 有一个默认页面大小,如果想更改为我的比例

标签: nsis


【解决方案1】:

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

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

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

查看 \Contrib\UIs 文件夹。这个文件夹存储了一堆可执行文件。根据您使用的 MUI2 的配置,您需要编辑相应的文件和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 并加载您要编辑的文件。 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

现在,在您的安装程序中,添加此 !define 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

当您将 MUI_ALTERNATE_SIZE_EXT 定义为“-wide”时,这实质上会将您的安装程序从常规切换到“-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 样式。您可以根据需要命名文件,并将此方案扩展到可能遇到问题的其他区域。

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

【讨论】:

  • 这是一个很棒的答案。 @ilya,它也应该被授予正确答案。我按照说明进行操作,它确实有效。完成此操作后,我觉得我对 NSIS 安装系统也有了更多的控制权。谢谢安迪。
【解决方案2】:

你有两个选择:

  • 将 ChangeUI 指令与由 Resource Hacker 创建的自定义/调整大小的 UI 一起使用(NSIS 在 contrib 文件夹中提供了默认和现代 ui,您可以只修改它们)
  • 在运行时使用页面显示回调中的系统插件(调用 user::SetWindowPos)调整对话框的大小

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      相关资源
      最近更新 更多