![]() |
Schleife unterbrechen (break)
Hi,
ich möchte gern eine schleife per Tastatureingabe unterbrechen.
Delphi-Quellcode:
Habe es auch mit (Button1)KeyPress probiert.a:Boolean; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); Var b,c:Integer; begin For b:=0 to 20000 do //sleep(50); If a=true then break else c:=b; label1.Caption:=inttostr(c); end; procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin If Key=VK_RETURN then a:=true; end; procedure TForm1.FormCreate(Sender: TObject); begin a:=false; end; Mfg Thomas |
Re: Schleife unterbrechen (break)
Delphi-Quellcode:
Application.ProcessMessages;
|
Re: Schleife unterbrechen (break)
Oder einen Thread verwenden.
|
Re: Schleife unterbrechen (break)
So müsste es eigentlich funktionieren:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var b,c:Integer; begin For b:=0 to 20000 do //sleep(50); if getasynckeystate(VK_RETURN)<>0 then break else c:=b; label1.Caption:=inttostr(c); end; |
Re: Schleife unterbrechen (break)
Hallo und Danke erstmal an alle!
@freak4fun Habe im obigen (Post1) Code probiert es in der (1)Schleife bzw in der (2) If-Anw. einzufuegen, jedoch ohne Erfolg. Alternativ habe ich noch folgendes probiert:
Delphi-Quellcode:
leider auch ohne Erfolg.
Variante2
procedure TForm1.Button1Click(Sender: TObject); Var b,c:Integer; begin For b:=0 to 20000 do begin Application.ProcessMessages; if application.Terminated then begin // showmessage(inttostr(b)); break; end else begin sleep(50); c:=b; end; end; label1.Caption:=inttostr(b); end; procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin If Key=VK_RETURN then application.Terminate; end; @DeddyH Habe noch nie mit Threads gearbeitet, werde es mir mal anschauen (jedoch erst in den Ferien :stupid: ) @fui-tak Danke für die Prozedur, kannte ich vorher noch nicht. Deine gepostete Version ging bei mir leider auch nicht. Ich habe als Rückgabewert einen int64 (uint64))bekommen, also keinen Wert aus dem intervall 0-20001. Allerdings so ging es dann:
Delphi-Quellcode:
Mfg thomas
procedure TForm1.Button1Click(Sender: TObject);
Var b,c:Integer; begin For b:=0 to 20000 do begin application.processmessages; if getasynckeystate(VK_RETURN)<>0 then break else begin c:=b; sleep(50); end; end; label1.Caption:=inttostr(c); end; |
Re: Schleife unterbrechen (break)
Noch ein Tipp:
Überpüfe einen Boolean nicht auf = True. In deinem Fall also:
Delphi-Quellcode:
if a then
|
Re: Schleife unterbrechen (break)
Hi Forlan und vielen Dank,
dachte das ist nur eine unnötige Abfrage mehr, habe es aber mal nach gelesen. Allerdings hilft mir dass auch nicht wirklich bei einer lauffaehigen Variante mit den Buttondown bzw press Ereignis. Bin das We erstmal nicht da aber poste am Mo nochmal meine Ergebnisse. Mfg thomas |
Re: Schleife unterbrechen (break)
Ich denke, dass es an deinem Sleep liegt, damit hälst du dein ganzes Programm an und es kann auch keine Tastendrücke mehr abfangen. So funktioniert es bei mir hervorragend:
Delphi-Quellcode:
procedure TForm2.Button3Click(Sender: TObject);
var b: Integer; begin aus := false; ProgressBar1.Max := 200000; for b := 0 to 200000 do begin Application.ProcessMessages; if aus then break; //tue hier sonst die normale schleife ProgressBar1.Position := b; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz