调整 MUI2 的组件大小
Adjust component size for MUI2
实际上,我正在尝试更改以下页面的 MUI2 组件的组件大小:
!insertmacro MUI_PAGE_LICENSE
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
我还添加了自定义函数来更改每个 window 的大小,使用 nsResize 插件。现在我遇到的问题是组件放错了位置,而且宽度和高度都太小了。
我进行了搜索,确实为我的问题找到了一些想法。但出于几个个人原因,我不想使用 resourcehacker 来创建 UI 新的。我看到我可以使用系统插件来进行调整,但是信息源让我不知所措。
然后我尝试自己执行它但失败了。
我的实际解决方案是:
Function .myGuiInt
System::Call "user32::GetClientRect(i #32770 , i r1)"
System::Call "user32::SetWindowPos(i 1000, i, i, i 15000, i, i)"
....
FunctionEnd
我试图更改设置许可证的文本框的大小。
但是我没有任何效果,我怎样才能调用我可以影响 UI?
组件页面的简单解决方案是!define
MUI_COMPONENTSPAGE_SMALLDESC
或MUI_COMPONENTSPAGE_NODESC
,这将使组件列表更大。
如果这还不够大,那么绝对最好的解决方案是创建您自己的 UI。您将不得不使用 Resource Hacker 或其他一些 .EXE 编辑器来执行此操作,但这是一次性操作,您不必重新分发编辑器,如果其他人只需要生成的 UI 文件和您的 .NSI还需要编译你的安装程序。获取 ...NSIS\Contrib\UIs\modern.exe
并根据您的需要对其进行编辑,然后使用 MUI_UI
(或 ChangeUI
用于经典安装程序)应用它。
这样做的好处是您将使用 dialog units 而不是像素,并且也不需要编程技能。
最后的选择是在 运行 时间进行。这意味着您大部分时间都将以像素为单位工作,因此您不应该真正硬编码任何尺寸。要使用系统插件,您必须熟悉 Win32 编程。了解 C/C++ 或其他一些低级编程语言也有帮助。
!include MUI2.nsh
!insertmacro MUI_PAGE_WELCOME
!define MUI_COMPONENTSPAGE_NODESC
!define MUI_PAGE_CUSTOMFUNCTION_SHOW fullsize_tweak_components_page
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
!define /ifndef SWP_NOZORDER 4
!define /ifndef SWP_NOACTIVATE 0x10
Function fullsize_tweak_components_page
System::Call 'USER32::GetClientRect(p $mui.ComponentsPage, @ r0)' ; Get the size of the inner dialog
System::Call '*[=10=](i,i,i.r3,i.r4)' ; Extract the right and bottom members from RECT
System::Call 'USER32::SetWindowPos(p $mui.ComponentsPage.Components, p 0, i 0, i 0, i , i , i ${SWP_NOZORDER}|${SWP_NOACTIVATE})' ; Resize the components list
FunctionEnd
实际上,我正在尝试更改以下页面的 MUI2 组件的组件大小:
!insertmacro MUI_PAGE_LICENSE
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
我还添加了自定义函数来更改每个 window 的大小,使用 nsResize 插件。现在我遇到的问题是组件放错了位置,而且宽度和高度都太小了。
我进行了搜索,确实为我的问题找到了一些想法。但出于几个个人原因,我不想使用 resourcehacker 来创建 UI 新的。我看到我可以使用系统插件来进行调整,但是信息源让我不知所措。
然后我尝试自己执行它但失败了。 我的实际解决方案是:
Function .myGuiInt
System::Call "user32::GetClientRect(i #32770 , i r1)"
System::Call "user32::SetWindowPos(i 1000, i, i, i 15000, i, i)"
....
FunctionEnd
我试图更改设置许可证的文本框的大小。 但是我没有任何效果,我怎样才能调用我可以影响 UI?
组件页面的简单解决方案是!define
MUI_COMPONENTSPAGE_SMALLDESC
或MUI_COMPONENTSPAGE_NODESC
,这将使组件列表更大。
如果这还不够大,那么绝对最好的解决方案是创建您自己的 UI。您将不得不使用 Resource Hacker 或其他一些 .EXE 编辑器来执行此操作,但这是一次性操作,您不必重新分发编辑器,如果其他人只需要生成的 UI 文件和您的 .NSI还需要编译你的安装程序。获取 ...NSIS\Contrib\UIs\modern.exe
并根据您的需要对其进行编辑,然后使用 MUI_UI
(或 ChangeUI
用于经典安装程序)应用它。
这样做的好处是您将使用 dialog units 而不是像素,并且也不需要编程技能。
最后的选择是在 运行 时间进行。这意味着您大部分时间都将以像素为单位工作,因此您不应该真正硬编码任何尺寸。要使用系统插件,您必须熟悉 Win32 编程。了解 C/C++ 或其他一些低级编程语言也有帮助。
!include MUI2.nsh
!insertmacro MUI_PAGE_WELCOME
!define MUI_COMPONENTSPAGE_NODESC
!define MUI_PAGE_CUSTOMFUNCTION_SHOW fullsize_tweak_components_page
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
!define /ifndef SWP_NOZORDER 4
!define /ifndef SWP_NOACTIVATE 0x10
Function fullsize_tweak_components_page
System::Call 'USER32::GetClientRect(p $mui.ComponentsPage, @ r0)' ; Get the size of the inner dialog
System::Call '*[=10=](i,i,i.r3,i.r4)' ; Extract the right and bottom members from RECT
System::Call 'USER32::SetWindowPos(p $mui.ComponentsPage.Components, p 0, i 0, i 0, i , i , i ${SWP_NOZORDER}|${SWP_NOACTIVATE})' ; Resize the components list
FunctionEnd