Entwickler-Ecke
Sonstiges (Delphi) - delay
Peteroramer - So 19.02.06 21:06
Titel: delay
Hallo,
Wie kann ich bei Delphi 7 einen delay einsetzen? Ich komme von Pascal und versuche mir Delphi beizubringen. Darum sorry für diese teilweise dummen Fragen.
Moderiert von
Christian S.: Topic aus Delphi Tutorials verschoben am So 19.02.2006 um 20:09
Peteroramer - So 19.02.06 21:19
Mit einem delay meine ich, dass die Bewegung einer Schleife zu zeigen.
Ich schreibe ein Programm wo in bestimmten Feldern die Farbe geändert wird. Ich nahm eine for ... to ... do Schleife und stellte die Bedingung if ... then ... . So wird mir aber bei der Ausgabe nur das Endergebnis gezeigt. Um dies zu verhindert sage ich repeat ... until ... . So funktioniert es aber auch nicht richtig.
In Pascal kann man in der Schleife ein Delay setzen und dies so dem Betrachter deutlich machen. Aber in Delphi exestiert dieser Befehl scheinbar nicht.
Hilfe notwendig.
Marc. - So 19.02.06 21:24
hallo,
vllt hilft dir der befehl sleep(100); weiter
nun "schläft" dein programm für 100ms.
Wenn du diesen Befehl in eine For-Schleife einbauen würdest, müsste man eigentlich die eizelnen schritte besser sehen können.
wenn ich das jetzt richtig verstanden habe :roll:
JayEff - So 19.02.06 21:33
Sorry, aber da fehlt was.
Delphi wird die Schleife trotzdem erst durchlaufen lassen bevor du ergebnisse bekommst. Zauber-befehl hierzu:
Irgentwo Application.ProcessMessages; einfügen.
Peteroramer - So 19.02.06 21:34
Ich will das so machen, dass man zuerst die Fläche rot sieht, dann gelb, dann schwarz. Und das immer wider.
JayEff - So 19.02.06 21:37
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| for i:=0 to 100 do begin case (i mod 3) of 0:Panel1.Color:=clRed; 1:Panel1.Color:=clYellow; 2:Panel1.Color:=clBlack; end; Application.ProcessMessages; sleep(50); end; |
GTA-Place - So 19.02.06 21:38
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| for X := 1 to 1000 do begin Y := GetTickCount; while GetTickCount - Y < 1000 do Application.ProcessMessages; end; |
Marc. - So 19.02.06 21:40
ich persönlich hätte es mit einem Timer gemacht :roll:
JayEff - So 19.02.06 21:40
Das is ne gute möglichkeit, den Befehl Sleep(n) zu ersetzen... Sleep friert die komplette Anwendung ein. da ist GTA-Place's methode besser.
edit: Timer dagegen sind ungenau. Vorallem in Bereichen von unter 50 ms kommt meist ein viel zu großer delay bei raus. Ausserdem sind sie Ressourcenfresser, darüber gabs schonmal ne Diskussion in nem anderen Thread ^^
Marc. - So 19.02.06 21:47
ja, diesen thread hatte ich gelesen :lol:
Peteroramer hat folgendes geschrieben: |
Ich will das so machen, dass man zuerst die Fläche rot sieht, dann gelb, dann schwarz. Und das immer wider. |
Ich dachte mir, dass der Timer als eine art endlos-schleife besser funktionieren würde.
Natürlich kann man auch endlos-schleifen mit einer while-schleife erreichen :roll:
JayEff - So 19.02.06 21:50
yop. gleicher Aufwand, nur optimiert wäre eine Whileschleife da. Allllllerdings sollte man das vielleicht in nen Thread auslager äääääähm aber damit kenn ich mich 0 aus... Nimm nen TTimer unter System. -.-
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!