在 Nsis 中,我正在使用:
...
nsDialogs::Create 1018
Pop $0
nsDialogs::Show
...
但是对话框的大小不符合我的需要。如何为此对话框指定 x 和 y 的长度?
在 Nsis 中,我正在使用:
...
nsDialogs::Create 1018
Pop $0
nsDialogs::Show
...
但是对话框的大小不符合我的需要。如何为此对话框指定 x 和 y 的长度?
如果您想调整所有内容的大小,使用 Resource Hacker 可能会更好,ChangeUI
但您可以在运行时执行此操作:
!include nsDialogs.nsh
Function mypage
System::Call 'user32::SetWindowPos(i$hwndparent,i,i,i,i 640,i 480,i 0x16)' ; Resize outer dialog
nsDialogs::Create 1018
Pop $0
System::Call 'user32::MoveWindow(i$0,i0,i0,i 600,i 200,i0)' ; Resize inner (nsDialogs) page
${NSD_CreateLabel} 0 10u 100% 10u "Hello, welcome to nsDialogs!"
Pop $0
SetCtlColors $0 0xffffff 0xff2255
nsDialogs::Show
FunctionEnd
page custom mypage
我的对话框对于我放入的所有控件都不够高。
我尝试了你的两个 Windows API,当它们工作时,安装的客户区域重叠并覆盖了 OK/Cancel 按钮。
我最终制定了“使用资源黑客和 ChangeUI”。这比我想象的要难得多。所以,这里有一个更详细的方法。我对 nsDialogs NOT ModernUI 根深蒂固。因此,这是 nsDialogs 调整与示例中相同的窗口大小的方法。上面介绍了 ModernUI。
nsDialogs::创建 1018
您拥有的是代码和预览。注意第一行代码...
105 DIALOGEX 0, 0, 280, 162
在您的 NSIS 脚本中,您需要尽早添加对 ChangeAll 的调用。
ChangeUI all tall_UI.exe
Page custom nsDialogsPage
Function nsDialogsPage
nsDialogs::Create 1018
Pop $Dialog
...
那是为我做的。你会做一些试验和错误,总是点击编译并保存在 ResourceHacker 中,然后重建你的 NSI。您可能会注意到您的对话框比 ResourceHacker 中显示的预览更大或更小。那是因为 NSIS 确实会根据字体大小、DPI ……诸如此类的东西来缩放您的对话框。尝试并重试,直到它看起来不错。
您会注意到 nsDialogs::Create 1018 与资源黑客第 5 行中的数字匹配:
CONTROL "", 1018, STATIC, SS_BLACKRECT | WS_CHILD | WS_GROUP, 7, 7, 266, 160
我把这个演示放在一起后做了一些测试,那个 1018 资源的位置和大小确实有影响,但我不能告诉你为什么它不是黑色的。
我的演示的完整代码如下所示。
#Created with NSIS version 2.46 downloaded from SourceForge.net
#Based on "Adding Controls" section of user docs
# http://nsis.sourceforge.net/Docs/nsDialogs/Readme.html#step-add
!include nsDialogs.nsh
Name "Launchpad"
OutFile "Master Installer.exe"
BrandingText " "
Caption "Launchpad"
RequestExecutionLevel admin
SetFont "Arial" 10
VIProductVersion "2.5.0.0"
Var Dialog
Var Button
ChangeUI all tall_UI.exe
Page custom nsDialogsPage
Function nsDialogsPage
nsDialogs::Create 1018
Pop $Dialog
# It will create a new dialog in the page and return its HWND on the stack. The result must be popped from the stack to prevent stack corruption. If the result is error, the dialog couldn't be created.
${If} $Dialog == error
Abort
${EndIf}
# ${NSD_Create*} x y width height text
## Going to use $0 for y of each new control.
StrCpy $0 "29"
${NSD_CreateButton} 50% "$1u" 25% 12u "Product Manual"
Pop $Button
${NSD_OnClick} $Button Manual_Install_Clicked
IntOp $0 $0 + 18
IntOp $1 $0 - 2
${NSD_CreateButton} 50% "$1u" 25% 12u "Product 1 Installer"
Pop $Button
${NSD_OnClick} $Button Product1_Install_Clicked
IntOp $0 $0 + 18
IntOp $1 $0 - 2
${NSD_CreateButton} 50% "$1u" 25% 12u "Product 2 Installer"
Pop $Button
## ${NSD_OnClick} ...
IntOp $0 $0 + 18
IntOp $1 $0 - 2
${NSD_CreateButton} 50% "$1u" 25% 12u "Product 3 Installer"
Pop $Button
## ${NSD_OnClick} ...
IntOp $0 $0 + 18
IntOp $1 $0 - 2
${NSD_CreateButton} 50% "$1u" 25% 12u "Product 4 Installer"
Pop $Button
## ${NSD_OnClick} ...
IntOp $0 $0 + 18
IntOp $1 $0 - 2
${NSD_CreateButton} 50% "$1u" 25% 12u "Product 1 Installer"
Pop $Button
## ${NSD_OnClick} ...
IntOp $0 $0 + 18
IntOp $1 $0 - 2
${NSD_CreateButton} 50% "$1u" 25% 12u "Product 1 Installer"
Pop $Button
## ${NSD_OnClick} ...
IntOp $0 $0 + 18
IntOp $1 $0 - 2
nsDialogs::Show
FunctionEnd
Function ExecInstall
pop $0
ExecWait $0 $1
IfErrors 0 ExecDone
MessageBox MB_OK|MB_IconExclamation "$1 $0 not found"
ExecDone:
##Call Update_Install_Statuses
FunctionEnd
Function Manual_Install_Clicked
ExecShell "open" "$EXEDIR\Manual\Manual.PDF"
FunctionEnd
Function Product1_Install_Clicked
Exec "Explorer.exe $EXEDIR\Support Files"
FunctionEnd
Function Product2_Install_Clicked
Push "$EXEDIR\Product2 Folder\Product2 Installer.exe"
Call ExecInstall
FunctionEnd
Section
SectionEnd