NSIS 选择不同组件

!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
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容