Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
Turbo Delphi für Win32
|
Animierten Cursor verwenden
18. Feb 2006, 20:27
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;
|
|
Zitat
|