天天看點

Setup安裝程式建立自定義頁面使用Inno Setup 編譯器建立新頁面

使用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;

④、建立一個可以自己選擇目錄的頁面

Setup安裝程式建立自定義頁面使用Inno Setup 編譯器建立新頁面

      建立頁面函數同①,隻需将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