2012-09-18 99 views
2

我已經創建了INNO,這需要一個自定義嚮導頁面wpInfoAfter創建嚮導頁的文件安裝到{}的應用程序文件夾後顯示。這是通過給wpInfoAfter實現的。 的問題是,它僅顯示「下一步」按鈕,沒有取消/返回按鈕,也右上方的對話框的合閘按鈕也將被禁用。我知道後退按鈕不是必需的,因爲它需要刪除已安裝的文件。反正有「取消」按鈕可以顯示嗎?取消按鈕不會顯示在Inno Setup的

+2

的按鈕是H因爲沒有什麼可以取消的。你期待它做什麼? – Deanna

+0

即使是「取消」按鈕本身也是與之相反的。點擊它完全沒有什麼,因爲@Deanna說,當你完成安裝過程時,沒有任何東西可以取消。難道你不想讓自己的按鈕取消一些安裝後處理嚮導嗎(如果你打算這麼做的話)? – TLama

+0

該向導實際上是獲取sql服務器的詳細信息,並且它看起來空白,沒有任何關閉選項,這迫使用戶輸入正確的細節前進,因爲任何錯誤的條目將不會進一步進行,他們不能離開字段爲空好。因此認爲會有一個取消按鈕。請建議。 – anand

回答

5

Cancel按鈕在安裝後階段沒有功能,因爲InnoSetup不會在安裝過程完成後執行進一步操作,需要取消操作。所以,即使您針對該事實顯示按鈕,您也會得到一個沒有任何操作的按鈕。

個人而言,我更喜歡收集需要安裝程序在安裝開始之前您的數據庫中的信息,因爲審時度勢當用戶安裝應用程序,並乾脆取消後安裝嚮導(什麼可以很容易地發生)。這樣做之前,您可以強制用戶在實際到達應用程序之前填寫所需內容。但是如果你仍然想在安裝之後做到這一點,這是一個解決方法,用於缺少取消按鈕。

作爲一種變通方法,您可以創建自己的自定義按鈕,這將是對具有相同功能的相同位置。以下是一個示例腳本,模擬取消按鈕並僅在安裝過程後鋪設的自定義頁面上顯示它。這只是一個解決辦法,因爲你至少需要解決這個問題:

  • 啓用該向導的形式(安裝階段完成後它的禁用)的收盤十字
  • 莫名其妙處理ESC快捷鍵(它調用退出提示對話框,但我卻無法找到一種方法如何解決此)

[Setup] 
AppName=My Program 
AppVersion=1.5 
DefaultDirName={pf}\My Program 

[Code] 
procedure ExitProcess(uExitCode: UINT); 
    external '[email protected] stdcall'; 

var 
    CustomPage: TWizardPage; 
    CancelButton: TNewButton; 

procedure OnCancelButtonClick(Sender: TObject); 
begin 
    // confirmation "Exit setup ?" message, if user accept, then... 
    if ExitSetupMsgBox then 
    begin 
    // stop and rollback actions you did from your after install 
    // process and kill the setup process itself 
    ExitProcess(0); 
    end; 
end; 

procedure InitializeWizard; 
begin 
    // create a custom page 
    CustomPage := CreateCustomPage(wpInfoAfter, 'Caption', 'Description'); 
    // create a cancel button, set its parent, hide it, setup the bounds 
    // and caption by the original and assign the click event 
    CancelButton := TNewButton.Create(WizardForm); 
    CancelButton.Parent := WizardForm; 
    CancelButton.Visible := False; 
    CancelButton.SetBounds(
    WizardForm.CancelButton.Left, 
    WizardForm.CancelButton.Top, 
    WizardForm.CancelButton.Width, 
    WizardForm.CancelButton.Height 
); 
    CancelButton.Caption := SetupMessage(msgButtonCancel); 
    CancelButton.OnClick := @OnCancelButtonClick; 
end; 

procedure CurPageChanged(CurPageID: Integer); 
begin 
    // show your fake Cancel button only when you're on some of your after 
    // install pages; if you have more pages use something like this 
    // CancelButton.Visible := (CurPageID >= FirstPage.ID) and 
    // (CurPageID <= LastPage.ID); 
    // if you have just one page, use the following instead 
    CancelButton.Visible := CurPageID = CustomPage.ID; 
end; 
+0

謝謝@TLama,我會檢查它並使用此代碼 – anand

+1

感謝您的答案@Tlama,但是正如我建議的,我撤銷了這個計劃,現在我更早地顯示這個頁面,並在稍後的時間點執行這個頁面。非常感謝。 – anand