Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi schleife unterbrechech und fortsetzen? (https://www.delphipraxis.net/60270-schleife-unterbrechech-und-fortsetzen.html)

xe0n 4. Jan 2006 18:48


schleife unterbrechech und fortsetzen?
 
Hi @ all

gibt es eine möglichkeit eine Schleife anzuhalten (ja klar das geht wäre ja schlimm wenn nicht :roll:)
aber wie kann ich dann die schleife dann weiterlaufen lassen von genau dem punkt an wo die stehengeblieben ist :?:

Delphi-Quellcode:
procedure delay(MILLISEC:integer;edit2,edit3,edit4:tedit);
var
Tick:Dword;
x,a:integer;
b:extended;
begin
edit1.text:=inttostr(GetTickCount);
MILLISEC:=strtoint(edit2.text);
Tick := GetTickCount + DWord(Millisec);
while (Millisec > 0) do begin
 Application.ProcessMessages;
       Millisec := Tick - GetTickcount;
       b:=millisec;
       b:=b/1000;
       b:= RoundTo(b,-0);
       edit3.text:=floattostr(b);
       a:=strtoint(edit4.text);
       if a = 0 then break;
end;
end;
so hier mal schnell nen code damit es etwas anschaulicher wird.
Ich möchte die schleife stoppen und wieder fortsetzen.
das break bricht leider die komplette schleife /procedure ab

hoffentlcih hat jemand ne Idee würde mich freuen
thx im vorraus

mfg Xe0n

3_of_8 4. Jan 2006 18:55

Re: schleife unterbrechech und fortsetzen?
 
Ich denke mal, du kannst eine Schleife höchstens pausieren.

Dazu einfach folgendes in der Schleife aufrufen:

Delphi-Quellcode:
if condition1 then
repeat Application.ProcessMessages; until condition2;
Wenn condition1 wahr ist, wird die Pause gestartet. Sobald condition2 wahr ist, wird die Schleife fortgesetzt.

tomsel 4. Jan 2006 18:58

Re: schleife unterbrechech und fortsetzen?
 
Du willst das Delay in Abhängigkeit von der Eingabe in Edit4 quasi "aussetzen" oder weiterlaufen lassen, ist das richtig? Dann prüfe die "Anhalte"-Bedingung doch in einer inneren Schleife, in der ein Application.ProcessMessages jedoch nicht fehlen sollte.

-----

O.K. - zu spät...

xe0n 4. Jan 2006 19:00

Re: schleife unterbrechech und fortsetzen?
 
@ tomsel jop genau :-D

und wie bau ich das oben ein ?

Delphi-Quellcode:
       a:=strtoint(edit4.text);
       if a = 0 then break;
das müsste ich ja ersetzen

Delphi-Quellcode:
if a=0 then
repeat Application.ProcessMessages; until a<>0;
iss das so korrekt ???

mfg Xe0n

3_of_8 4. Jan 2006 19:01

Re: schleife unterbrechech und fortsetzen?
 
Genau. Aber a:=strtoint(edit4.text); würde ich vorher schon noch aufrufen.

tommie-lie 4. Jan 2006 19:02

Re: schleife unterbrechech und fortsetzen?
 
Zitat:

Zitat von xe0n
gibt es eine möglichkeit eine Schleife anzuhalten (ja klar das geht wäre ja schlimm wenn nicht :roll:)
aber wie kann ich dann die schleife dann weiterlaufen lassen von genau dem punkt an wo die stehengeblieben ist :?:

Innerhalb der Schleife gesteuert?
Sleep().
Von außen gesteuert aber innerhalb der Anwendung?
In einer Single-Thread-Anwendung gar nicht. Die Schleife in einen zweiten Thread auslagern und mit geeigneten Techniken (SuspendThread() (wenn du weißt, was du tust), WaitFor*Object*()) unterbrechen.
Von außerhalb der Anwendung gesteuert?
WaitFor*Object*()

Alle genannten Funktionen findest du im Platform SDK, das auch Teil des MSDN ist.


Je nachdem, was du machen willst, sind CriticalSections ebenfalls eine Möglichkeit, einen Thread daran zu hindern, Code auszuführen, bis jemand anderes die CriticalSection wieder freigibt.

3_of_8 4. Jan 2006 19:03

Re: schleife unterbrechech und fortsetzen?
 
Sleep würde ich nicht machen. Dann wird nämlich der ganze Prozess ausgesetzt und man kann auch die Eingabe im Edit nicht mehr ändern.

xe0n 4. Jan 2006 19:09

Re: schleife unterbrechech und fortsetzen?
 
@ tommie-lie

das klinkt viel zu kompliziert ich glaube es gibt noch ne einfachere methode

so ungefähr richtig ??

Delphi-Quellcode:
if a=0 then
repeat Application.ProcessMessages; until begin
a:=strtoint(edit4.text); a<>0 end;

tomsel 4. Jan 2006 19:14

Re: schleife unterbrechech und fortsetzen?
 
Delphi-Quellcode:
if a=0 then
repeat Application.ProcessMessages; until begin
a:=strtoint(edit4.text); a<>0 end;
Nee, jetzt hakt's.

Guckst du hier:

Delphi-Quellcode:
procedure delay(MILLISEC:integer;edit2,edit3,edit4:tedit);
var
Tick:Dword;
x,a:integer;
b:extended;
begin
edit1.text:=inttostr(GetTickCount);
MILLISEC:=strtoint(edit2.text);
Tick := GetTickCount + DWord(Millisec);
while (Millisec > 0) do begin
Application.ProcessMessages;
       Millisec := Tick - GetTickcount;
       b:=millisec;
       b:=b/1000;
       b:= RoundTo(b,-0);
       edit3.text:=floattostr(b);
       a:=strtoint(edit4.text);
       while a <> 0 do begin
         Application.ProcessMessages;
         a:=strtoint(edit4.text);
       end;
end;
end;

xe0n 4. Jan 2006 19:17

Re: schleife unterbrechech und fortsetzen?
 
ne also das hackt bei dirjetzt aber auch sry

hmmm wenn ich jetzt das prog starte fängt der nich an zu zählen wenn ich das edit4 aud 0 änder zählt der zb 10sec runter mach dann nicht weiter wenn ich auf 1 änder zählt er auch net bleibt dann sozud´sagen hängen

:( :( :(

Delphi-Quellcode:
       if a = 0 then
       repeat Application.ProcessMessages until strtoint(edit4.text)<>0 ;
so hab mal das probiert funzt auch soweit aber wenn ich stop drücke läuft der sche** timer noch
der zählt die sec trotzdem weiter runter was sich nicht sogut macht

koennte das problem zu beheben sein wenn ich ttimer := disable ??


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:48 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz