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

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

Аватара для kotkovets

Ветеран


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

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


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

Реализовано корректность выбора секции.
Реализовано корректность выбора ника.

Последний раз редактировалось kotkovets, 31-08-2010 в 14:16.

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

Отправлено: 13:53, 31-08-2010 | #698