You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Inno Setup向导窗口显示时更改所有控件区域内的鼠标光标

给Inno Setup向导所有控件设置自定义鼠标光标

嘿,你的递归设置控件光标的函数写得很到位!要实现这个皮肤式的自定义光标效果,关键是找对调用时机和做好光标资源的加载,我来一步步给你讲清楚:

第一步:准备自定义光标并加载

首先你得把自定义光标文件(比如custom.cur)打包到安装程序里,在脚本的[Files]段添加:

[Files]
Source: "custom.cur"; DestDir: "{tmp}"; Flags: dontcopy

然后在[Code]段里定义全局变量存储光标,并在初始化时加载:

var
  CustomCursor: TCursor;

procedure InitializeWizard();
begin
  // 从临时目录加载自定义光标
  CustomCursor := LoadCursorFromFile(ExpandConstant('{tmp}\custom.cur'));
  // 初始化时给整个向导窗口的控件设置光标
  SetControlCursor(WizardForm, CustomCursor);
end;

第二步:你的递归设置函数(直接用就行)

把你写的函数放到[Code]段里,注意要放在调用它的代码之前:

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;

第三步:处理页面切换的情况

因为Inno Setup的向导页面是动态创建的,切换页面后新页面的控件不会自动继承光标设置,所以要在页面切换事件里重新设置:

procedure CurPageChanged(CurPageID: Integer);
begin
  // 给当前活跃页面的所有控件设置光标
  SetControlCursor(WizardForm.ActivePage, CustomCursor);
end;

额外提示:处理光标释放(可选)

如果你的安装程序运行时间较长,或者需要严格管理资源,可以在安装结束时释放光标:

procedure DeinitializeSetup();
begin
  if CustomCursor <> 0 then
    DestroyCursor(CustomCursor);
end;

这样一来,当向导窗口显示且可用时,鼠标只要在界面范围内(包括所有按钮、输入框、列表等控件),就会显示你的自定义光标啦~

内容的提问来源于stack exchange,提问作者Inside Man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 12:03:16