Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi problem mit Timer (https://www.delphipraxis.net/127164-problem-mit-timer.html)

Arrayuser 8. Jan 2009 17:52


problem mit Timer
 
Hallo, ich experementiere etwa mit med Timer, hab aber kleine probleme:

Ich möchte das eine kugel(ellipse) auf einer image mit hilfe des timers bewegt, ich habs mir überlegt das diese kugel jede sekunde um 50 pixel weiter bewegt, dazu hab ich einen code:

procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Edit1.Text:=Timetostr(time);
form1.Timer1.Enabled:=true;
form1.Timer1.OnTimer:=button1click;
timer1.Tag:=4;
with image1.Canvas do
begin
pen.Color:=clred;
brush.Color:=clred;
ellipse(5*timer1.Tag,5,45*timer1.Tag,45);

end;
end;

es wird zur zeit ein großer oval gezeichnet.

ich weiß das da etwas mit dem tag gemacht werden muss, diese ist bei mir aber statisch, ich möchte das dieser sich mit jeder sekunde verändert.

Hilfe bitte

BloodySmartie 8. Jan 2009 17:59

Re: problem mit Timer
 
Dein onTimer-Event ruft ja die ButtonClick-Methode auf. Dort sagst Du aber bei jedem Aufruf

Delphi-Quellcode:
timer1.Tag:=4;
Dieser Wert bleibt also immer gleich und kann sich damit gar nicht verändern.

Lagere am besten erstmal die Ereignisbehandlung für onTimer woanders hin aus und versuch' es dort mit so etwas wie
Delphi-Quellcode:
timer1.tag:=timer1.tag+1;

jfheins 8. Jan 2009 18:03

Re: problem mit Timer
 
Du solltest das ganze etwas aufsplitten, etwa so:

Zuerst brauchst du etwas, was deine Ellipse beschreibt. z.B. eine Variable des Typs TRect. Diese definiert das Rechteck in dem die Ellipse drin ist, also Größe und Position.

Dann nimmst du statt dem Image eine Paintbox (das Image ist eigentlich dazu gedacht, ein Bild statisch darzustellen.)

Dann musst du in der Paintbox ein im OnPaint Ereignis die Ellipse zeichnen. (Iirc hat Canvas direkt eine Methode, um eine Ellipse in einem Rechteck zu zeichnen)

In der Timer-Routine kannst du dann einfach die Ellipsen-Variable verändern und Paintbox1.Refresh; aufrufen ;)

Arrayuser 8. Jan 2009 18:28

Re: problem mit Timer
 
ich möchte image benutzen da ich es kenne, was anderes möchte erstmal nicht nagfangen, es geht ja alles im image.

und ich möchte das sich der tag jede sekunde ändert,dabei kan ich doch nicht aus der button prozedur raus!?

das sol ja so aussehen das sich der timer so ändert : 1 ->2 ->3 ->4 ->3 ->2 ->1 ->2 usw. in einer unedlichschleife.

SirThornberry 8. Jan 2009 19:10

Re: problem mit Timer
 
Könntest du dem Beitrag bitte einen aussagekräftigeren Titel geben der das Problem annähernd beschreibt? :-)
Zudem möchte ich dich bitten im ersten Beitrag die Delphitags zu setzen. Den Beitrag kannst du ändern in dem du auf
http://www.delphipraxis.net/template.../icon_edit.gif über dem Beitrag klickst :-D

Arrayuser 8. Jan 2009 19:48

Re: problem mit Timer
 
OK habs gelöst!
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
form1.Timer1.Enabled:=true;
timer1.Tag:=timer1.Tag+1;
edit2.Text:=inttostr(timer1.Tag);
Edit1.Text:=Timetostr(time);
with image1.Canvas do
begin
pen.Color:=clred;
brush.Color:=clred;
ellipse(timer1.Tag*50-5,5,timer1.Tag*50-45,45);
end;
end;
nun habe ich das problem wie ich das zählmechanismus einbauen kann, das von 1 bis 4 und zurück zählt!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:33 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