Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


Цитата 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

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:04, 02-06-2012 | #2757