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

Vic*_*Vic 3 mouse installer inno-setup

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

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

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

谢谢您的帮助.

mir*_*eil 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}
Run Code Online (Sandbox Code Playgroud)

并将其设置为沙漏:

SetControlCursor(WizardForm, crHourGlass);
Run Code Online (Sandbox Code Playgroud)

要将其恢复正常:

SetControlCursor(WizardForm, crDefault);
Run Code Online (Sandbox Code Playgroud)

  • 从 Inno Setup 6.0.5 开始,这确实不再起作用。该代码看起来像“TWinControl(control.Controls[i])”,过去用作“control.Controls[i] as TWinControl”。但事实并非如此。因此,即使控件不是 TWinControl,“(NOT(wc = nil))”也始终为 true。我发布了[更正的答案](/sf/ask/243666741/#63735867)。 (2认同)

小智 5

也许在最新版本的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;
Run Code Online (Sandbox Code Playgroud)

设置沙漏光标:

SetControlCursor(WizardForm, crHourGlass);    
Run Code Online (Sandbox Code Playgroud)

重置沙漏光标:

SetControlCursor(WizardForm, crDefault);  
Run Code Online (Sandbox Code Playgroud)

希望这对某人有帮助!