2016-06-12 73 views
1

我想用Inno Setup製作一個簡單的安裝腳本。如何在安裝啓動時加載自定義的.cur.ani光標文件?謝謝。如何在Inno安裝程序中設置自定義.cur或.ani光標?

UPDATE:更改標準光標代碼與.cur文件,但動畫光標文件(.ani)沒有動畫運作良好時,安裝程​​序開始。有沒有解決方案?謝謝。

+0

請檢查這個[URL](http://stackoverflow.com/help)它將有助於提升您的內容質量 –

+0

我的腳本已經準備就緒。我只想加載自定義光標,我找不到解決方案。 –

回答

1

取決於您想要更改的遊標。你可能想要改變一些標準的遊標。或者某些(或全部)安裝程序窗口控件的默認(正常)光標。


更改標準光標

你很難改變這些只能安裝過程中,不使用一些外部DLL庫。

只有Inno Setup本身,您可以更改系統遊標。但是,這將影響所有其他應用程序,而安裝程序正在運行。

[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 '[email protected] 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; 
+1

一切工作正常,但「_Remember原始custom_」函數獲取「_Unknown標識符:LoadCursor_」錯誤。所以,我添加了這個代碼並解決了問題。 '函數LoadCursor(hInstance:LongWord; lpCursorName:LongWord):LongWord;外部'[email protected] stdcall';' 非常感謝Martin。祝您有美好的一天。 –

+0

對不起,我已經添加到我的答案。 –

+0

沒問題:)再次感謝:) –

相關問題