Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Динамическое добавление настраиваемой страницы (во время выполнения)

Автор вопроса: red_skyОтветов: 1

Я пишу сценарий установки, используя язык сценариев установщика NSIS. У меня есть несколько настраиваемых страниц, которые я могу загрузить без проблем, но мне было интересно, можно ли вставлять страницы динамически. Что я хочу сделать, так это иметь страницу с дополнительными параметрами конфигурации на ней, а внизу иметь флажок с надписью "Добавить дополнительные настройки" или что-то подобное. Если этот флажок установлен, будет отображаться другая настраиваемая страница, которая является точной копией первой. Пока пользователь продолжает устанавливать флажок, должно отображаться больше страниц. Есть ли какой-нибудь способ повторно использовать одну и ту же страницу снова и снова? Я действительно не думаю, что мне нужно создавать целую новую страницу, потому что это одна и та же страница снова и снова, но я не уверен, как показать новый экземпляр той же страницы во время выполнения. Быстрый поиск в Google и stackoverflow не дал никаких результатов.

Спасибо, парни.

installationnsis

Ответы

Ответ 1 · рейтинг 1 · Anders

Количество страниц фиксируется во время компиляции.

Если вам нужны разные "скрытые" страницы или всего пара экземпляров одной и той же страницы, я бы сказал, что вы должны просто пропускать страницы, когда это необходимо в обратном вызове create для страницы, вызывая прерывание, но это не сработает, если количество страниц безлимитный.

Также можно перейти прямо на страницу:

Outfile test.exe
Requestexecutionlevel user

!include nsDialogs.nsh

Page Custom mypagecreate mypageleave
Page Directory dirpagecreate
Page Instfiles

Function mypagecreate
Var /Global MyCheckBox
nsDialogs::Create /NOUNLOAD 1018
Pop $0
${NSD_CreateCheckBox} 10% 20u 80% 12u "Again?"
Pop $MyCheckBox
nsDialogs::Show
FunctionEnd

Function mypageleave
${NSD_GetState} $MyCheckBox $0
StrCpy $MyCheckBox $0 ; This is a bit of a hack, we reuse the HWND var to store the state
FunctionEnd

Function dirpagecreate
${If} $MyCheckBox <> 0 ; Was the checkbox checked?
    SendMessage $HWNDPARENT 0x408 -1 "" ; If so, go back
${EndIf}
FunctionEnd

Section
SectionEnd

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы