Entwickler-Ecke
Sonstiges (Delphi) - Verzögerung mit Timer?
GR-Thunderstorm - Di 09.05.06 20:02
Titel: Verzögerung mit Timer?
Ich will in eine Schleife eine Verzögerung einbauen. Die Schleife dient dem Zweck, ein Bild zu bewegen.
Der Teil mit der Schleife zur Bewegung sieht soweit so aus:
for i:= 1 to 10 do
begin
image1.left:=image1.left+1;
end;
Wie bekomm ich es hin, dass Delphi eine kurze Zeit wartet, bevor es i weiter erhöht und das Bild somit weiterbewegt?
Wieso funktioniert der aus Pascal bekannte befehl delay(100); nicht in Delphi?
Narses - Di 09.05.06 20:09
Moin und :welcome: im Forum!
Du kannst vermutlich besser mit GetTickCount arbeiten, einfach das Wort eingeben und F1 drücken. ;)
Ansonsten: die Suchfunktion
DELAY SLEEP
cu
Narses
fidionael - Di 09.05.06 20:09
Delay gibt es nicht mehr auf Grund des nun etablierten Multi-Tasking :-)
Das Äquivalent ist
starsurfer - Di 09.05.06 20:10
dafür gibt es jetzt sleep(100).
Davon ist aber abzuraten weil das Programm dann einfriert, nehm lieber:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Timer1Timer(Sender: TObject); begin image1.left:=image1.left+1; end; |
Gausi - Di 09.05.06 20:47
Um auf den Titel des Threads zurückzukommen: Es geht auch mit nem Timer. Ins OnTimer.Event kommt dann:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| if Timer1.Tag = 10 then Timer1.enabled := false; image1.left:=image1.left+1; Timer1.Tag := Timer1.Tag + 1; |
Gestartet wird das dann z.B. mit
Delphi-Quelltext
1: 2: 3: 4:
| timer1. Tag := 0; timer1.enabled := True; |
GR-Thunderstorm - Di 09.05.06 21:59
Das sieht ziemlich kompliziert aus... :?!?:
Das Problem ist, ich habe 4 verschiedene Schleifen. Ums auch für euch übersichtlich zu halten schreib ich die wichtigsten Punkte mal auf:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| begin
if key = 'd' then begin for i:=1 to 10 do begin image1.left:=image1.left+1; end; end;
if key = 'a' then begin for i:=1 to 10 do begin image1.left:=image1.left-1; end; end;
if key = 'w' then begin for i:=1 to 10 do begin image1.top:=image1.top-1; end; end;
if key = 's' then begin for i:=1 to 10 do begin image1.top:=image1.top+1; end; end;
end; |
Ich möchte nicht, dass sich mein Bild so ruckhaft immer gleich um 10 Pixel verschiebt, es soll ganz geschmeidig in 10-Pixel-Abständen über den Bildschirm gleiten...
Moderiert von
Gausi: I- durch Delphi-Tags ersetzt. Um es noch ein bißchen übersichtlicher zu machen ;-)
fidionael - Di 09.05.06 22:32
Ich sehe jetzt allerdings nicht so richtig dein Problem dabei - du kannst es doch immer noch alles in eine Timer-Prozedur stecken und wenn du je Timer-Aufruf um 1px verschiebst, bei einem Interval von ca 20-30ms sollte eine flüssige Animation entstehen.
Mfg
GR-Thunderstorm - Mi 10.05.06 11:51
Ich hab das ganze jetzt ohne Timer hinbekommen.
Trotzdem danke an euch! :)
DaKirsche - Mi 10.05.06 12:35
Mit Timer :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Tag := Timer1.Tag +1; if (Timer1.Tag = 10) then begin Image1.Left := Image1.Left -1; Timer1.Tag := 0; end; end; |
Ohne Timer :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.Button1Click(Sender: TObject); var Ticker : integer; begin Form1.DoubleBuffered := True; repeat Ticker := 0; Image1.Left := Image1.Left -1; repeat Ticker := Ticker + 1; sleep(10); Application.Processmessages; until (Ticker > 2); Application.Processmessages; until (Image1.Left <= 5); end; |
Moderiert von
raziel: Delphi-Tags hinzugefügt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!