// 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;
|