本文介绍了如何在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游标?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!