// Der folgende Code erlaubt das Auslesen der einzelnen Fasen eines
// animierten Cursors
(*.ani). Es wird pro Fase ein Bitmap erzeugt.
// Das ist zwar zum Anzeigen
(siehe Beispielaufruf) nicht unbedingt
// nötig, bildet aber die Grundlage, um die Einzelbilder im weiteren
// Verlauf eines Programmes immer wieder verwenden zu können.
// Der Eifachheit halber wird davon Ausgegangen, dass der Cursor die
// Abmaße 32x32 Pixel besitzt.

// Getestet mit D4 unter XP

const 
  mass = 32; 
 
var 
  bm: array of TBitmap; 
  fase: integer; 
 
procedure ExtractFasen(ani: PChar; c: TColor); 
var 
  hc: HCursor; 
begin 
  hc := LoadImage(0, ani, IMAGE_CURSOR, 
    mass, mass, LR_LOADFROMFILE or LR_SHARED); 
  if (hc = 0) or (lowercase(extractfileext(ani)) <> '.ani') 
    then 
    raise exception.create('Cursor kontte nicht geladen werden'); 
  fase := 0; 
  repeat 
    setlength(bm, fase + 1); 
    bm[fase] := TBitmap.create; 
    bm[fase].width := mass; 
    bm[fase].height := mass; 
    bm[fase].canvas.Brush.color := c; 
    bm[fase].canvas.fillrect(bm[fase].canvas.cliprect); 
    if not 
      drawiconex(bm[fase].canvas.handle, 
      0, 0, hc, mass, mass, fase, 0, DI_NORMAL) 
      then begin 
      bm[fase].free; 
      dec(fase); 
      break; 
    end; 
    inc(fase); 
  until false; 
end; 
 
// Beispielaufruf
procedure TForm1.Button4Click(Sender: TObject); 
var 
  i, abstand: integer; 
begin 
  abstand := 5; 
  ExtractFasen('C:\WINDOWS\Cursors\coin.ani', color); 
  for i := 0 to fase do 
    canvas.draw(abstand + i * (mass + abstand), abstand, bm[i]); 
  label1.caption := 'Anzahl der Fasen = ' + inttostr(fase + 1); 
  for i := 0 to fase do bm[i].free; 
  bm := nil; 
end;



Zugriffe seit 6.9.2001 auf Delphi-Ecke