Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Schleife stoppen! (https://www.delphipraxis.net/75096-schleife-stoppen.html)

AndiS75 14. Aug 2006 12:51


Schleife stoppen!
 
Hallo zusammen,


wenn ich folgende Schleife laufen lasse

Delphi-Quellcode:

for i := 1 to 100000000000 do
begin
  Status.Panles[0].Text := ' blablabla' + IntTOStr(i) + 'blabla';
end;

friert mein Programm ein. ich möchte gerne die Schleife über einen Button stoppen können. Aber in der Zeit, in welcher die Schleife durchläuft, kann ich auf mein programm nicht zugreifen.

Gruß

Andreas

DP-Maintenance 14. Aug 2006 12:53

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Erstmal ab nach Delphi dafür^^

Phoenix 14. Aug 2006 12:55

Re: Schleife stoppen!
 
dann machst Du folgendes:

Delphi-Quellcode:
for i := 1 to 100000000000 do
begin
  Status.Panles[0].Text := ' blablabla' + IntTOStr(i) + 'blabla';
  Application.ProcessMessages();
  if (abort) then
    break;
end;
Wobei abort eine Boolean-Variable auf dem Formular ist, welche am Anfang false ist und durch den Button-Click auf true gesetzt wird.

Edit Nachtrag: Wichtig ist das Application.Processmessages, weil hierdrin dann der ButtonClick erst ausgeführt wird.
Das ganze macht die Schleife aber extrem langsam. Vllt. bietet es sich also an, diese Abfrage nach einem Abbruch z.B. nur alle 100 oder nur alle 1000 Durchläufe zu machen.

AndiS75 14. Aug 2006 13:35

Re: Schleife stoppen!
 
Bedanke mich

oldmax 14. Aug 2006 13:41

Re: Schleife stoppen!
 
Hi
Warum benutzt du nicht die Repeat oder While -Schleife. Diese sind dafür ausgelegt, auch früher abgebrochen zu werden...
Delphi-Quellcode:
.....
I:=0;                                         // i vorbesetzen
Repeat                                        // Schleife wird mindestens 1mal durchlaufen
  .....yourCode....
  Inc(i);                                     // oder anders i:=i+1;
Until (i = Zielwert) or Abbruchbedingung;     // bis hierher und nicht weiter
.....
oder die andere Variante
Delphi-Quellcode:
......
i:=0;                                          // i vorbesetzen
While (i<=Zielwert) and Not Abbruchbedingung do // Schleife kann umgangen werden
Begin                                          // da Abbruchbedingung am Anfang steht
  ........ YourCode ........
  Inc(i);                                      // oder wieder i:=i+1;
end;                                           // bis hierher und nicht weiter
......


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:05 Uhr.

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