Pages 에 대하여(2) - NSIS manual

프로그래밍/NSIS 2007/01/09 16:19 게으른 엔지니어
PageCallbacks 라는 기능을 알아 보도록 하겠다.

PageCallbacks는 PageEx ~ PageExEnd 사이에서만 쓸 수 있는 기능으로 문법은 다음과 같다.
[code type=nsis]([creator_function] [leave_function]) | ([pre_function] [show_function] [leave_function])[/code]
위에 보는 것과 같이 두 개의 함수 이름을 쓰면 creator와 leave 함수를 사용하겠다는 것이고, 세 개의 함수 이름을 쓰면 Page에 들어 가기 전에 실행되고 실제 보여 주는 함수 그리고 페이지를 벗어날 때 함수 이다. 말로 하면 좀 어려우니 예제를 보면서 한 번 해보자.

[code type=nsis]# set the name of the installer
outfile "pages.exe"

Var ANOTHER_DIR

InstallDir "$PROGRAMFILES\testing"

LicenseText "라이센스 동의해 주세요~~~ " "동의"
# set license data file
LicenseData ".\license.txt"
LicenseForceSelection checkbox "위 라이센스에 동의 합니다."

ComponentText "필요한 컴포넌트를 인스톨 합니다." \
             "내부적인 소제목입니다." "인스톨 하는 설명을 자세하게 여기에 씁니다."
DirText "인스톨 할 디렉토리 선택 창입니다." "본 프로그램을 인스톨 할 디렉토리를 선택해 주십시오." \
       "클릭해줘!" "디렉토리 선택하는 다이얼로그 설명입니다."
PageEx License
      PageCallbacks li_cre li_leave
PageExEnd
Page Components
PageEx directory
      DirVar $ANOTHER_DIR
PageExEnd
PageEx instfiles
      DetailsButtonText "자세히 보여줘~~"
      CompletedText "끝났당~~"
PageExEnd
function .onInit
      StrCpy $ANOTHER_DIR "$WINDIR"
functionEnd

function li_cre
        MessageBox MB_OK "License creator pagecallbacks"
functionEnd

function li_leave
        MessageBox MB_OK "License leave pagecallbacks"
functionEnd
# create a default section.
section

MessageBox MB_OK "$INSTDIR, $ANOTHER_DIR"

sectionEnd

section "Component1"
       MessageBox MB_OK "You select component1"
SectionEnd

Section "Component2"
       MessageBox MB_OK "You select component2"
SectionEnd[/code]

위 코드는 앞에 적은 글에서 몇 가지 부분만 수정된 것이다. 첫 번째로 17번째 줄인 PageEx License 아래에 PageCallbacks를 적었다. 함수를 두 개만 적었으니 실행되는 것을 알 수 있다. 위 코드를 실행 시키면 생각과 다르게 li_leave 함수가 실제로 라이센스를 보여 주는 화면 보다 먼저 나온다. 즉 아래와 같은 화면들이 나오고 나서 라이센스를 보는 화면이 나온다.

사용자 삽입 이미지사용자 삽입 이미지
이번에는 함수 세 개를 이용해 보자. 세 개를 이용하는 경우에는 creator 함수가 실행되고 show 함수가 실행되며, 라이센스를 보여 주는 화면이 보이고 그 다음으로 leave 함수가 실행된다. 여기서 주의할 것은 leave 함수가 실행되는 것이 라이센스를 보여 주는 화면을 벗어 나서가 아니고 벗어 나기 직전이므로 바탕에는 여전히 라이센스를 보여 주는 화면이 있게 된다. 이 부분은 아래에 코드만 포함시키겠다. 실제 적용은 직접 해보기 바란다.

[code type=nsis]# set the name of the installer
outfile "pages.exe"

Var ANOTHER_DIR

InstallDir "$PROGRAMFILES\testing"

LicenseText "라이센스 동의해 주세요~~~ " "동의"
# set license data file
LicenseData ".\license.txt"
LicenseForceSelection checkbox "위 라이센스에 동의 합니다."

ComponentText "필요한 컴포넌트를 인스톨 합니다." \
             "내부적인 소제목입니다." "인스톨 하는 설명을 자세하게 여기에 씁니다."
DirText "인스톨 할 디렉토리 선택 창입니다." "본 프로그램을 인스톨 할 디렉토리를 선택해 주십시오." \
       "클릭해줘!" "디렉토리 선택하는 다이얼로그 설명입니다."
PageEx License
      PageCallbacks li_cre li_show li_leave
PageExEnd
Page Components
PageEx directory
      DirVar $ANOTHER_DIR
PageExEnd
PageEx instfiles
      DetailsButtonText "자세히 보여줘~~"
      CompletedText "끝났당~~"
PageExEnd
function .onInit
      StrCpy $ANOTHER_DIR "$WINDIR"
functionEnd

function li_cre
        MessageBox MB_OK "License creator pagecallbacks"
functionEnd

function li_show
        MessageBox MB_OK "License show pagecallbacks"
functionEnd

function li_leave
        MessageBox MB_OK "License leave pagecallbacks"
functionEnd
# create a default section.
section

MessageBox MB_OK "$INSTDIR, $ANOTHER_DIR"

sectionEnd

section "Component1"
       MessageBox MB_OK "You select component1"
SectionEnd

Section "Component2"
       MessageBox MB_OK "You select component2"
SectionEnd[/code]

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
TAG
받은 트랙백이 없고, 댓글 하나가 달렸습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/108

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/108

트랙백 주소 :: http://www.cipher.pe.kr/tt/cipher/trackback/108

트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/trackback/108

트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/trackback/108

댓글을 달아 주세요

댓글 RSS 주소 : http://www.cipher.pe.kr/tt/cipher/rss/comment/108
댓글 ATOM 주소 : http://www.cipher.pe.kr/tt/cipher/atom/comment/108
  1. 고기 2007/01/16 17:18  댓글주소  수정/삭제  댓글쓰기

    좋은글 감사함돠^^

[로그인][오픈아이디란?]