1. 程式人生 > >Setup安裝程式建立自定義頁面

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;

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

      建立頁面函式同①,只需將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引數指定取消程序是否該發生;預設為TrueConfirm引數指定是否顯示退出安裝程式嗎?的訊息框;預設為True。如果Cancel設為False,那麼Confirm的值將被忽略。測試程式碼如下:

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);

begin

cancel:=False;

end;

function ShouldSkipPage(PageID: Integer): Boolean;

嚮導呼叫這個事件函式確定是否在所有頁或不在一個特殊頁 (PageID指定顯示。如果返回True,將跳過該頁;如果你返回False,該頁被顯示。注意:這個事件函式不被wpWelcomewpPreparingwpInstalling 頁呼叫,還有安裝程式已經確定要跳過的頁也不會呼叫 (例如,沒有包含元件安裝程式的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;

該段程式碼將會導致每出現一個新的一面的時候就會彈出一個訊息框。

相關推薦

Setup安裝程式建立定義頁面

使用Inno Setup 編譯器建立新頁面 1、建立一個屬於自己的頁面      ①、定義建立頁面的函式 procedure CreateTheWizardPages; var                                              

如何在magento中建立定義頁面

老話重提,我們還是通過URL來進行分析http://<host>/<Magento虛擬目錄>/<config.xm中的frontName>/<Controller檔案名去掉Controller>/<Controller檔

Linux/macOS 為程式建立定義程序名的程序 [以 python 為例]

在系統中可能會多次使用 python 執行 py 檔案,或在終端直接執行 python 命令列,因此可能會建立多個 PID 不同,但程序名都為 python 的程序。而通過 ps 命令就會獲取多個程

[Swift4.2實際操作]九、完整例項-(7)登入頁面建立定義檢視及相關元件

本文將開始建立登入頁面,首先建立該頁面所需的一些自定義元件:做為登入按鈕的自定義檢視物件。在【RegLogin】組的名稱上點選滑鼠右鍵,開啟右鍵選單。【New File】->【Cocoa Touch Class】建立新檔案【RegButton.swift】Name:RegButtonSubclass:S

pycharm整合django 建立專案並訪問定義頁面

Pycharm 整合Django 1. 版本資訊:  Python:3.6  Django:1.11.7 2. 下載安裝這裡就不說了,百度官網下載 3. 環境搭建好就可以使用 django-admin.py  startproject  Test建立專案。  進入自己想要專

【git學習】在CenterOS系統上安裝GitLab並定義域名訪問GitLab管理頁面

目前就職的公司一直使用SVN作為版本管理,現在打算嘗試從SVN遷移到Git。安排我來預言並搭建好相關的環境以及自己嘗試使用Git。今天我就嘗試在Center OS系統上安裝GitLab,現在在此記錄一下整個安裝過程。 第一步 檢視GitLab的官方

Ecshop二次開發:如何建立一個定義頁面(一)

今天自己本機用wampserver搭建了一個環境,然後下載了Ecshop官方(UTF-8)最新版本,然後進行熟悉。 進入後臺簡單的操作了一下,想自己寫一個php頁面,並在模版中調用出來值。 第一步:在根目錄新建了一個test.php頁面。並寫上如下程式碼: 不過百度了一下

微信公眾號建立定義選單(公眾號跳轉小程式功能)

使用JAVA後端去自定義建立選單,微信公眾號開發文件中提供了API: 建立選單中有一些要注意的地方: 1、自定義選單最多包括3個一級選單,每個一級選單最多包含5個二級選單。 2、一級選單最多4個漢字,二級選單最多7個漢字,多出來的部分將會以“...”代替。 3、建

微信小程式 —— 解決定義彈窗出現後,蒙層下的頁面仍可以滾動的問題

在微信小程式開發中,會碰到自定義彈窗出現後,蒙層下面的頁面仍可以滾動的問題。 例如: 解決方法: 1. 先點擊出現蒙層時,頁面的最外層view:height:100vh (靈活設定,

如何建立WordPress定義頁面

隨著使用WordPress的時間越長,就越感覺WordPress的強大!只需要通過簡單的設定就能用WordPress打造出不一樣的頁面!具體方法網路上分享有很多,現在我也把我所使用的方法分享給大家,希望對大家有所幫助!WordPress自定義頁面(以本站的綜合資訊類部落格頁面

博客園定義頁面風格設計

修改 request avi 博客園 特效 背景音樂 clas 頁面 com 轉:http://www.cnblogs.com/ECJTUACM-873284962/p/7628894.html#_nav_0 Angel_Kitty的原創博文 ①擁有自己的CSS代碼②修改鼠

nginx 404重定向到定義頁面

有效 大小 配置 targe 應該 enable stc utl 介紹 在訪問時遇到上面這樣的404錯誤頁面,我想99%(未經調查,估計數據)的用戶會把頁面關掉,用戶就這樣悄悄的流失了。如果此時能有一個漂亮的頁面能夠引導用戶去他想去的地方必然可以留住用戶。因此,每一個網站都

Confluence 6 跟蹤你安裝中的定義修改

info base erp tracker gen resolved ext 問題: url 在 Confluence 中的系統信息(System Information)部分,有一個 修改(Modification)的選項。在這個選項中列出了自你 Confluence 安

結構化程式定義函數

var int ons 定義 smart break 運行時間 行號 運行 Script1.註解 %2.%% run section3.debug---breakpoint   command window:K>>4.smart index---快速改排版5.F

博客園設置定義頁面樣式

控制 lte 浮動 title 樣式 padding 搜索 border add 首先是背景圖片,這個修改對模版而言都是通用的 body { background:url(‘URL‘) no-repeat top center fixed;} 這裏圖片路徑可以上傳到博

Ubuntu18.04安裝Nautilus-actions定義文件管理器鼠標右鍵列表

啟動 添加 -a 文件管理 應用 ons 8.0 自定義文件 -c sudo add-apt-repository ppa:daniel-marynicz/filemanager-actions #需要添加源 sudo apt-get install filemana

微信小程式--15定義元件

關於自定義元件有兩個知識點需要說一下: 1.子元件向父元件傳引數 在子元件內部,這樣觸發事件,傳遞引數 在父元件內部這樣接收引數 2. 父元件向子元件傳引數 在父元件這裡定義一個now-in 在子元件這裡引入 這樣的話,nowIn就相當於data裡

duilib建立定義控制元件

我之前也寫過一片封裝xml為一個容器的文章,只是寫的很隨意,僅僅貼出了一個demo的地址。 在群裡還有一些剛剛接觸duilib的朋友們問到duilib自定義控制元件的問題,這裡我轉載一篇redrain大佬的博文。主要是這篇文章寫的太好了,我們直接參考理解就好,我寫的肯定沒這個好。原文地址:htt

在.net桌面程式定義滑鼠游標

原文: 在.net桌面程式中自定義滑鼠游標 有的時候,一個自定義的滑鼠游標能給你的程式增色不少。本文這裡介紹一下如何在.net桌面程式中自定義滑鼠游標。由於.net的桌面程式分為WinForm和WPF兩種,這裡分別介紹一下。 WinForm程式 對於WinForm程式,可以通過修改Control.Cu

使用U盤安裝 CentOS 7,定義分割槽

準備材料: 1.U盤(至少8G); 2.最新版UItraISO(試用版也可以); 3.CentOS 7 光碟映象;      CentOS7的映象檔案下載地址1:http://mirrors.163.com/centos/7.1.1503/isos/x8