2015-10-07 60 views
0

我需要一些幫助或建議如何強制SEC033 & SEC085節的以這種方式一起工作:
1.選擇SEC033時,SEC085應選擇&當SEC033未被選中,SEC085被選擇時SEC085應未選擇到
2,SEC033應選擇&當SEC085是未選擇的,SEC033應未選擇到NSIS - 部分依賴.onSelChange

我的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的偉大工程

但當我添加

​​

SEC085不會工作,我明白,這正是s AME但在相反的方向&也許這就是問題所在,但我不知道如何解決它....:/

+1

您的示例完全忽略了使用SectionSetFlags的部分。此外,示例應儘可能最小化,因此無需發佈多個部分。 – idleberg

回答

1

部分標誌不僅存儲檢查狀態,還存儲組,粗體和只讀標誌,因此不應使用SectionSetFlags將狀態設置爲0或1. Sections.nsh包含每個標誌的定義它還包含可用於操作節的助手宏。如果想手動查看是否有段被選中(選擇)必須使用一個位測試:

SectionGetFlags ${SEC033} $4 
IntOp $4 $4 & ${SF_SELECTED} 

LogicLib.nsh包含宏,可以讓你檢查的部分在$ {}如果聲明:

!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} 
+0

是的,這看起來絕對更優雅,這是我正在尋找的exacly,謝謝:) – Mateo

0

OK,我創建一個解決方案,也許會有人需要它也:)

SectionGetFlags ${SEC033} $4 
SectionGetFlags ${SEC085} $8 
StrCpy $2 "$4$8" 
${If} $6 == "1" 
    ${If} $2 == "01" 
    SectionSetFlags ${SEC033} 1 
    StrCpy $6 "0" 
    ${Else} 
    ${If} $2 == "10" 
     SectionSetFlags ${SEC085} 1 
     StrCpy $6 "0" 
    ${Else} 
    ${EndIf} 
    ${EndIf} 
${Else} 
    ${If} $2 == "10" 
    SectionSetFlags ${SEC033} 0 
    StrCpy $6 "1" 
    ${Else} 
    ${If} $2 == "01" 
     SectionSetFlags ${SEC085} 0 
     StrCpy $6 "1" 
    ${Else} 
    ${EndIf} 
    ${EndIf} 
${EndIf} 
+0

你不應該使用這樣的SectionSetFlags! – Anders