事件函數(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; |
該段代碼將會導致每出現一個新的一面的時候就會彈出一個消息框。
(待續)