![]() |
Animation über TImageList
Hallo
Ich schlage mich hier gerade wie in dem anderem Thread beschrieben mit einer Animation von Bildern aus einer Imagelist. In der Imagelist habe ich 0-7 also 8 *.bmp von 12x12 pixeln Größe jeweils und möchte diese an einer am besten dynamischen Stelle eines Images (hier: Image1 bzw test) anzeigen, um dort eine Animation vorzutäuschen. Ich bin auf die Idee gekommen, das vielleicht über einen Timer zu steuern, damit man auch wirklich etwas von der Animation mitbekommt und die Frameverzögerung leicht einstellen kann.
Delphi-Quellcode:
Jetzt zählt er richtig, dennoch wird garkein Bild mehr angezeigt o.O
procedure TForm1.b_testClick(Sender: TObject);
begin functions.func.clean ( test , clWhite ); // Bild weiß füllen p := 0; // Globale zählvariable auf 0 animate.Enabled := true; // Timer enablen end; procedure TForm1.animateTimer(Sender: TObject); begin // 0,0 sind die Zielkoordinaten l_test.Caption := 'Frame: ' + IntToStr ( p ); imgl_1.Draw(test.Canvas, 0 , 0 , p); l_test.Caption := 'Frame: ' + IntToStr ( p ); Inc(p); if p > imgl_1.Count then begin p:=0; sleep ( 1000 ); animate.Enabled := false; end; end; Wie kann ich das ändern? Wäre echt toll, wenn mir einer von euch helfen würde! kroete |
Re: Animation über TImageList
Liste der Anhänge anzeigen (Anzahl: 1)
Du musst das Image Refreshen. Füg mal ein test.Refresh; oder alternativ ein test.Repaint; nach dem Malen ein.
Ich hab das ganze auch mal ausgecodet. Kleine Testapp ist im Anhang inkl. Source. Die Testapp iteriert durch alle Bilder einer Imagelist und zeigt alle 100ms ein anderes Bildchen an. Ist keine Animation, aber naja. Das Prinzip wirst eh sehen ;). |
Re: Animation über TImageList
Besten Dank, wido.
Ich hab das jetzt folgendermaßen gemacht: Ich hab mir ein _neues_ Bild erstellt, 12x12 px, welches von der Animation betroffen ist. "f_ship.anim" Wenn ich animieren will (schießen um genau zu sein), muss ich nun erstmal die x und y-koordinaten angeben, wohin die animation gehen soll und dann den timer anmachen. Da es wie gesagt um Schiffeversenken geht, wird danach in diesem Feld angezeigt ob es Wasser, oder eben ein getroffenes Schiff ist. Da der Timer aber "nebenbei" läuft, sieht das doof aus, da mitten in der Animation die Wasser bzw. Getroffen-grafik gemalt wird (also kreis oder kreuz). Wie kann ich eben das _nachdem_ der Timer durchgelaufen ist machen? --------------------------------------- Erledigt - für die, dies interessiert: Einfach das, was danach kommen soll im Timer aufrufen! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz