기본적으로 인스톨실드에서는 다양한 형태의 다이얼로그를 제공합니다.
SdWelcome, SdFinish 등등 여러가지가 있지만 이런 기본 형태의 윈도우가 아닌 즉 다양한 사용자
Input 이 필요한 경우에는 어쩔수 없이 다이얼로그(커스텀 다이얼로그 제작)를 직접 만들어 사용해야 합니다.
예전 버전 6.x, 7.x 버전의 인스톨실드는 vc 6.0 을 사용하여 리소스 작업후 _IsUser.dll 로 릴리즈하여
import 하는 방식으로 작업을 했습니다.
vc 작업에 능숙하지 않은 분들에게는 조금 어려웠죠.
최신 버전의 인스톨실드는 인스톨실드 내부에서 이작업을 지원합니다.
지원한지 이제는 벌써 꽤 되는거 같네요. (10.X 버전부터 지원을 했는지...)
차례대로 설명 드리겠습니다.
1> User Interface -> Dialogs -> All Dialogs -> New Dialog 를 실행합니다.
2>Dialog Template 에서 NewScriptBasedDialog 를 선택합니다.
3>SdSample 로 다이얼로그 이름 변경 후 커스텀 다이얼로그에 사용할 컨트롤들을 다이얼로그에
올려 놓습니다.
다이얼로그의 고유 Resource Identifier 를 12345 로 변경합니다.
예제 다이얼로그에 사용할 컨트롤 세가지 Edit, Combo, Check 의 Resource Identifier 도 확인합니다.
4>스크립트 작업
이제 리소스에디터에서의 작업은 종료되었고, 스트립트 작업이 필요합니다.
SetUp.rul 파일의 Before Move Data -> OnFirstUIBefore 함수를 아래와 같이 수정합니다.
function OnFirstUIBefore()
number nResult,nCmdValue;
string szDialogName,szStr;
BOOL bDone,bCheck;
HWND hwndDlg,hwndItem;
LIST liSampleID;
begin
//커스텀 다이얼로그에 사용되는 컨트롤들의 ID 를 정의합니다.
//이 값들은 User Interface -> Dialog 의 resource Identifier 와 동일합니다.
#define RES_CUSTOM_DIALOG 12345 // 커스텀 다이얼로그 아이디
#define RES_CUSTOM_CANCEL 9 //취소 버튼
#define RES_CUSTOM_NEXT 1 // Next 버튼
#define RES_CUSTOM_BACK 12 // BACK 버튼
#define RES_CUSTOM_EDIT 1302 // 커스텀 Edit
#define RES_CUSTOM_COMBO 1303 // 커스텀 Combo
#define RES_CUSTOM_CHECKBOX 1304 // 커스텀 CheckBox
//커스텀 다이얼로그를 정의합니다.
szDialogName = "CustomDialog";
nResult = EzDefineDialog (szDialogName, "", "", RES_CUSTOM_DIALOG);
if (nResult < 0) then
//정의된 다이얼로그가 존재하지 않거나 기타 에러가 발생한 경우
//에러창을 띄우고 인스톨을 종료합니다.
MessageBox ("Error in defining dialog box", SEVERE);
abort;
endif;
bDone = FALSE;
//bDone 이 TRUE 가 될때까지 loop 를 수행합니다.
repeat
// loop 를 돌면서 사용자가 선택하는 다이얼로그 내의 컨트롤의 값들을 받아옵니다.
//nCmdValue 는 컨트롤 ID 즉 resource Identifier 와 동일합니다.
nCmdValue = WaitOnDialog(szDialogName);
switch (nCmdValue)
case DLG_ERR: //에러가 발생한 경우 인스톨을 종료합니다.
MessageBox ("Unable to display dialog box. Setup canceled.", SEVERE);
abort;
case DLG_INIT: //다얼로그가 초기화되는 부분입니다.
// 다이얼로그 생성시 한번만 이벤트가 들어옵니다.
//생성된 다이얼로그의 핸들을 받아옵니다.
hwndDlg = CmdGetHwndDlg( szDialogName );
//이 함수는 Sdint.h 에 정의된 함수입니다.
//Sdint.h \isrt\include\. 에 위치합니다.
//Sdint.rul 에 선언되어 있고 스크립트 다이얼로그용 유틸리티 함수들이 존재합니다.
//인스톨실드 라이브러리 자체에 포함되어 있고 사용자가 직접 액세스 할수는 없습니다.
SdGeneralInit( szDialogName, hwndDlg, STYLE_BOLD, szSdProduct );
//RES_CUSTOM_EDIT 의 값을 testedit 로 설정합니다.
CtrlSetText ( szDialogName, RES_CUSTOM_EDIT, "testedit");
//콤보 박스에 사용할 리스트를 생성합니다.
liSampleID = ListCreate (STRINGLIST);
if (liSampleID = LIST_NULL) then
MessageBox ("Unable to create list.", SEVERE);
abort;
else
//abc를 리스트에 추가합니다.
if (ListAddString (liSampleID, "abc" , AFTER) < 0) then
MessageBox ("ListAddString failed.", INFORMATION);
endif;
//def를 리스트에 추가합니다.
if (ListAddString (liSampleID, "def" , AFTER) < 0) then
MessageBox ("ListAddString failed.", INFORMATION);
endif;
endif;
//리스트를 RES_CUSTOM_COMBO 에 설정합니다.
CtrlSetList (szDialogName, RES_CUSTOM_COMBO, liSampleID);
//사용된 리스트는 제거합니다.
ListDestroy (liSampleID);
//최초 다이얼로그가 뜰때 def에 값이 선택되도록 합니다.
CtrlSetCurSel (szDialogName, RES_CUSTOM_COMBO,"def"
5>정상적으로 컴파일 및 빌드후 실행을 하게 되면 아래와 같은 커스텀 다이얼로그가 보이게 됩니다.
댓글 없음:
댓글 쓰기