本文轉載自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250917
事件函式(1)
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; |
和你所預料的一樣,本段程式碼將會導致Cancel按鈕失效,即逼迫使用者完成安裝或者採用非正常方式終止安裝程式。
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); begin Confirm:=false; end; |
而上面的這段程式碼將會在使用者點選Cancel按鈕之後直接退出,不需要做進一步的確認。
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; |
該段程式碼將會導致每出現一個新的一面的時候就會彈出一個訊息框。
(待續)