2010-08-13 119 views
2

我使用Inno安裝程序創建了一個安裝程序,在安裝過程中,我做了一些長時間的操作來檢查系統上的某些值(註冊表項,某些文件...),並且在那段時間沒有界面顯示給用戶,所有這些都在InitializeSetup函數裏面。如何更改Inno安裝程序中的鼠標光標?

我想知道的是,如果我在進行所有這些檢查時可以更改鼠標指針,那麼用戶就知道發生了某些事情。

我想我可以創建一個dll並從inno調用dll中改變光標的函數,但我不想做一個單獨的dll,如果有一種方法只是使用pascal腳本。

感謝您的幫助。

回答

4

來自http://www.vincenzo.net/isxkb/index.php?title=Cursor_-_Change_the_mouse_cursor_of_WizardForm

procedure SetControlCursor(control: TWinControl; cursor: TCursor); 
var i:Integer; 
    wc: TWinControl; 
begin 
    if (not (control = nil)) then begin 
    control.Cursor := cursor; 
    try 
     for i:=0 to control.ControlCount-1 do begin 
     wc := TWinControl(control.Controls[i]); 
     if (NOT(wc = nil)) then 
      SetControlCursor(wc, cursor) 
     else 
      control.Controls[i].Cursor := cursor; 
     end; {for} 
    finally 

    end;{try} 
    end;{if} 
end;{procedure SetControlCursor} 

並將其設置爲沙漏:

SetControlCursor(WizardForm, crHourGlass); 

將它恢復到正常:

SetControlCursor(WizardForm, crDefault); 
+0

謝謝你,代碼的作用就像一個魅力,只是一個簡單的說明,你不能在InitializeSetup中使用它,因爲它會給出一個錯誤:「試圖在創建之前訪問WizardForm」在我的情況下,我只需將我的代碼移動到InitializeWizard並解決了問題。 – Vic 2010-08-13 23:33:23

4

也許一些在最新版本的改變InnoSetup,但我無法從Mirtheil得到答案。

相反,我想通了這一個:

procedure SetControlCursor(oCtrl: TControl; oCurs: TCursor); 
var 
    i  : Integer; 
    oCmp : TComponent; 
begin 
    oCtrl.Cursor := oCurs; 
    for i := 0 to oCtrl.ComponentCount-1 do 
    begin 
    oCmp := oCtrl.Components[i]; 
    if oCmp is TControl then 
    begin 
     SetControlCursor(TControl(oCmp), oCurs); 
    end; 
    end; 
end; 

設置一個沙漏光標:

SetControlCursor(WizardForm, crHourGlass);  

重置沙漏光標:

SetControlCursor(WizardForm, crDefault); 

希望這可以幫助別人!