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

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

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


person red_sky    schedule 22.09.2011    source источник


Ответы (2)


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

Если вам нужны разные «скрытые» страницы или всего пара экземпляров одной и той же страницы, я бы сказал, что вы должны просто пропускать страницы, когда это необходимо в обратном вызове 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
person Anders    schedule 22.09.2011
comment
Мне это выглядит очень хорошо. Я не думал о сохранении дескриптора окна для повторного использования в более позднее время. Я протестирую это и отредактирую, чтобы вы знали, работает ли это так, как ожидалось, но с этого момента все выглядит хорошо. - person red_sky; 23.09.2011
comment
Для меня это очень хорошо сработало. Мне удалось заставить все работать так, как я хотел. Большое Вам спасибо. - person red_sky; 24.09.2011

person    schedule
comment
Краткость приемлема, но более полные объяснения лучше. Как мне написать хороший ответ?. Stack Overflow ценит полные и полные ответы. Вы можете отредактировать свой ответ здесь или нажмите кнопку редактирования в левом нижнем углу своего ответа. Спасибо. - person ejderuby; 16.08.2019