我使用Inno安装程序创建了一个设置,在设置过程中,我做了一些长时间的操作来检查系统上的某些值(注册表项,某些文件......),在此期间没有向用户显示任何界面,I在InitializeSetup函数中完成所有这些。
我想知道的是,如果我在进行所有这些检查时可以更改鼠标指针,那么用户就知道发生了什么事情。
我想我可以创建一个dll,并从inno中调用更改光标的dll中的函数,但是我不想创建一个单独的dll,如果有一种方法只是使用pascal,我就会徘徊脚本。
感谢您的帮助。
答案 0 :(得分:5)
取自: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);
答案 1 :(得分:4)
在InnoSetup的最新版本中可能会发生一些变化,但我无法从Mirtheil那里得到答案。
相反,我想出了这个:
html
设置沙漏光标:
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);
希望这有助于某人!
答案 2 :(得分:2)
结合@mirtheil和@Sirp的答案中的好部分,这是imo的最佳解决方案:
procedure SetControlCursor(Control: TControl; Cursor: TCursor);
var
I: Integer;
begin
Control.Cursor := Cursor;
if Control is TWinControl then
begin
for I := 0 to TWinControl(Control).ControlCount - 1 do
begin
SetControlCursor(TWinControl(Control).Controls[I], Cursor);
end;
end;
end;
设置沙漏光标:
SetControlCursor(WizardForm, crHourGlass);
重置默认光标:
SetControlCursor(WizardForm, crDefault);