스크립트 코드로 설치 마법사 절차 엿보기
Inno Setup으로 만들어진 설치 프로그램을 실행하면 동작하는 설치 마법사의 절차를 스크립트와 비교하면서 학습해 보기로 합시다.설치 마법사가 동작되는 순서는 스크립트의 [Code] 세션 부분입니다. [Code] 세션은 파스칼 스크립트로 작성되어 있으며 파스칼을 모르는 사람이라도 아래 그림과 스크립트를 비교하면서 설명해 보겠습니다.
1. 입력 박스 추가 페이지 만들기
[Code]
var UserPage: TInputQueryWizardPage;
procedure InitializeWizard;
begin
{
Create the pages
}
{
// edit box가 포함되어 있는 마법사 페이지를 생성한다.
// AfterID: Integer = wpWelcome
// ACaption: String = 'Personal Information'
// ADescription: String = 'Who are you?'
// ASubCaption: String = 'Please specify your name and the company for whom you work, then click Next.'
}
UserPage := CreateInputQueryPage(wpWelcome,
'Personal Information',
'Who are you?',
'Please specify your name and the company for whom you work, then click Next.');
{
// edit box 아이템을 추가한다.
// APrompt: String = 'Name:'
// APassword: Boolean = False(Password edit가 아니라는 것을 의미)
}
UserPage.Add('Name:', False);
UserPage.Add('Company:', False);
2. 옵션 버튼 추가 페이지 만들기
[Code]
var UsagePage: TInputOptionWizardPage;
procedure InitializeWizard;
begin
{
Create the pages
}
{
// 체크 또는 옵션 버튼이 포함되어 있는 마법사 페이지를 생성한다.
// AfterID: Integer = UserPage.ID
// ACaption: String = 'Personal Information'
// ADescription: String = 'How will you use My Program?'
// ASubCaption: String = 'Please specify how you would like to use My Program, then click Next.'
// Exclusive: Boolean = True (옵션 버튼이 체크 박스 대신 표시되며 한개만 선택할 수 있음)
// ListBox: Boolean = False (만약, True일 경우 라디오 버튼 또는 체크 박스를 리스트 박스 안에 위치시킨다)
}
UsagePage := CreateInputOptionPage(UserPage.ID,
'Personal Information',
'How will you use My Program?',
'Please specify how you would like to use My Program, then click Next.',
True, False);
{
// 아이템을 추가한다.
// ACaption: String = 'Light mode (no ads, limited functionality)'
}
UsagePage.Add('Light mode (no ads, limited functionality)');
UsagePage.Add('Sponsored mode (with ads, full functionality)');
UsagePage.Add('Paid mode (no ads, full functionality)');
3. 메시지출력 페이지 만들기
[Code]
var LightMsgPage: TOutputMsgWizardPage;
procedure InitializeWizard;
begin
{
Create the pages
}
{
// 메시지가 포함되어 있는 마법사 페이지를 생성한다.
// AfterID: Integer = UsagePage.ID
// ACaption: String = 'Personal Information'
// ADescription: String = 'How will you use My Program?'
// ASubCaption: String = 'Note: to enjoy all features My Program can offer and to support its development, ' +
// 'you can switch to sponsored or paid mode at any time by selecting ''Usage Mode'' ' +
// 'in the ''Help'' menu of My Program after the installation has completed.'#13#13 +
// 'Click Back if you want to change your usage mode setting now, or click Next to ' +
// 'continue with the installation.'
}
LightMsgPage := CreateOutputMsgPage(UsagePage.ID,
'Personal Information', 'How will you use My Program?',
'Note: to enjoy all features My Program can offer and to support its development, ' +
'you can switch to sponsored or paid mode at any time by selecting ''Usage Mode'' ' +
'in the ''Help'' menu of My Program after the installation has completed.'#13#13 +
'Click Back if you want to change your usage mode setting now, or click Next to ' +
'continue with the installation.');
4. 디렉토리 선택 페이지 만들기
[Code]
var DataDirPage: TInputDirWizardPage;
procedure InitializeWizard;
begin
{
Create the pages
}
{
// 디렉토리 선택을 위해서 edit 박스와 찾아보기 버튼이 포함되어 있는 마법사 페이지를 생성한다.
// AfterID: Integer = wpSelectDir
// ACaption: String = 'Select Personal Data Directory'
// ADescription: String = 'Where should personal data files be installed?'
// ASubCaption: String = 'Select the folder in which Setup should install personal data files, then click Next.'
// AAppendDir: Boolean = False (True일 경우, ANewFolderName 값은 사용자 클릭한 폴더 이름으로 추가된다)
// ANewFolderName: String = ''
// AApendDir = False 이면서 ANewFolderName이 공백일 경우 표시된 기본 이름으로 새로운 폴더를 생성하고 표시한다.
}
DataDirPage := CreateInputDirPage(wpSelectDir,
'Select Personal Data Directory',
'Where should personal data files be installed?',
'Select the folder in which Setup should install personal data files, then click Next.',
False, '');
{
// 아이템을 추가한다.
// APrompt: String = ''
DataDirPage.Add('');
}
5. 레지스트리 키 입력 페이지 만들기
[Code]
var KeyPage: TInputQueryWizardPage;
procedure InitializeWizard;
begin
{
Create the pages
}
{
// 입력 창이 포함되어 있는 마법사 페이지를 생성한다.
// AfterID: Integer = wpSelectDir
// ACaption: String = 'Personal Information'
// ADescription: String = 'What''s your registration key?'
// ASubCaption: String = 'Please specify your registration key and click Next to continue. If you don''t ' +
// 'have a valid registration key, click Back to choose a different usage mode.'
}
KeyPage := CreateInputQueryPage(UsagePage.ID,
'Personal Information',
'What''s your registration key?',
'Please specify your registration key and click Next to continue. If you don''t ' +
'have a valid registration key, click Back to choose a different usage mode.');
{
// edit box 아이템을 추가한다.
// APrompt: String = 'Registration key:'
// APassword: Boolean = False (Password edit가 아니라는 것을 의미)
}
KeyPage.Add('Registration key:', False);
6. 진행상태표시 페이지 만들기
[Code]
var ProgressPage: TOutputProgressWizardPage;
procedure InitializeWizard;
begin
{
Create the pages
}
{
// 진행바가 포함되어 있는 마법사 페이지를 생성한다.
// 다만, 본 페이지는 기본적으로 숨겨서 처리한다
// ACaption: String = 'Personal Information'
// ADescription: String = 'What''s your registration key?'
}
ProgressPage := CreateOutputProgressPage('Personal Information',
'What''s your registration key?');
function NextButtonClick(CurPageID: Integer): Boolean;
var I: Integer;
begin
if CurPageID = KeyPage.ID then
begin
{
Just to show how 'OutputProgress' pages work.
Always use a try..finally between the Show and Hide calls as shown below.
}
ProgressPage.SetText('Authorizing registration key...', '');
ProgressPage.SetProgress(0, 0);
ProgressPage.Show;
try
for I := 0 to 10 do
begin
ProgressPage.SetProgress(I, 10);
Sleep(100);
end;
finally
ProgressPage.Hide;
end;
end;
end;