Einzelnen Beitrag anzeigen

CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

Animierten Cursor verwenden

  Alt 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;
  Mit Zitat antworten Zitat