我正在使用NSIS安装程序脚本语言编写安装脚本。我有一些自定义页面,我能够轻松加载,但我想知道是否可以动态插入页面。我想要做的是有一个页面上有其他配置选项,在底部有一个复选框,上面写着“添加更多设置”或类似的东西。如果选中该复选框,则会显示另一个自定义页面,该页面是第一个的精确副本。只要用户继续选中复选框,就应显示更多页面。是否有一些方法可以一遍又一遍地回收同一页面?我真的不认为我需要生成一个全新的页面,因为它一次又一次只是同一个页面,但我不确定如何在运行时显示同一页面的新实例。快速的Google和stackoverflow搜索无法保证任何结果。
谢谢你们。
答案 0 :(得分:1)
页数在编译时固定。
如果您需要不同的“隐藏”页面或仅需要同一页面的几个实例,我会说您应该通过调用abort在页面的create callback中根据需要跳过页面,但是这不会起作用页数是无限的。
也可以直接转到页面:
Outfile test.exe
Requestexecutionlevel user
!include nsDialogs.nsh
Page Custom mypagecreate mypageleave
Page Directory dirpagecreate
Page Instfiles
Function mypagecreate
Var /Global MyCheckBox
nsDialogs::Create /NOUNLOAD 1018
Pop $0
${NSD_CreateCheckBox} 10% 20u 80% 12u "Again?"
Pop $MyCheckBox
nsDialogs::Show
FunctionEnd
Function mypageleave
${NSD_GetState} $MyCheckBox $0
StrCpy $MyCheckBox $0 ; This is a bit of a hack, we reuse the HWND var to store the state
FunctionEnd
Function dirpagecreate
${If} $MyCheckBox <> 0 ; Was the checkbox checked?
SendMessage $HWNDPARENT 0x408 -1 "" ; If so, go back
${EndIf}
FunctionEnd
Section
SectionEnd
答案 1 :(得分:0)
page custom page1 option
page instfiles
Function page1
initpluginsdir
file /oname=$PLUGINSDIR\dlg.ini dlg.ini
installoptions::dialog "$PLUGINSDIR\dlg.ini"
FunctionEnd
Function Options
ReadINIStr $0 "$PLUGINSDIR\dlg.ini" "Field 1" "State" # Field Must have value 0 or 1. Maybe Text or Chechbox
StrCmp $0 0 0 +2
abort
FunctionEnd