2016년 4월 16일 토요일

[Inno Setup] 6. 설치 마법사 절차와 스크립트

스크립트 코드로 설치 마법사 절차 엿보기

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;

댓글 없음:

댓글 쓰기