Registriert seit: 31. Okt 2003
1.120 Beiträge
Delphi 7 Personal
|
Re: Animirten Cursor in exe einbinden?
4. Dez 2003, 03:56
So, nach reiflicher Überlegung hab ich LoadCursorFromFile doch eingebaut:
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;
Dabei wird die Datei aber nur für ein paar Milisekunden benötigt und direkt nach dem laden des Cursors wieder gelöscht. Kann man doch mit leben, oder?
|
|
Zitat
|