Autor Beitrag
Assbuild
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 04.06.06 01:25 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 733
Erhaltene Danke: 2



BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
...   //befehle die in der schleife ausgeführt werden sollen, ohne das while am anfang
If (bedingung zum beenden der schleife) Then timer.Enabled:= False;

end;
Hack Gott
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 409

Windows Vista
Delphi 2005 Personal, Delphi 7
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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:

ausblenden 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

    {Rechnungen und Zeichnungen:}
 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;
{hier soll jetzt kurz gewartet werden bevor es weiter geht}
end;


 end;


Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: 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:
ausblenden 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); //100 milisekunden
end;

//edit wtf ..... ah .. geht doch .. oO

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Balmung der blaue Gott
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 52

WinXP

BeitragVerfasst: So 04.06.06 13:18 
Hi,

Also so müsste es zumindest mit sleep erstmal hinhauen.
Aber ein Timer wär besser..

ausblenden 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

    {Rechnungen und Zeichnungen:}
    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); // sollte eigentlich gehen

  end;

end.
Assbuild Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 04.06.06 13:20 
Habs dochnoch selbst rausbekommen mit dem Timer...danke für die Tipps
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 52

WinXP

BeitragVerfasst: So 04.06.06 13:22 
user profile iconJayEff 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.