Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Ausgang aus repeat..until-Schleife (https://www.delphipraxis.net/53774-ausgang-aus-repeat-until-schleife.html)

Pelzini 22. Sep 2005 08:16


Ausgang aus repeat..until-Schleife
 
Hallo,

gibt es eine (einfache) Möglichkeit, aus einer "repeat..until Bedingung=true"-Struktur in einer Prozedur auszusteigen, wenn Bedingung=true außerhalb der Struktur gesetzt werden soll, z.B. durch Klicken eines Buttons? Das ist vielleicht eine primitive Frage, aber ich habe schon 5 dicke Delphi-Bücher gewälzt, ohne dazu etwas zu finden. Ich stelle mit vor, dass innerhalb der Schleife irgendwie der Status eines "Stopp"-Buttons abgefragt werden müsste.

Pelzini

leddl 22. Sep 2005 08:20

Re: Ausgang aus repeat..until-Schleife
 
In so einem Fall bleibt dir kaum etwas anderes übrig, als eine globale Variable zu belegen und in der Schleife abzufragen. Evtl. solltest du in der Schleife Application.Processmessages aufrufen, damit du überhaupt in der Lage bist, einen Button zu drücken.

Phoenix 22. Sep 2005 08:29

Re: Ausgang aus repeat..until-Schleife
 
Erm.

Ich weiss nicht genau worauf Du hinaus willst. Aber schaun wer mal:

1.) Jede Schleife lässt sich durch ein break abbrechen.

2.) Du musst die Schleife nicht unterbrechen, wenn Du einen Status abfragen willst. Beispiel:

Du brauchst ein Formular, 2 Buttons (einmal btnStart und einmal btnStop) und ein Label (lblZahl).
In der Schleife wird eine Zahl hochgezählt und durch den btnStopClick beendet.


Delphi-Quellcode:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    lblZahl: TLabel;
    btnStop: TButton;
    btnStart: TButton;
    procedure btnStartClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
  private
    ButtonPressed: Boolean;
    counter: integer;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
begin
  Buttonpressed := false;
  counter := 0;
end;

procedure TForm3.btnStopClick(Sender: TObject);
begin
  Buttonpressed := true;
end;

procedure TForm3.btnStartClick(Sender: TObject);
begin
  repeat
    if counter > 2147483646 then counter := 0;
    counter := counter + 1;
    lblZahl.Caption := IntToStr(counter);
    Application.ProcessMessages; // der hier ist wichtig
  until buttonpressed;

  buttonpressed := false;
end;

end.
Edit: Man sollte ein Delphi-Startag nicht mit /code beenden :-/

Pelzini 22. Sep 2005 08:47

Re: Ausgang aus repeat..until-Schleife
 
Vielen Dank, dein Code (Phoenix) hilft mir schon weiter. Ich glaube ich hab's begriffen.

Pelzini


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:31 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