使用Inno Setup 編譯器建立新頁面
1、建立一個屬于自己的頁面
①、定義建立頁面的函數
procedure CreateTheWizardPages;
var //定義不同控件的變量
RadioButton : TRadioButton;
Button, FormButton: TNewButton;
Panel: TPanel;
CheckBox: TNewCheckBox;
PasswordEdit: TPasswordEdit;
Memo: TNewMemo;
ComboBox: TNewComboBox;
ListBox: TNewListBox;
StaticText, ProgressBarLabel: TNewStaticText;
ProgressBar, ProgressBar2, ProgressBar3: TNewProgressBar;
CheckListBox, CheckListBox2: TNewCheckListBox;
FolderTreeView: TFolderTreeView;
BitmapImage, BitmapImage2, BitmapImage3: TBitmapImage;
BitmapFileName: String;
RichEditViewer: TRichEditViewer;
FileName: String;
begin
Page1 := CreateCustomPage(wpWelcome, 'Welcome to the Matbook Setup Wizard', 'Specity either host name/ipaddress of license server(s) or node-locked license file.'); //建立使用者的頁面
RadioButton11 :=TNewRadioButton.Create(Page1); //建立一個按鈕,設定大小位置
RadioButton11.Width := Page1.SurfaceWidth;
RadioButton11.Height := ScaleY(30);
RadioButton11.Parent := Page1.Surface;
RadioButton11.Caption := 'Server License';
RadioButton11.OnClick :[email protected]; //調用按鈕響應函數ClickRadio1
StaticText := TNewStaticText.Create(Page1); //建立一個靜态文本框,設定大小
StaticText.Top := RadioButton11.Top + RadioButton11.Height + ScaleY(8);
StaticText.Left := RadioButton11.Left + ScaleY(20);
StaticText.Caption := 'License Path:';
StaticText.AutoSize := True;
StaticText.Parent := Page1.Surface;
Edit1 := TNewEdit.Create(Page1); //建立一個編輯框
Edit1.Top := StaticText.Top - ScaleY(2);
Edit1.Width := Page1.SurfaceWidth div 2 - ScaleX(8);
Edit1.Left := StaticText.Left + ScaleX(130);
Edit1.Text := '';
//Edit1.ReadOnly := True; //隻可讀
//Edit1.HideSelection :=False;
Edit1.Parent := Page1.Surface;
end;
procedure ClickRadio2(Sender: TObject); //函數要放在建立頁面函數前面
begin
Edit1.Color := clSilver;
Edit1.ReadOnly :=True;
Edit.Color :=clWhite;
Edit.ReadOnly := False;
end;
②、在InitializeSetup()中調用你剛才建立的函數
這樣在安裝程式初始化時調用,打開後就是你自己定義的頁面。
procedure InitializeWizard();
begin
CreateTheWizardPages;
end;
③、在安裝完成後想要輸出資料到檔案中
在CurStepChanged(CurStep: TSetupStep);中輸出資料到檔案中。
該過程提供使用者完成預安裝和安裝之後的任務,更多的是提供了安裝過程中的狀态。參數CurStep=ssInstall是在程式實際安裝前(所有的路徑等都配置好之後準備寫入檔案錢),CurStep=ssPostInstall是實際安裝完成後,而CurStep=ssDone是在一次成功的安裝完成後、安裝程式終止前(即點選finish按鈕後執行)。
記得将所要輸出的編輯框等定義為全局變量。
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
SetIniString('Center','CATIA',Edit2.text,ExpandConstant('{app}/test.ini'));
end;
end;
④、建立一個可以自己選擇目錄的頁面
建立頁面函數同①,隻需将choose按鈕的按鈕響應函數更改。
procedure ButtonOnChoose(Sender: TObject);
var dir;
begin
dir :='C:\\Program Files (x86)'; //設定預設路徑
BrowseForFolder('Browse Folder', dir, True); //浏覽檔案夾路徑
Edit2.text := dir; //将Edit2的文本改為選擇過後的路徑
end;
2、Inno Setup支援以下函數和過程。
function InitializeSetup(): Boolean;
該函數在安裝程式初始化時調用,傳回False 将中斷安裝,True則繼續安裝,測試代碼如下:
function InitializeSetup(): Boolean; begin Result := MsgBox('安裝程式正在初始化,你确定要安裝嗎?', mbConfirmation, MB_YESNO) = idYes; if Result = False then MsgBox('你放棄了安裝,程式直接退出', mbInformation, MB_OK); end; |
procedure InitializeWizard();
該過程在開始的時候改變向導或者向導頁,不要指望使用InitializeSetup函數實作改變向導頁的功能,因為InitializeSetup函數觸發時向導視窗并不存在。
procedure DeinitializeSetup();
該過程在安裝終止時被調用,注意及時在使用者沒有安裝任何檔案之前退出也會被調用。測試代碼如下:
procedure DeinitializeSetup(); begin msgbox('DeinitializeSetup is called',mbInformation, MB_OK); end; |
procedure CurStepChanged(CurStep: TSetupStep);
該過程提供使用者完成預安裝和安裝之後的任務,更多的是提供了安裝過程中的狀态。參數CurStep=ssInstall是在程式實際安裝前(所有的路徑等都配置好之後準備寫入檔案錢),CurStep=ssPostInstall是實際安裝完成後,而CurStep=ssDone是在一次成功的安裝完成後、安裝程式終止前(即點選finish按鈕後執行)。測試代碼如下:
procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep=ssinstall then MsgBox('準備寫入檔案了', mbInformation, MB_OK); if CurStep=ssPostinstall then MsgBox('檔案複制完成', mbInformation, MB_OK); if CurStep=ssDone then MsgBox('軟體成功安裝', mbInformation, MB_OK); end; |
function NextButtonClick(CurPageID: Integer): Boolean;
當使用者單擊下一步按鈕時調用。如果傳回True,向導将移到下一頁;如果傳回False,它仍保留在目前頁。測試代碼如下:
function NextButtonClick(CurPageID: Integer): Boolean; begin Result := MsgBox('到下一頁去嗎?', mbConfirmation, MB_YESNO) = idYes; end; |
function BackButtonClick(CurPageID: Integer): Boolean;
和前面的NextButtonClick函數相反,當使用者單擊傳回按鈕時調用。如果傳回True,向導将移到前;如果傳回False,它仍保留在目前頁,測試代碼略。
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
當使用者單擊取消按鈕或單擊視窗中的關閉按鈕時調用。Cancel參數指定取消程序是否該發生;預設為True。Confirm參數指定是否顯示“退出安裝程式嗎?”的消息框;預設為True。如果Cancel設為False,那麼Confirm的值将被忽略。測試代碼如下:
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); begin cancel:=False; end; |
function ShouldSkipPage(PageID: Integer): Boolean;
向導調用這個事件函數确定是否在所有頁或不在一個特殊頁 (用PageID指定) 顯示。如果傳回True,将跳過該頁;如果你傳回False,該頁被顯示。注意:這個事件函數不被wpWelcome、wpPreparing和wpInstalling 頁調用,還有安裝程式已經确定要跳過的頁也不會調用 (例如,沒有包含元件安裝程式的wpSelectComponents)。測試代碼如下:
function ShouldSkipPage(PageID: Integer): Boolean; begin if PageID=wpSelectDir then Result:=True; end; |
本段代碼将會使得安裝程式跳過選擇安裝目錄的頁面
可用的PageID有: wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpInfoAfter, wpFinished
procedure CurPageChanged(CurPageID: Integer);
在新向導頁 (由CurPageID 指定)顯示後調用。測試代碼如下:
procedure CurPageChanged(CurPageID: Integer); begin Msgbox('ha,new page!',mbInformation, MB_OK); end; |
該段代碼将會導緻每出現一個新的一面的時候就會彈出一個消息框。
代碼下載下傳:https://download.csdn.net/download/yuer_xiao/10608616