Цитата BSL:
Загвоздка в том я смогу создать свою страницу, но как научить ее отображать её или нет в зависимости от выбранной секции »
|
Делается точно также, но с небольшой "модификацией". Нечто подобное делал для себя, вот кусок скрипта:
читать дальше »
Код:

!include "MUI2.nsh"
!include "dialogs.nsh"
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_PAGE_CUSTOMFUNCTION_SHOW COMPONENTSSHOW
!insertmacro MUI_PAGE_COMPONENTS
Page custom PortShow PortLeave
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "Russian"
ShowInstDetails show
InstallDir "$EXEDIR"
OutFile Test.exe
Caption "Test"
Var Dialog
Var Label
Var Number
Var Port
Section /o "Port" SecPort
MessageBox MB_OK "Номер выбраннога порта: $Port" ;показываю в качестве примера значение $0
SectionEnd
Function COMPONENTSSHOW ;функция при открытии стр. компонентов
${If} ${SectionIsSelected} SecPort ;если выбрана секция
GetDlgItem $0 $HWNDPARENT 1
${NSD_SetText} $0 `$(^NextBtn)` ;переименовываем кнопку
${ElseIfNot} ${SectionIsSelected} SecPort ;если не выбрана секция
GetDlgItem $0 $HWNDPARENT 1
${NSD_SetText} $0 `$(^InstallBtn)` ;переименовываем кнопку
${EndIf}
FunctionEnd
Function .onSelChange
${If} ${SectionIsSelected} SecPort ;если выбрана секция
GetDlgItem $0 $HWNDPARENT 1
${NSD_SetText} $0 `$(^NextBtn)` ;переименовываем кнопку
${ElseIfNot} ${SectionIsSelected} SecPort ;если не выбрана секция
GetDlgItem $0 $HWNDPARENT 1
${NSD_SetText} $0 `$(^InstallBtn)` ;переименовываем кнопку
${EndIf}
FunctionEnd
Function PortShow
${If} ${SectionIsSelected} SecPort ;проверка выбрана ли нужная секция
nsDialogs::Create 1018
Pop $Dialog
${NSD_CreateLabel} 0 0u 130u 13u "Введите в поле ввода номер порта:"
Pop $Label
${NSD_CreateNumber} 0 13u 40% 13u "" ;ввод только цифры
Pop $Number
${NSD_SetTextLimit} $Number 4 ;лимит на 4 символа
nsDialogs::Show
${EndIf}
FunctionEnd
Function PortLeave
${NSD_GetText} $Number $Port ;считываем текст контрола
StrLen $2 $Port ;считываем количество введенных символов с $Port в $2
IntCmp $2 4 +2 0 0 ;если меньше или больше 4 символов - возврат назад
Abort
FunctionEnd
И обязательно все функции, которые работают с секциями, размещать в скрипте после всех секций - для корректного считывания индетификаторов секций.