如何在Inno设置中更改鼠标光标?

时间:2010-08-13 21:59:04

标签: installer mouse inno-setup

我使用Inno安装程序创建了一个设置,在设置过程中,我做了一些长时间的操作来检查系统上的某些值(注册表项,某些文件......),在此期间没有向用户显示任何界面,I在InitializeSetup函数中完成所有这些。

我想知道的是,如果我在进行所有这些检查时可以更改鼠标指针,那么用户就知道发生了什么事情。

我想我可以创建一个dll,并从inno中调用更改光标的dll中的函数,但是我不想创建一个单独的dll,如果有一种方法只是使用pascal,我就会徘徊脚本。

感谢您的帮助。

3 个答案:

答案 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);