asetin_9207
Нашел способ как, как корректно вытащить значения секций.
Способ не нов, но работает надежно (в этом скрипте).
В функции
.onInit предопределяем состояние секций!
можете все секции вернуть на страницу компонентов!
читать дальше »
Код:
SetCompressor /SOLID lzma
!include "nsDialogs.nsh"
!include "MUI.nsh"
!define PRODUCT_NAME "Left 4 Dead 2 Update"
!define PRODUCT_VERSION "2.0.1.4 - 2.0.3.4"
!define MUI_ABORTWARNING
!define MUI_COMPONENTSPAGE_SMALLDESC
!define MUI_CUSTOMFUNCTION_GUIINIT MUIGUIInit
!define MUI_WELCOMEPAGE_TITLE_3LINES
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
;===================================
;тут порядок страниц не менять!!!!
!define MUI_PAGE_CUSTOMFUNCTION_Leave Flags
!insertmacro MUI_PAGE_COMPONENTS
Page custom fnCustomInit fnCustomDestroy
!define MUI_PAGE_CUSTOMFUNCTION_Show Page
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
;===================================
InstType "Полная установка"
InstType "Только обновление"
InstType "Только Stryder emulator"
InstType "Только Revolution Crew emulator"
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
Caption "Установка ${PRODUCT_NAME} ${PRODUCT_VERSION}"
InstallDir "$PROGRAMFILES\Left 4 Dead 2\"
OutFile "${PRODUCT_NAME} ${PRODUCT_VERSION}.exe"
ShowInstDetails show
Var Dialog
Var Label
Var Text
Function .onInit
StrCpy $2 1 ;предопределение секции
StrCpy $1 0 ;предопределение секции
;продолжение скрипта
FunctionEnd
Function MUIGUIInit
;скрипт
FunctionEnd
Function .onGUIEnd
;скрипт
FunctionEnd
Function Flags ;в этой функции проверяется корректность выбора секций
StrCmp $1 $2 0 +3
MessageBox MB_ICONEXCLAMATION "Выберите необходимый эмулятор!"
Abort
FunctionEnd
Function Page ;в этой функции проверяется корректность ввода ника
StrCmp $Text "" 0 +2
Goto +2
StrCmp $Text "Сюда ввожу ник" 0 +3
MessageBox MB_ICONEXCLAMATION " Введите Ваш ник!"
Call GotoPage
FunctionEnd
Function GotoPage ; Функция для произвольного перехода по страницам
StrCpy $R9 -1
IntCmp $R9 0 0 Move Move
StrCmp $R9 "-1" 0 Move ;-1 переход на предыдущую страницу
StrCpy $R9 "120"
Move:
SendMessage $HWNDPARENT "0x408" "$R9" ""
FunctionEnd
Function fnCustomInit
nsDialogs::Create 1018
Pop $Dialog
!insertmacro MUI_HEADER_TEXT "Выбор ника" " Ввод своего ника"
${NSD_CreateLabel} 0 5u 100u 10u "Введите свой ник"
Pop $Label
${NSD_CreateText} 0 20u 100% 15u "Сюда ввожу ник"
Pop $Text
nsDialogs::Show
FunctionEnd
Function fnCustomDestroy
${NSD_GetText} $Text $Text
FunctionEnd
Section "!Обновление игры" secUpdate
SectionIn 1 2
SetOutPath "$INSTDIR"
;скрипт
SectionEnd
SectionGroup /e "!Эмуляторы" secEmulator
Section "Revolution Crew emulator(рекомендуемый)" secRevcrew ;<<индефикатор секции
SectionIn 4 1
;File /r E:\revcrew\*.*
WriteIniStr "$INSTDIR\rev.ini" steamclient PlayerName $Text
SectionEnd
Section /o "Stryder emulator(для Garena)" secStryder
SectionIn 3
;File /r E:\stryder\*.*
WriteIniStr "$INSTDIR\stryder.ini" steamclient PlayerName $Text
SectionEnd
SectionGroupEnd
Function .onSelChange
SectionGetFlags ${secStryder} $1
SectionGetFlags ${secRevcrew} $2
StrCmp $1 "1" 0 N1
SectionGetFlags ${secRevcrew} $0
IntOp $0 $0 & ${SECTION_OFF}
SectionSetFlags ${secRevcrew} $0
N1:
StrCmp $2 "1" 0 N2
SectionGetFlags ${secStryder} $0
IntOp $0 $0 & ${SECTION_OFF}
SectionSetFlags ${secStryder} $0
N2:
FunctionEnd
LangString DESC_UPDATE ${LANG_RUSSIAN} "Обновление игры с 2.0.1.4 до 2.0.3.4 версии"
LangString DESC_EMULATOR ${LANG_RUSSIAN} "Выберите один из предложенных эмуляторов для игры в Left 4 Dead 2 No-Steam"
LangString DESC_STRYDER ${LANG_RUSSIAN} "Установить Stryder emulator$\r$\nВЫБОР ДВОЙНЫМ НАЖАТИЕМ!!!"
LangString DESC_REVCREW ${LANG_RUSSIAN} "Установить Revolution Crew emulator$\r$\nВЫБОР ДВОЙНЫМ НАЖАТИЕМ!!!"
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${secUpdate} $(DESC_UPDATE)
!insertmacro MUI_DESCRIPTION_TEXT ${secEmulator} $(DESC_EMULATOR)
!insertmacro MUI_DESCRIPTION_TEXT ${secStryder} $(DESC_STRYDER)
!insertmacro MUI_DESCRIPTION_TEXT ${secRevcrew} $(DESC_REVCREW)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
Реализовано корректность выбора секции.
Реализовано корректность выбора ника.