![]() |
einfache Animation
Hallo,
ich bin noch ein Delphi Frischling:(. Ich will eine einfache Animation aus Bildern mittels Timern verwirklichen. Mittels einer Eingabe vom Nutzer soll die Anzahl der Animationsdurchläufe bestimmt werden. Dazu habe ich folgenden Quelltext geschrieben:
Delphi-Quellcode:
Mein Problem ist das die Animation nicht wirklich anspringt: Das erste Bild wird sichtbar,und bleibt auch dauerhaft sichtbar ohne das die anderen Bildern anspringen. Irgendwas muss also falsch sein... .
var
Form1: TForm1; ende,Ziel,i,a: integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Image1.Visible:=false; Image2.Visible:=false; Image3.Visible:=false; end; procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin Timer1.Enabled:=true; Timer1.Interval:=100; Ziel:=strtoint(Edit1.Text); for a:=0 to Ziel do begin Ende:=Ende+1; if Ende=Ziel then begin Timer1.Enabled:=false; end; end; procedure TForm1.Timer1Timer(Sender: TObject); var i: Integer; begin erg:=0; i:=0; inc(i); case i of 1: begin Image1.Visible := True; Image2.Visible := False; Image3.Visible := False; end; 2: begin Image1.Visible := False; Image2.Visible := True; Image3.Visible := False; end; 3: begin Image1.Visible := False; Image2.Visible := False; Image3.Visible := True; i:=0; end; end; end; initialization i := 0; end. |
AW: einfache Animation
Schau mal Du startest den Timer in Buttoncklick, nach durchlauf der Forschleife beendest Du den Timer. Ich fürchte, der hat gar keine Zeit was zumachen:wink:
Und Dein Timer setzt i immer wieder auf 0
Delphi-Quellcode:
alfold
var
Form1: TForm1; ende,Ziel,i,a: integer;//<--Bitte keine globalen Variablen implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Image1.Visible:=false; Image2.Visible:=false; Image3.Visible:=false; end; procedure TForm1.Button1Click(Sender: TObject); var i:integer;//<--Warum wenn Du i nicht benutzt begin Timer1.Enabled:=true;//<--- Strart Timer Timer1.Interval:=100; Ziel:=strtoint(Edit1.Text); for a:=0 to Ziel do begin Ende:=Ende+1; if Ende=Ziel then begin Timer1.Enabled:=false;//---Stop Timer end; end; procedure TForm1.Timer1Timer(Sender: TObject); var i: Integer; begin erg:=0; i:=0;//<-- i wird bei jedem durchlauf 0 inc(i);//ok case i of//<--- bleibt also immer 1 1: begin Image1.Visible := True; Image2.Visible := False; Image3.Visible := False; end; 2: begin Image1.Visible := False; Image2.Visible := True; Image3.Visible := False; end; 3: begin Image1.Visible := False; Image2.Visible := False; Image3.Visible := True; i:=0; end; end; end; initialization i := 0; end. |
AW: einfache Animation
Hallo,
danke für die Antwort :),ich habe mittlerweile die for-Schleife entfernt um zu schauen ob die Animation auch so funktioniert und das tut sie immer nocht nicht, liegt vielleicht an der Initialisierung? |
AW: einfache Animation
Ich habe noch mal editiert schau die kommentare.
alfold |
AW: einfache Animation
Ausserdem brauchst du einen Zähler für deine Bilder.
Diese Zählervariable sollte im Formular liegen:
Delphi-Quellcode:
TForm1 = class(TForm)
... private FBildNr : integer; ... end; procedure TForm1.Timer1Timer(Sender: TObject); begin // ein cooler Trick, wie man ohne "case" auskommt Image1.Visible := (FBildNr = 0); Image2.Visible := (FBildNr = 1); Image3.Visible := (FBildNr = 2); Inc(FBildNr); if FBildNr > 2 then FBildNr := 0; end; |
AW: einfache Animation
Ok da war ich ja richtig blöd...:pale:
Mit den Tipps hats endlich geklappt und eleganter siehts auch aus, danke euch:-D. |
AW: einfache Animation
Zitat:
alfold |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 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