我使用Inno安裝程序創建了一個安裝程序,在安裝過程中,我做了一些長時間的操作來檢查系統上的某些值(註冊表項,某些文件...),並且在那段時間沒有界面顯示給用戶,所有這些都在InitializeSetup函數裏面。如何更改Inno安裝程序中的鼠標光標?
我想知道的是,如果我在進行所有這些檢查時可以更改鼠標指針,那麼用戶就知道發生了某些事情。
我想我可以創建一個dll並從inno調用dll中改變光標的函數,但我不想做一個單獨的dll,如果有一種方法只是使用pascal腳本。
感謝您的幫助。
我使用Inno安裝程序創建了一個安裝程序,在安裝過程中,我做了一些長時間的操作來檢查系統上的某些值(註冊表項,某些文件...),並且在那段時間沒有界面顯示給用戶,所有這些都在InitializeSetup函數裏面。如何更改Inno安裝程序中的鼠標光標?
我想知道的是,如果我在進行所有這些檢查時可以更改鼠標指針,那麼用戶就知道發生了某些事情。
我想我可以創建一個dll並從inno調用dll中改變光標的函數,但我不想做一個單獨的dll,如果有一種方法只是使用pascal腳本。
感謝您的幫助。
來自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);
也許一些在最新版本的改變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);
希望這可以幫助別人!
謝謝你,代碼的作用就像一個魅力,只是一個簡單的說明,你不能在InitializeSetup中使用它,因爲它會給出一個錯誤:「試圖在創建之前訪問WizardForm」在我的情況下,我只需將我的代碼移動到InitializeWizard並解決了問題。 – Vic 2010-08-13 23:33:23