NSIS-Pages 에 대하여(2)

PageCallbacks 라는 기능을 알아 보도록 하겠다.

PageCallbacks는 PageEx ~ PageExEnd 사이에서만 쓸 수 있는 기능으로 문법은 다음과 같다.

  1. ([creator_function] [leave_function]) | ([pre_function] [show_function] [leave_function])

위에 보는 것과 같이 두 개의 함수 이름을 쓰면 creator와 leave 함수를 사용하겠다는 것이고, 세 개의 함수 이름을 쓰면 Page에 들어 가기 전에 실행되고 실제 보여 주는 함수 그리고 페이지를 벗어날 때 함수 이다. 말로 하면 좀 어려우니 예제를 보면서 한 번 해보자.

  1. # set the name of the installer
  2. outfile "pages.exe"
  3.  
  4. Var ANOTHER_DIR
  5.  
  6. InstallDir "$PROGRAMFILES\testing"
  7.  
  8. LicenseText "라이센스 동의해 주세요~~~ " "동의"
  9. # set license data file
  10. LicenseData ".\license.txt"
  11. LicenseForceSelection checkbox "위 라이센스에 동의 합니다."
  12.  
  13. ComponentText "필요한 컴포넌트를 인스톨 합니다." \
  14.               "내부적인 소제목입니다." "인스톨 하는 설명을 자세하게 여기에 씁니다."
  15. DirText "인스톨 할 디렉토리 선택 창입니다." "본 프로그램을 인스톨 할 디렉토리를 선택해 주십시오." \
  16.         "클릭해줘!" "디렉토리 선택하는 다이얼로그 설명입니다."
  17. PageEx License
  18.        PageCallbacks li_cre li_leave
  19. PageExEnd
  20. Page Components
  21. PageEx directory
  22.        DirVar $ANOTHER_DIR
  23. PageExEnd
  24. PageEx instfiles
  25.        DetailsButtonText "자세히 보여줘~~"
  26.        CompletedText "끝났당~~"
  27. PageExEnd
  28. function .onInit
  29.        StrCpy $ANOTHER_DIR "$WINDIR"
  30. functionEnd
  31.  
  32. function li_cre
  33.          MessageBox MB_OK "License creator pagecallbacks"
  34. functionEnd
  35.  
  36. function li_leave
  37.          MessageBox MB_OK "License leave pagecallbacks"
  38. functionEnd
  39. # create a default section.
  40. section
  41.  
  42. MessageBox MB_OK "$INSTDIR, $ANOTHER_DIR"
  43.  
  44. sectionEnd
  45.  
  46. section "Component1"
  47.         MessageBox MB_OK "You select component1"
  48. SectionEnd
  49.  
  50. Section "Component2"
  51.         MessageBox MB_OK "You select component2"
  52. SectionEnd


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

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

  1. # set the name of the installer
  2. outfile "pages.exe"
  3.  
  4. Var ANOTHER_DIR
  5.  
  6. InstallDir "$PROGRAMFILES\testing"
  7.  
  8. LicenseText "라이센스 동의해 주세요~~~ " "동의"
  9. # set license data file
  10. LicenseData ".\license.txt"
  11. LicenseForceSelection checkbox "위 라이센스에 동의 합니다."
  12.  
  13. ComponentText "필요한 컴포넌트를 인스톨 합니다." \
  14.               "내부적인 소제목입니다." "인스톨 하는 설명을 자세하게 여기에 씁니다."
  15. DirText "인스톨 할 디렉토리 선택 창입니다." "본 프로그램을 인스톨 할 디렉토리를 선택해 주십시오." \
  16.         "클릭해줘!" "디렉토리 선택하는 다이얼로그 설명입니다."
  17. PageEx License
  18.        PageCallbacks li_cre li_show li_leave
  19. PageExEnd
  20. Page Components
  21. PageEx directory
  22.        DirVar $ANOTHER_DIR
  23. PageExEnd
  24. PageEx instfiles
  25.        DetailsButtonText "자세히 보여줘~~"
  26.        CompletedText "끝났당~~"
  27. PageExEnd
  28. function .onInit
  29.        StrCpy $ANOTHER_DIR "$WINDIR"
  30. functionEnd
  31.  
  32. function li_cre
  33.          MessageBox MB_OK "License creator pagecallbacks"
  34. functionEnd
  35.  
  36. function li_show
  37.          MessageBox MB_OK "License show pagecallbacks"
  38. functionEnd
  39.  
  40. function li_leave
  41.          MessageBox MB_OK "License leave pagecallbacks"
  42. functionEnd
  43. # create a default section.
  44. section
  45.  
  46. MessageBox MB_OK "$INSTDIR, $ANOTHER_DIR"
  47.  
  48. sectionEnd
  49.  
  50. section "Component1"
  51.         MessageBox MB_OK "You select component1"
  52. SectionEnd
  53.  
  54. Section "Component2"
  55.         MessageBox MB_OK "You select component2"
  56. SectionEnd
위로 스크롤