脚本:选择不同组件

优质
小牛编辑
114浏览
2023-12-01

引用脚本内容:

!define CUST_INI "$PLUGINSDIR\custom.ini"
!include Logiclib.nsh
!include Sections.nsh

!define SEC1_TEXT "Section One"   ;组件1
!define SEC2_TEXT "Section Two"   ;组件2
!define SEC3_TEXT "Section Three" ;组件3
outfile "test.exe"
showinstdetails show
Installdir "$PROGRAMFILES\My App"

page custom CreateCustom ;显示自定义页面
page components func_pre ;自定义参数
page directory
page instfiles

section "${SEC1_TEXT}" sec1 ;组件1
detailprint "section 1 selected"
sectionend

section "${SEC2_TEXT}" sec2 ;组件2
detailprint "section 2 selected"
sectionend

section "${SEC3_TEXT}" sec3 ;组件3
detailprint "section 3 selected"
sectionend

Function .onInit
    InitPluginsDir

      WriteINIStr "${CUST_INI}" "Settings" "NumFields" "3"

      WriteINIStr "${CUST_INI}" "field 1" "type" "radiobutton"
      WriteINIStr "${CUST_INI}" "field 1" "left" "30"
      WriteINIStr "${CUST_INI}" "field 1" "right" "-30"
      WriteINIStr "${CUST_INI}" "field 1" "top" "40"
      WriteINIStr "${CUST_INI}" "field 1" "bottom" "52"
      WriteINIStr "${CUST_INI}" "field 1" "Text" "Unselect and hide section 1"
      WriteINIStr "${CUST_INI}" "field 1" "state" "1"    ;组件1 state=1
      WriteINIStr "${CUST_INI}" "field 1" "flags" "GROUP"
;http://blog.163.com/53_54/
      WriteINIStr "${CUST_INI}" "field 2" "type" "radiobutton"
      WriteINIStr "${CUST_INI}" "field 2" "left" "30"
      WriteINIStr "${CUST_INI}" "field 2" "right" "-30"
      WriteINIStr "${CUST_INI}" "field 2" "top" "60"
      WriteINIStr "${CUST_INI}" "field 2" "bottom" "72"
      WriteINIStr "${CUST_INI}" "field 2" "Text" "Unselect and hide section 2"
      WriteINIStr "${CUST_INI}" "field 2" "state" "0"   ;组件2 state=0

      WriteINIStr "${CUST_INI}" "field 3" "type" "radiobutton"
      WriteINIStr "${CUST_INI}" "field 3" "left" "30"
      WriteINIStr "${CUST_INI}" "field 3" "right" "-30"
      WriteINIStr "${CUST_INI}" "field 3" "top" "80"
      WriteINIStr "${CUST_INI}" "field 3" "bottom" "92"
      WriteINIStr "${CUST_INI}" "field 3" "Text" "Unselect and hide section 3"
      WriteINIStr "${CUST_INI}" "field 3" "state" "0" ;组件3 state=0
FunctionEnd

Function CreateCustom ;显示自定义页面
        InstallOptions::Dialog "${CUST_INI}"
   pop $0
FunctionEnd

Function func_pre ;自定义页面参数
       ReadINIStr $0 "${CUST_INI}" "field 1" "state"    ;当组件1 state=1时候
       ${If} $0 = 1
            !insertmacro UnselectSection ${sec1} ;不显示组件1   UN
            SectionSetText ${sec1} ""
            !insertmacro SelectSection ${sec2}   ;显示组件2
            SectionSetText ${sec2} "${SEC2_TEXT}"
            !insertmacro SelectSection ${sec3}    ;显示组件3
            SectionSetText ${sec3} "${SEC3_TEXT}"
       ${ElseIf} $0 = 0
        ReadINIStr $1 "${CUST_INI}" "field 2" "state"
        ${AndIf} $1 = 1
            !insertmacro UnselectSection ${sec2}
            SectionSetText ${sec2} ""
            !insertmacro SelectSection ${sec1}
            SectionSetText ${sec1} "${SEC1_TEXT}"
            !insertmacro SelectSection ${sec3}
            SectionSetText ${sec3} "${SEC3_TEXT}"
       ${Else}
            !insertmacro UnselectSection ${sec3}
            SectionSetText ${sec3} ""
            !insertmacro SelectSection ${sec2}
            SectionSetText ${sec2} "${SEC2_TEXT}"
            !insertmacro SelectSection ${sec1}
            SectionSetText ${sec1} "${SEC1_TEXT}"
       ${EndIf}
FunctionEnd
;下端被注释部分无再次返回选择,上端拥有返回
/*
Function func_pre
       GetDlgItem $R0 $HWNDPARENT 3
       EnableWindow $R0 0

       ReadINIStr $0 "${CUST_INI}" "field 1" "state"
       ${If} $0 = 1
            !insertmacro UnselectSection ${sec1}
            SectionSetText ${sec1} ""
       ${ElseIf} $0 = 0
        ReadINIStr $1 "${CUST_INI}" "field 2" "state"
        ${AndIf} $1 = 1
            !insertmacro UnselectSection ${sec2}
            SectionSetText ${sec2} ""
       ${Else}
            !insertmacro UnselectSection ${sec3}
            SectionSetText ${sec3} ""
       ${EndIf}
FunctionEnd