2011-09-22 8 views
2

NSIS 설치 스크립트 언어를 사용하여 설치 스크립트를 작성하고 있습니다. 번거 로움없이로드 할 수있는 몇 가지 사용자 지정 페이지가 있지만 동적으로 페이지를 삽입 할 수 있는지 궁금합니다. 내가하고 싶은 일은 추가 설정 옵션이있는 페이지를 가지고 하단에 "더 많은 설정 추가하기"라는 체크 박스가 있습니다. 확인란이 선택되어 있으면 첫 번째 페이지의 정확한 사본 인 다른 맞춤 페이지가 표시됩니다. 사용자가 확인란을 계속 선택하면 더 많은 페이지가 표시됩니다. 동일한 페이지를 반복해서 재활용하는 방법이 있습니까? 나는 완전히 새로운 페이지를 생성해야한다고 생각하지 않는다. 왜냐하면 그것은 단지 같은 페이지 일 뿐이 기 때문에 반복적으로 실행되지만, 런타임 중에 같은 페이지의 새로운 인스턴스를 표시하는 방법을 모르겠습니다. 빠른 Google 및 stackoverflow 검색은 결과를 보증하지 않았습니다.동적으로 (런타임에) 사용자 정의 페이지 추가하기

감사합니다.

답변

1

페이지 수는 컴파일 타임에 고정되어 있습니다.

다른 "숨겨진"페이지가 필요하거나 같은 페이지의 몇 인스턴스가 필요하다면 중단을 호출하여 페이지의 콜백을 생성 할 때 페이지를 건너 뛰면되지만 페이지가 작동하지 않을 것이라고 말하고 싶습니다 페이지 수가 무제한 경우.

이 페이지로 직접 이동하는 것도 가능합니다 :

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 
+0

이 나에게 정말 좋은 보인다. 나중에 재사용하기 위해 창 핸들을 저장하는 것에 대해 생각하지 않았습니다. 이것을 시험해보고 이것을 편집하여 예상대로 작동하는지 여부를 알려주지 만,이 시점에서 나에게 좋을 것 같습니다. –

+0

그것은 저를 위해 아주 잘 작동했습니다. 내가 원했던대로 모든 일을 할 수있었습니다. 고맙습니다. –

관련 문제