| Autor |
Beitrag |
klezmor
      
Beiträge: 558
delphi 6 personal delphi 2005 personal
|
Verfasst: Sa 26.03.05 14:31
Kann mir mal jemand erklären wie die timerkomponente funktioniert, ich dachte der Timer führt in bestimmten, einstellbaren Intervallen einen von mir eingebenen Anweisungsblock durch doch das stimmt wohl nicht ganz oder?
Ich habe das in die Timerkomponente geschrieben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Timer1Timer(Sender: TObject); var mittelpunktx,mittelpunkty:integer; i:integer; begin
shape1.Brush.color:=clred; mittelpunktx:=shape1.left+(shape1.width div 2); mittelpunkty:=shape1.top+ (shape1.height div 2); canvas.moveto(mittelpunktx,mittelpunkty); canvas.lineto(mittelpunktx,shape1.top); end; |
Jetzt hatte ich eigentlich erwartet das die Linie und das rote shape geleichzeitig
erscheinen, stattdessen aber erscheint nach 1 sekunde das rotgefärbte shape und nach einer weitern die Linie wiese?
müssten nich erst alle anweisungen ausgeführt werden und dann wartet der timer eine Sekunde?
Danke im voraus.
Moderiert von Tino: Topic aus Multimedia / Spiele / Grafik verschoben am So 27.03.2005 um 21:44
|
|
Jailbird
      
Beiträge: 127
Windows XP Pro SP2
Delphi 7 Professional
|
Verfasst: Sa 26.03.05 14:55
probiers mal so
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Timer1Timer(Sender: TObject); var mittelpunktx,mittelpunkty:integer; i:integer; begin Timer1.Enabled := False; shape1.Brush.color:=clred; mittelpunktx:=shape1.left+(shape1.width div 2); mittelpunkty:=shape1.top+ (shape1.height div 2); canvas.moveto(mittelpunktx,mittelpunkty); canvas.lineto(mittelpunktx,shape1.top); Timer1.Enabled := True; end; |
|
|
klezmor 
      
Beiträge: 558
delphi 6 personal delphi 2005 personal
|
Verfasst: Sa 26.03.05 15:02
geht leider auch nicht, habe echt keinen blassen schimmer wieso der timer nicht alle anweisungen abarbeitet bevor er sein intervall durchzählt?
Oder normal ist es doch so?
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Sa 26.03.05 15:10
Das liegt daran, dass du auf das Canvas von Form1 zeichnest, und Shape liegt drüber. Wenn du Shape1.Repaint; vor dem Zeichnen der Linie ausführst, geht's. Aber: Du solltest ausserhalb des OnPaint-Ereignisses nie direkt auf das Form Canvas zeichnen! (Sonst ist das gezeichnete weg, sobald es von einem anderen Fenster überdeckt wird)
|
|
klezmor 
      
Beiträge: 558
delphi 6 personal delphi 2005 personal
|
Verfasst: Sa 26.03.05 15:21
Vielen Dank jetzt klappt es 
|
|
klezmor 
      
Beiträge: 558
delphi 6 personal delphi 2005 personal
|
Verfasst: Sa 26.03.05 16:23
Nehmen wir mal an mein timer läuft und es tritt irgend ein ereignis, daraufhin soll mein timer der ja immer noch läuft zum anfang des anweisungsblock springen, also praktisch von vorne wieder anfangen weiß jemand wie das geht?
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Sa 26.03.05 16:35
Du meinst, wenn während der Sekunde einer auf einen Button klickt?
Delphi-Quelltext 1: 2: 3:
| begin Timer1Timer(Self); end; |
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Sa 26.03.05 17:27
Kennst du die for, repeat, while Schleifen?
|
|
klezmor 
      
Beiträge: 558
delphi 6 personal delphi 2005 personal
|
Verfasst: So 27.03.05 17:12
Ja klar es geht mir nicht um das eintreffen des ereignis, sondern darum, dass sobald das ereignis eintritt der Timer seinen Anweisungsblock von vorne wieder ausführt.
|
|
klezmor 
      
Beiträge: 558
delphi 6 personal delphi 2005 personal
|
Verfasst: So 03.07.05 14:22
Dass ich wenn ich etwas zeichnen will, dies ins onpaint ereignis schreiben muss, das ist mir mittlerweile klar, aber wie schaffe ich es, dass etwas gezeichnet wird, wenn ich z.B. einen Button drücke, dann muss ich den Anweisungsblock ja ins Buttonereignis schreiben und die anweisung steht nicht mehr im onpaint ereignis.
|
|
Dargor
      
Beiträge: 59
Win2k SP4, WinXP Pro SP1
D6 Pers
|
Verfasst: Mo 04.07.05 07:01
Dann schreibst du in das OnClick-Ereignis des Buttons das, was GTA-Place gepostet hat - natürlich nur das Timer1Timer ohne Parameter.
|
|