Цитата Vincent7:
А вам сложно ответить чтоли? »
|
1. А вам сложно прочитать подробнейшую документацию на
русском языке, чтобы решить вопрос, который
вам необходим?
2. А мы что, попугаи, чтобы повторять одно и тоже и здесь, и в справочнике?
3. А для чего создан справочник? Чтобы такие как вы (задам быстренько вопрос и воспользуюсь Ctrl+C) смогли найти ответы на большинство вопросов
4. Ленивых мы не любим, так что если вы сами не хотите ни в чем разбираться, а хотите "всё готовенькое", то вы ошиблись форумом
Цитата Olef2387:
Именно так, Вы правильно поняли »
|
Написал собственный "обработчик", который не даёт отметить несколько секций в группе, но он чисто для вашего скрипта, может кому и пригодится ещё
Возможно, можно будет его каким-то образом усовершенствовать для "универсальности", но пока что нет желания этим заниматься
Вроде бы, работает так как нужно
Код:
OutFile "example.exe"
var hInst
var SecID
!include "MUI2.nsh"
!include "Sections.nsh"
#!insertmacro MUI_PAGE_WELCOME
;функция во время открытия странички компонентов
!define MUI_PAGE_CUSTOMFUNCTION_SHOW COMPONENTS_SHOW
;---------------------------------------------------
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE Russian
;макрос проверки секций, если одна из секций отмечена возврат - 1, иначе - 0;
;в intsec - указываем количество секций в скрипте
!macro CheckSection intsec ret
Push ${intsec}
System::Store SR2
${For} $R0 1 $R2
SectionGetFlags $R0 $R1
${IfThen} $R1 == 1 ${|}${Break}${|}
${Next}
Push $R1
System::Store L
Pop ${ret}
!macroend
Section /o "Независящая секция" FREE
SectionEnd
SubSection /e test IDS_1
Section /o "Компонент №1" ID_1
SectionEnd
Section /o "Компонент №2" ID_2
SectionEnd
Section /o "Компонент №3" ID_3
SectionEnd
Section /o "Компонент №4" ID_4
SectionEnd
Section /o "Компонент №5" ID_5
SectionEnd
Section /o "Компонент №6" ID_6
SectionEnd
SubSectionEnd
Function .onSelChange
call GetSelectedSection
call UnSelectSections
!insertmacro CheckSection 7 $R0
StrCmp $R0 0 0 +2
EnableWindow $hInst ${SW_HIDE} ;отключаем кнопку "установить"
StrCmp $R0 1 0 +2
EnableWindow $hInst ${SW_SHOW} ;включаем кнопку "установить"
FunctionEnd
Function .OnInit
StrCpy $1 ${ID_1}
SectionSetFlags ${IDS_1} ${SECTION_OFF} ;фиктивно отключаем группу
FunctionEnd
Function GetSelectedSection
StrCpy $R0 0
st:
IntOp $R0 $R0 + 1
StrCmp $R0 "1" st 0
StrCmp $R0 "8" end 0
SectionGetFlags $R0 $R1
StrCmp $R0 "$SecID" 0 +2
StrCpy $R1 0
StrCmp $R1 "1" 0 st
StrCpy $SecID "$R0"
end:
FunctionEnd
Function UnSelectSections
StrCpy $R1 0
st2:
IntOp $R1 $R1 + 1
StrCmp $R1 "1" st2 0
SectionSetFlags $R1 0
StrCmp $R1 "8" 0 st2
SectionSetFlags $SecID 1
FunctionEnd
Function COMPONENTS_SHOW
GetDlgItem $hInst $HWNDPARENT 1 ;находим HWND кнопки "установить"
!insertmacro CheckSection 7 $R0
StrCmp $R0 0 0 +2
EnableWindow $hInst ${SW_HIDE} ;отключаем кнопку "установить"
StrCmp $R0 1 0 +2
EnableWindow $hInst ${SW_SHOW} ;включаем кнопку "установить"
FunctionEnd