实际上,我正在尝试更改以下页面的MUI2组件的组件大小:
!insertmacro MUI_PAGE_LICENSE
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
我确实也使用nsResize插件添加了Customfunction来更改每个窗口的大小。现在,我遇到了一个问题,即组件在宽度和高度上都放错了地方,而且很小。
我进行了搜索,确实找到了一些有关我的问题的想法。但是出于某些个人原因,我不想使用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的调用?
答案 0 :(得分:0)
组件页面的简单解决方案是使用!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 '*$0(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 $3, i $4, i ${SWP_NOZORDER}|${SWP_NOACTIVATE})' ; Resize the components list
FunctionEnd