【问题标题】:Adding a custom page dynamically (at runtime)动态添加自定义页面(在运行时)
【发布时间】:2011-09-22 22:25:34
【问题描述】:

我正在使用 NSIS 安装程序脚本语言编写安装脚本。我有一些自定义页面可以轻松加载,但我想知道是否可以动态插入页面。我想要做的是有一个页面,上面有额外的配置选项,底部有一个复选框,上面写着“添加更多设置”或类似的东西。如果选中该复选框,它将显示另一个自定义页面,该页面与第一个页面完全相同。只要用户继续选中复选框,就应该显示更多页面。是否有一些方法可以一遍又一遍地回收同一个页面?我真的不认为我应该生成一个全新的页面,因为它只是一次又一次的同一页面,但我不确定如何在运行时显示同一页面的新实例。快速的 Google 和 stackoverflow 搜索并不能保证任何结果。

谢谢大家。

【问题讨论】:

    标签: installation nsis


    【解决方案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
    

    【讨论】:

    • 这对我来说真的很好。我没有考虑存储窗口句柄以供以后重用。我将对此进行测试并对其进行编辑,以让您知道它是否按预期工作,但从这一点来看,它对我来说看起来不错。
    • 这对我来说效果很好。我能够让一切按我的意愿工作。非常感谢。
    【解决方案2】:
    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
    

    【讨论】:

    • "简洁是可以接受的,但更全面的解释更好。" How do I write a good answer?。 Stack Overflow 重视完整和完整的答案。您可以编辑您的答案 here 或单击答案左下角的“编辑”按钮。谢谢。
    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 2014-10-03
    • 1970-01-01
    相关资源
    最近更新 更多