Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - "langsame" Schleife
Assbuild - So 04.06.06 01:25
Titel: "langsame" Schleife
Guten Abend,
ich habe folgendes Problem:
In einer Whileschleife ist eine Rechnung enthalten die x/y Koordinaten ausrechnet und sie dann einzeichnet.Diese Schleife wiederholt sich bis der Graf komplett ist. Das klappt soweit alles nur möchte ich gerne, dass nach jedem eingezeichneten Punkt etwas gewartet wird, bis der nächste Punkt eingezeichnet bzw die die Schleife wiederholt wird, damit der graf langsam,fliessend entsteht.
Ich wüsste jetzt nicht wie ich ín die Schleife ne Timerprocedur hineinsetze. Gibt es da einfache befehele die sagen "warte(x)ms" oder sowas ähnliches?
Danke schonmal im Voraus, Ole
Ironwulf - So 04.06.06 02:18
öhm sleep(), müsste dir da weiter helfen
und wennd so wie ich delphi 3 hast oder eine andere version die noch kein sleep kennt dann einfach mit nem timer
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Timer1Timer(Sender: TObject); begin ... If (bedingung zum beenden der schleife) Then timer.Enabled:= False;
end; |
Hack Gott - So 04.06.06 10:38
Ich würde dir aber sehr von der sleep() Funktion abraten, weil dadurch das ganze Programm "angehalten" wird, für den normalen Windows Bentuzer dürfte das dann so aussehen als ob sich deine Anwendung aufgehängt hätte.
//EDIT: Achja, beim TImer müsst du den Interval ändern um zu bestimmen, wann es immer ausgeführt werden soll.
Assbuild - So 04.06.06 13:00
Hmm, mit Sleep geht´s schonmal nicht wirklich. Da wartet das Prog nur die Zeit ab und zeichnet danach den entstatus der Schleife (also wieder alles auf einmal. Und wie ich den Timer da genau einbau kapier ich irgendwie nicht :(
Ich Poste hier mal die Procedure in der das passieren soll:
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:
| procedure TSchusssimulation.AbschiessenClick(Sender: TObject);
begin
y:=1; x:=5; while y>0 do begin
y:=((Sin(wink)/Cos(wink))*x)-((9.81*x*x)/(2*(geschw*geschw)*(cos(wink)*cos(wink)))); yz:=round(y);
with Image1.Canvas do begin pen.Width:=1; pen.Color:=clred; brush.Color:=clred; Ellipse(x-1,249-yz-1,x+1,249-yz+1); end; x:=x+1;
end;
end; |
Moderiert von
Gausi: Delphi-Tags hinzugefügt
JayEff - So 04.06.06 13:10
Bitte benutze
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAG2c5a3a8b10e855a6935e51a326c108a8}</span></span> tags um deinen Code zu umschließen ... ^^
Zu deinem Problem: Application.ProcessMessages; dürfte helfen. Einfach ans ende der Schleife setzen und das sleep danach (oder davor.. oder sonst wo .. ^^ is im prinzip egal)
Also:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| with Image1.Canvas do begin pen.Width:=1; pen.Color:=clred; brush.Color:=clred; Ellipse(x-1,249-yz-1,x+1,249-yz+1); end; x:=x+1; Application.ProcessMessages; Sleep(100); end; |
//edit wtf ..... ah .. geht doch .. oO
Balmung der blaue Gott - So 04.06.06 13:18
Hi,
Also so müsste es zumindest mit sleep erstmal hinhauen.
Aber ein Timer wär besser..
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:
| procedure TSchusssimulation.AbschiessenClick(Sender: TObject); begin y:=1; x:=5; while y>0 do begin
y:=((Sin(wink)/Cos(wink))*x)-((9.81*x*x)/(2*(geschw*geschw)*(cos(wink)*cos(wink)))); yz:=round(y);
with Image1.Canvas do begin pen.Width:=1; pen.Color:=clred; brush.Color:=clred; Ellipse(x-1,249-yz-1,x+1,249-yz+1); end; x:=x+1; end;
sleep(100); end;
end. |
Assbuild - So 04.06.06 13:20
Habs dochnoch selbst rausbekommen mit dem Timer...danke für die Tipps
JayEff - So 04.06.06 13:20
Nope so gehts nicht, sonder so, wie ichs bereits vor 5 minuten geschrieben hatte... :/ Bei deiner version wird er immernoch die komplette Schleife abarbeiten bevor er Zeichnet.
Balmung der blaue Gott - So 04.06.06 13:22
JayEff hat folgendes geschrieben: |
| Nope so gehts nicht, sonder so, wie ichs bereits vor 5 minuten geschrieben hatte... :/ Bei deiner version wird er immernoch die komplette Schleife abarbeiten bevor er Zeichnet. |
Ja, stimmt, hab ich ganz vergessen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!