![]() |
Animierten Cursor verwenden
scp hat einen Code zusammengestellt, der es ermöglicht einen animierten Cursor (*.ani) in einer Anwendung zu verwenden. Dabei ist darauf zu achten, dass der Cursor sich als Ressource in der Anwendung befindet.
Delphi-Quellcode:
function CreateAniCursorFromResource(pBytes : pByte; dwSize : DWORD) : HCURSOR;
var fs : TFileStream; td : array[0..255] Of Char; tfn : string; begin result := 0; result := CreateIconFromResource(pBytes, dwSize, FALSE, $00030000); if (result = 0) and (PCardinal(pBytes)^ = $46464952) and // RIFF word (PCardinal(Integer(pBytes) + $08)^ = $4E4F4341) then // ACON word begin GetTempPath(255, td); Randomize; tfn := StrPas(td) + 'temp' + Format('%0:4.4x', [Random($FFFF)]) + '.ani'; fs := TFileStream.create(tfn, fmCreate); try fs.Write(pBytes^, dwSize); finally fs.Free; end; result := LoadCursorFromFile(PChar(tfn)); DeleteFile(tfn); end; end; function LoadAniCursor(hInst : Cardinal; lpID : PChar; lpType : PChar = nil) : HCURSOR; var hRes : HRSRC; dwSize : DWORD; hGlob : HGLOBAL; pBytes : PBYTE; begin result := 0; if not Assigned(lpType) then lpType := PChar('ANICURSOR'); if (Cardinal(lpID) < $10000) then hRes := FindResource(hInst, PChar('#' + IntToStr(Cardinal(lpID))), lpType) else if (StrToIntDef(StrPas(lpID), 0) <> 0) then hRes := FindResource(hInst, PChar('#' + StrPas(lpID)), lpType) else hRes := FindResource(hInst, lpID, lpType); dwSize := SizeofResource(hInst, hRes); hGlob := LoadResource(hInst, hRes); if (hGlob <> 0) then begin pBytes := PBYTE(LockResource(hGlob)); if Assigned(pBytes) then begin result := CreateAniCursorFromResource(pBytes, dwSize); end; end; end; |
Re: Animierten Cursor verwenden
Kleine Anmerkung: die komplette Funktion "CreateAniCursorFromResource" kann man sich sparen, da Icons und Cursor vom System gleich behandelt werden.
Es funktioniert also auch so:
Delphi-Quellcode:
function LoadAniCursor(hInst : Cardinal; lpID : PChar; lpType : PChar = nil) : HCURSOR;
var hRes : HRSRC; dwSize : DWORD; hGlob : HGLOBAL; pBytes : PBYTE; begin result := 0; if not Assigned(lpType) then lpType := PChar('ANICURSOR'); hRes := FindResource(hInst, lpID, lpType); if hRes <> 0 then begin dwSize := SizeofResource(hInst, hRes); hGlob := LoadResource(hInst, hRes); if hGlob <> 0 then begin pBytes := PBYTE(LockResource(hGlob)); if Assigned(pBytes) then result := CreateIconFromResource(pBytes, dwSize, false, $30000); end; end; end; |
Re: Animierten Cursor verwenden
Die interessante Frage ist wie man in korrekt animiert.
Windows hat glaube ich immer noch den Fehler die ANIs nicht richtig zu animieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz