【问题标题】:using nsis installer, adding custom radiobuttons, calling sections according to radiobutton chosen使用 nsis 安装程序,添加自定义单选按钮,根据选择的单选按钮调用部分
【发布时间】:2011-04-28 08:00:47
【问题描述】:

我希望如果没有选择任何 RadioButtons,那么当按下 Next 按钮时,它应该会发出警报,请选择至少一个项目,并且它不应该进入下一个对话框。

另外,我希望如果用户选择选项:更新现有软件,则只复制一些文件,如果选择了另一个单选按钮,则复制所有文件,

这是否可能使用必须使用的部分或函数?我可以调用一个部分,例如如果选择 RadioButton 1,则调用 SECTION CREATEALLFILES,否则调用 SECTION CREATEONLYTWOFILES?

据我说,我想我希望代码如何保存这两个 RadioButtons 的 id 并相应地使用它们,以调用不同的部分或函数。代码是什么?请帮忙?

此外,在此页面上按 NEXT 后,下一个对话框将如下图所示:我想显示一个 LABEL,无论是 DEMO 完成还是 UPDATE 正在运行,为此我将使用 Resource Hacker 添加一个标签,但是如何根据 RadioButton 的用户选择显示该标签并隐藏它

【问题讨论】:

    标签: installation custom-controls nsis nsis-mui


    【解决方案1】:

    您可以选择/取消选择部分,或者只是将逻辑放在一个部分中,此示例同时执行以下操作:

    !include nsDialogs.nsh
    !include Sections.nsh
    
    var InstallType
    
    Section 
    #Install common files...
    ${If} $InstallType == DEMO
        #Do demo specific stuff
    ${Else}
        #Do update specific stuff
    ${EndIf}
    SectionEnd
    
    Section "" SEC_DEMO
    #Install demo..
    SectionEnd
    
    Section "" SEC_UPDATE
    #Do update..
    SectionEnd
    
    Page custom InstTypePageCreate InstTypePageLeave
    
    Function InstTypePageCreate
    nsDialogs::Create 1018
    pop $0
    ${NSD_CreateRadioButton} 0 50u 100% 10u "Demo"
    pop $1
    ${IfThen} $InstallType == DEMO ${|} ${NSD_Check} $1 ${|}
    ${NSD_CreateRadioButton} 0 70u 100% 10u "Update"
    pop $2
    ${IfThen} $InstallType == UPDATE ${|} ${NSD_Check} $2 ${|}
    nsDialogs::Show
    FunctionEnd
    
    Function InstTypePageLeave
    ${NSD_GetState} $1 $0
    ${If} $0 = ${BST_CHECKED}
        StrCpy $InstallType DEMO
        !insertmacro UnselectSection ${SEC_UPDATE}
        !insertmacro SelectSection ${SEC_DEMO}
    ${Else}
        ${NSD_GetState} $2 $0
        ${If} $0 = ${BST_CHECKED}
            StrCpy $InstallType UPDATE
            !insertmacro UnselectSection ${SEC_DEMO}
            !insertmacro SelectSection ${SEC_UPDATE}
        ${Else}
            MessageBox MB_ICONSTOP "You must select something!"
            Abort
        ${EndIf}
    ${EndIf}
    FunctionEnd
    

    要设置下一页的文本,只需在测试 $InstallType 的 if 块中使用 ${NSD_SetText} $hwndYourLabel "Text" 和 ShowWindow(此代码需要在该页面的显示函数回调 (MUI_PAGE_CUSTOMFUNCTION_SHOW) 中)

    【讨论】:

    • @sqlchild: "${IfThen} $InstallType == DEMO ${|} ${NSD_Check} $1 ${|}" 只是为了记住之前的状态如果你按下返回按钮去返回带有单选按钮的页面
    • @sqlchild:您可以在未命名部分或两个特定部分中使用 if/else 块,它们执行相同的工作,只是不同...
    • @sqlchild:每个部分都有一个索引(编号从 0 IIRC 开始),您在使用 Section* 指令和 section.nsh 宏时需要它,SEC_DEMO 就是我使用的名称。如果您不确定这一切是如何工作的,我建议您为所有部分命名,并在您的收音机选择页面之后添加一个组件页面,然后试一试以了解它是如何工作的......
    • @sqlchild:选择其中一个并删除另一个。就像我说的,添加一些消息框,然后尝试一下。
    • 使用 ${SEC_DEMO} 的代码必须在 .nsi 中的 Section 之后
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2017-06-30
    • 2018-06-03
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多