本文介绍了如何在Inno设置中设置自定义.cur或.ani游标?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用Inno Setup创建一个简单的安装脚本。如何在启动安装程序时加载自定义.cur.ani游标文件?谢谢。

更新:更改标准游标代码可以很好地处理.cur文件,但启动安装程序时,动画游标文件(.ani)没有动画效果。对此有什么解决方案吗?谢谢。

推荐答案

取决于您要更改的游标。您可能需要更改一些标准游标。或某些(或全部)安装程序窗口控件的默认(普通)光标。


更改标准游标

如果不使用一些外部DLL库,您几乎无法仅为安装程序进程更改这些设置。

仅使用Inno设置本身,您就可以更改系统游标。但在安装程序运行时,这将影响所有其他应用程序。

[Files]
Source: "MyCursor.cur"; Flags: dontcopy

[Code]

const
  OCR_NORMAL = 32512;

function SetSystemCursor(hcur: LongWord; id: DWORD): BOOL;
  external '[email protected] stdcall';
function LoadCursorFromFile(lpFileName: string): LongWord;
  external '[email protected] stdcall';
function CopyIcon(hIcon: LongWord): LongWord;
  external '[email protected] stdcall';
function LoadCursor(hInstance: LongWord; lpCursorName: LongWord): LongWord;
    external '[email protected] stdcall';

var
  OriginalCursor: LongWord;

procedure InitializeWizard();
var
  PathToCursorFile: string;
  Cursor: LongWord;
begin
  // Remember the original custom
  OriginalCursor := CopyIcon(LoadCursor(0, OCR_NORMAL));

  // Load our cursor
  ExtractTemporaryFile('MyCursor.cur')
  PathToCursorFile := ExpandConstant('{tmp}MyCursor.cur');
  Cursor := LoadCursorFromFile(PathToCursorFile);
  SetSystemCursor(Cursor, OCR_NORMAL);
end;

procedure DeinitializeSetup();
begin
  // Restore original cursor on exit
  SetSystemCursor(OriginalCursor, OCR_NORMAL); 
end;

更改部分(或全部)安装程序窗口控件的默认(正常)光标

[Files]
Source: "MyCursor.cur"; Flags: dontcopy

[Code]

const
  GCL_HCURSOR = (-12); 

function LoadCursorFromFile(lpFileName: string): LongWord;
  external '[email protected] stdcall';
function SetClassLong(hWnd: HWND; Index, NewLong: Longint): Longint;
  external 'SetClassLongA@user32 stdcall';   

procedure InitializeWizard();
var
  PathToCursorFile: string;
  Cursor: LongWord;
begin
  ExtractTemporaryFile('MyCursor.cur')
  PathToCursorFile := ExpandConstant('{tmp}MyCursor.cur');
  Cursor := LoadCursorFromFile(PathToCursorFile);
  SetClassLong(WizardForm.NextButton.Handle, GCL_HCURSOR, Cursor); 
end;

上面的代码更改下一步按钮的光标。如果要对所有控件使用相同的自定义游标,则可以迭代控件树。

procedure SetControlsCursor(Control: TWinControl; Cursor: LongWord);
var
  I: Integer;
begin
  SetClassLong(Control.Handle, GCL_HCURSOR, Cursor); 

  for I := 0 to Control.ControlCount - 1 do
  begin
    if Control.Controls[I] is TWinControl then
    begin
      SetControlsCursor(TWinControl(Control.Controls[I]), Cursor);
    end;
  end;
end;

procedure InitializeWizard();
...
begin
  ...
  SetControlsCursor(WizardForm, Cursor);
end;

这篇关于如何在Inno设置中设置自定义.cur或.ani游标?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-25 08:21