使用nsis安装程序,添加自定义radiobuttons,根据所选的radiobutton调用部分

时间:2011-04-28 08:00:48

标签: installer custom-controls nsis mui

enter image description here

我希望如果没有选择任何RadioButtons,那么,当按下Next按钮时,它应该发出警告,请选择ATLEAST ONE ITEM,它不应该转到下一个Dialog。

另外,我希望如果用户选择选项:UPDATE EXISTING SOFTWARE,则只复制一些文件,如果选择了另一个radiobutton,则复制所有文件,

是否可以使用部分或功能?我可以调用一个Section,就像选择RadioButton 1一样,然后调用SECTION CREATEALLFILES,否则调用SECTION CREATEONLYTWOFILES?

根据我的说法,我想我想要代码如何保持这两个RadioButton的ID并相应地使用它们来调用不同的部分或功能。代码是什么?请帮帮忙?

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

1 个答案:

答案 0 :(得分:2)

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

!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(此代码需要在该页面的show function callback(MUI_PAGE_CUSTOMFUNCTION_SHOW)中)