AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Animierten Cursor verwenden

Ein Thema von CalganX · begonnen am 18. Feb 2006 · letzter Beitrag vom 19. Feb 2006
Antwort Antwort
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, 19: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
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Animierten Cursor verwenden

  Alt 18. Feb 2006, 23:53
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;
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: Animierten Cursor verwenden

  Alt 19. Feb 2006, 04:50
Die interessante Frage ist wie man in korrekt animiert.
Windows hat glaube ich immer noch den Fehler die ANIs nicht richtig zu animieren.
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz