Добавление пользовательской страницы динамически (во время выполнения) - PullRequest
2 голосов
/ 23 сентября 2011

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

Спасибо, ребята.

1 Ответ

1 голос
/ 23 сентября 2011

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

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

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

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
...