2011-09-22 67 views
2

我正在使用NSIS安装程序脚本语言编写安装脚本。我有几个自定义页面,我可以轻松加载,但我想知道是否可以动态插入页面。我想要做的是有一个页面上有其他配置选项,底部有一个复选框,指出“添加更多设置”或类似的东西。如果复选框被勾选,它将显示另一个自定义页面,它是第一个的精确副本。只要用户不断检查复选框,应该显示更多页面。是否有一些方法一遍又一遍地重复使用同一页?我真的不认为我需要生成一个全新的页面,因为它只是一次又一次,但我不知道如何在运行时显示同一页面的新实例。快速的谷歌和stackoverflow搜索不保证任何结果。动态添加自定义页面(运行时)

谢谢你们。

回答

1

页数在编译时是固定的。

如果您需要不同的“隐藏”页面或仅仅是同一页面的几个实例,我会说你应该跳过页面的时候通过调用abort来创建页面的回调,但这不起作用如果页数是无限的。

也可以直接转到页:

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 
+0

这看起来真的对我好。我没有考虑将窗口句柄存储在以后重用。我会对此进行测试并对其进行编辑,以便让您知道它是否按预期工作,但从这一点看,这对我来说看起来不错。 –

+0

这对我来说效果很好。我能够让所有的东西都按我的意愿工作。非常感谢你。 –

相关问题