megane68
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору MKN Я с другой стороны подошёл, а сейчас чешу репу как мне зависимость кнопок сделать? В общем смысл такой - имеются две субсекции, в которых по три секции. Первая субсекция независима от второй. При выборе второй и третьей секции, должна включаться всегда первая секция. Вторая субсекция из 4, 5 и 6 секции. При выборе 5-ой секции, должны включаться 1,-ая, 2-ая, 3-яя, 4-ая, . При выборе 6-ой секции, должна включаться только 4-ая. Сейчас в своём сценарии не могу сделать точно такую зависимость. Выглядит он так: Цитата: Name SectionDependency OutFile SectionDependency.exe Var IndependentSectionState Page Components !include Sections.nsh Section "Section 1" SEC01 SetOutPath "$INSTDIR\" SectionIn RO SectionEnd Section "Section 2" SEC02 SetOutPath "$INSTDIR\" SectionIn RO SectionEnd SubSection "Субсекция 1" SUBSEC01 Section "Section 3" SEC03 SetOutPath "$INSTDIR\" SectionEnd Section /o "Section 4" SEC04 SetOutPath "$INSTDIR\" SectionEnd Section /o "Section 5" SEC05 SetOutPath "$INSTDIR\" SectionEnd SubSectionEnd SubSection "Субсекция 2" SUBSEC02 Section "Section 6" SEC06 SetOutPath "$INSTDIR\" SectionEnd Section /o "Section 7" SEC07 SetOutPath "$INSTDIR\" SectionEnd Section /o "Section 8" SEC08 SetOutPath "$INSTDIR\" SectionEnd SubSectionEnd Function .onInit # This is necessary otherwise SEC03 won't be selectable for the first time you click it. SectionGetFlags ${SEC03} $R0 IntOp $R0 $R0 & ${SF_SELECTED} StrCpy $IndependentSectionState $R0 SectionGetFlags ${SEC06} $R0 IntOp $R0 $R0 & ${SF_SELECTED} StrCpy $IndependentSectionState $R0 FunctionEnd Function .onSelChange Push $R0 Push $R1 # Check if SEC03 was just selected then select SEC04 and SEC05. SectionGetFlags ${SEC03} $R0 IntOp $R0 $R0 & ${SF_SELECTED} StrCmp $R0 $IndependentSectionState +3 StrCpy $IndependentSectionState $R0 Goto UnselectDependentSections StrCpy $IndependentSectionState $R0 Goto CheckDependentSections ; # Check if SEC06 was just selected then select SEC07 and SEC08. ; SectionGetFlags ${SEC06} $R0 ; IntOp $R0 $R0 & ${SF_SELECTED} ; StrCmp $R0 $IndependentSectionState +3 ; StrCpy $IndependentSectionState $R0 ; Goto UnselectDependentSections ; StrCpy $IndependentSectionState $R0 ; Goto CheckDependentSections ; # Check if SEC06 was just selected then select SEC07 and SEC08. ; SectionGetFlags ${SEC07} $R0 ; IntOp $R0 $R0 & ${SF_SELECTED} ; StrCmp $R0 $IndependentSectionState +3 ; StrCpy $IndependentSectionState $R0 ; Goto UnselectDependentSections ; StrCpy $IndependentSectionState $R0 ; Goto CheckDependentSections # Select SEC03 if SEC04 or SEC05 was selected. SelectIndependentSection: SectionGetFlags ${SEC03} $R0 IntOp $R1 $R0 & ${SF_SELECTED} StrCmp $R1 ${SF_SELECTED} +3 IntOp $R0 $R0 | ${SF_SELECTED} SectionSetFlags ${SEC03} $R0 StrCpy $IndependentSectionState ${SF_SELECTED} SectionGetFlags ${SEC06} $R0 IntOp $R1 $R0 & ${SF_SELECTED} StrCmp $R1 ${SF_SELECTED} +3 IntOp $R0 $R0 | ${SF_SELECTED} SectionSetFlags ${SEC06} $R0 StrCpy $IndependentSectionState ${SF_SELECTED} SectionGetFlags ${SEC04} $R0 IntOp $R1 $R0 & ${SF_SELECTED} StrCmp $R1 ${SF_SELECTED} +3 IntOp $R0 $R0 | ${SF_SELECTED} SectionSetFlags ${SEC04} $R0 StrCpy $IndependentSectionState ${SF_SELECTED} SectionGetFlags ${SEC05} $R0 IntOp $R1 $R0 & ${SF_SELECTED} StrCmp $R1 ${SF_SELECTED} +3 IntOp $R0 $R0 | ${SF_SELECTED} SectionSetFlags ${SEC05} $R0 StrCpy $IndependentSectionState ${SF_SELECTED} Goto End # Were Sec3 or Sec4 just unselected? CheckDependentSections: SectionGetFlags ${SEC04} $R0 IntOp $R0 $R0 & ${SF_SELECTED} StrCmp $R0 ${SF_SELECTED} SelectIndependentSection SectionGetFlags ${SEC05} $R0 IntOp $R0 $R0 & ${SF_SELECTED} StrCmp $R0 ${SF_SELECTED} SelectIndependentSection ; Goto End SectionGetFlags ${SEC07} $R0 IntOp $R0 $R0 & ${SF_SELECTED} StrCmp $R0 ${SF_SELECTED} SelectIndependentSection SectionGetFlags ${SEC08} $R0 IntOp $R0 $R0 & ${SF_SELECTED} StrCmp $R0 ${SF_SELECTED} SelectIndependentSection Goto End # Unselect Sec3 and Sec4 if Sec2 was unselected. UnselectDependentSections: SectionGetFlags ${SEC04} $R0 IntOp $R1 $R0 & ${SF_SELECTED} StrCmp $R1 ${SF_SELECTED} 0 +3 IntOp $R0 $R0 ^ ${SF_SELECTED} SectionSetFlags ${SEC04} $R0 SectionGetFlags ${SEC05} $R0 IntOp $R1 $R0 & ${SF_SELECTED} StrCmp $R1 ${SF_SELECTED} 0 +3 IntOp $R0 $R0 ^ ${SF_SELECTED} SectionSetFlags ${SEC05} $R0 SectionGetFlags ${SEC07} $R0 IntOp $R1 $R0 & ${SF_SELECTED} StrCmp $R1 ${SF_SELECTED} 0 +3 IntOp $R0 $R0 ^ ${SF_SELECTED} SectionSetFlags ${SEC07} $R0 SectionGetFlags ${SEC08} $R0 IntOp $R1 $R0 & ${SF_SELECTED} StrCmp $R1 ${SF_SELECTED} 0 +3 IntOp $R0 $R0 ^ ${SF_SELECTED} SectionSetFlags ${SEC08} $R0 End: Pop $R1 Pop $R0 FunctionEnd | Добавлено: MKN ПО вашему примеру, сделал отдел две субсекции. Сейчас они работаю идентично. Сложность в том, как привязать седьмую секцию к 3, 4, 5 и 6-ой секциям. При этом такая комбинация должен выполняться только при нажатии на седьмую секцию. Цитата: Page Components !include Sections.nsh Section "Section 1" SEC01 SetOutPath "$INSTDIR\" SectionIn RO SectionEnd Section "Section 2" SEC02 SetOutPath "$INSTDIR\" SectionIn RO SectionEnd SubSection "Субсекция 1" SUBSEC01 Section "Section 3" SEC03 SetOutPath "$INSTDIR\" SectionEnd Section /o "Section 4" SEC04 SetOutPath "$INSTDIR\" SectionEnd Section /o "Section 5" SEC05 SetOutPath "$INSTDIR\" SectionEnd SubSectionEnd SubSection "Субсекция 2" SUBSEC02 Section "Section 6" SEC06 SetOutPath "$INSTDIR\" SectionEnd Section /o "Section 7" SEC07 SetOutPath "$INSTDIR\" SectionEnd Section /o "Section 8" SEC08 SetOutPath "$INSTDIR\" SectionEnd SubSectionEnd Function .onSelChange SectionGetFlags ${SEC04} $3 SectionGetFlags ${SEC05} $4 ${If} $3 == 1 ${OrIf} $4 == 1 SectionSetFlags ${SEC03} 1 ${EndIf} SectionGetFlags ${SEC07} $3 SectionGetFlags ${SEC08} $4 ${If} $3 == 1 ${OrIf} $4 == 1 SectionSetFlags ${SEC06} 1 ${EndIf} FunctionEnd |
| Всего записей: 485 | Зарегистр. 14-09-2008 | Отправлено: 10:35 07-11-2015 | Исправлено: megane68, 10:38 07-11-2015 |
|