Dependencies NSIS-节依赖项.onSelChange
我需要一些帮助或建议,如何强制SEC033和SEC085部分以这种方式协同工作:Dependencies NSIS-节依赖项.onSelChange,dependencies,nsis,Dependencies,Nsis,我需要一些帮助或建议,如何强制SEC033和SEC085部分以这种方式协同工作: 1.选择SEC033时,应选择SEC085;取消选择SEC033时,应取消选择SEC085,以 2.选择SEC085时,应选择SEC033;取消选择SEC085时,应取消选择SEC033以 我的nsis部门结构: SectionGroup "$(SEC03)" SEC03 Section "Product 1" SEC031 SectionIn 1 2 SectionEnd
1.选择SEC033时,应选择SEC085;取消选择SEC033时,应取消选择SEC085,以
2.选择SEC085时,应选择SEC033;取消选择SEC085时,应取消选择SEC033以 我的nsis部门结构:
SectionGroup "$(SEC03)" SEC03
Section "Product 1" SEC031
SectionIn 1 2
SectionEnd
Section "Product 3" SEC033
SectionIn 1 2
SectionEnd
Section "Product 6" SEC036
SectionIn 1 2
SectionEnd
SectionGroupEnd
SectionGroup "$(SEC08)" SEC08
Section "Product 2" SEC082
SectionIn 1 2
SectionEnd
Section "Product 5" SEC085
SectionIn 1 2
SectionEnd
Section "Product 8" SEC088
SectionIn 1 2
SectionEnd
SectionGroupEnd
我不知道怎么做,不幸的是我不熟悉所有这些SectionGetFlags
/SectionSetFlags
我试着用这个:
SectionGetFlags ${SEC033} $0
SectionSetFlags ${SEC085} $0
&因为SEC033工作得很好
但当我加上
SectionGetFlags ${SEC085} $0
SectionSetFlags ${SEC033} $0
SEC085根本不起作用,我知道这是完全相同的,但方式相反&可能这就是问题所在,但我不知道如何解决它……://好的,我已经创建了一个解决方案,也许有人也需要它:)
节标志不仅存储选中状态,还存储组、粗体和只读标志,因此不应使用
SectionSetFlags
将状态设置为0或1。Sections.nsh包含每个位的定义,还包含可用于操作节的辅助宏。如果要手动查看是否选中(选中)某个节,则必须使用位测试:
SectionGetFlags ${SEC033} $4
IntOp $4 $4 & ${SF_SELECTED}
LogicLib.nsh包含宏,可用于检查${If}语句中的节:
!include Sections.nsh
!include LogicLib.nsh
Function .onSelChange
${If} $6 == "1" ; Use $6 here like you did in your answer
StrCpy $6 0
${If} ${SectionIsSelected} ${SEC033}
${OrIf} ${SectionIsSelected} ${SEC085}
!insertmacro SelectSection ${SEC033}
!insertmacro SelectSection ${SEC085}
${EndIf}
${Else}
StrCpy $6 1
${IfNot} ${SectionIsSelected} ${SEC033}
${OrIfNot} ${SectionIsSelected} ${SEC085}
!insertmacro UnselectSection ${SEC033}
!insertmacro UnselectSection ${SEC085}
${EndIf}
${EndIf}
您的示例完全省略了使用SectionSetFlags的部分。此外,示例应该尽可能少,所以不需要发布那么多的部分。你不应该使用像这样的SectionSetFlags!是的,那看起来肯定要优雅得多,这正是我想要的,谢谢:)
!include Sections.nsh
!include LogicLib.nsh
Function .onSelChange
${If} $6 == "1" ; Use $6 here like you did in your answer
StrCpy $6 0
${If} ${SectionIsSelected} ${SEC033}
${OrIf} ${SectionIsSelected} ${SEC085}
!insertmacro SelectSection ${SEC033}
!insertmacro SelectSection ${SEC085}
${EndIf}
${Else}
StrCpy $6 1
${IfNot} ${SectionIsSelected} ${SEC033}
${OrIfNot} ${SectionIsSelected} ${SEC085}
!insertmacro UnselectSection ${SEC033}
!insertmacro UnselectSection ${SEC085}
${EndIf}
${EndIf}