![]() |
Re: Abbrechen einer Schleife mit Button
ja schon, aber wenn die Schleife läuft reagiert der Button gar nicht
:gruebel: |
Re: Abbrechen einer Schleife mit Button
Zitat:
Dann sollte der Button reagieren, da sorgt ProcessMessages dafür. Oder anderst gefragt: Was machst Du denn genau in der Schleife? |
Re: Abbrechen einer Schleife mit Button
Ist doch ganz einfach. Aus allen Antworten mal die einfachste heraussuchen und schon bekommt man
Delphi-Quellcode:
Und noch fix für den Knopf was gemacht:
procedure TForm1.b_startClick(Sender: TObject);
begin repeat sleep (200); Application.ProcesMessages; If KnopfGedrueckt then Exit; until 1=0; end;
Delphi-Quellcode:
Edit: Das ist bei weitem nicht die schönste, sicherste, eleganteste Lösung des Problems, aber ein Anfang (und vielleicht auch Ende dieses Threads ;)).
procedure TForm1.Button1Click(Sender:TObject);
begin KnopfGedrueckt := True; end; Sherlock |
Re: Abbrechen einer Schleife mit Button
Achso, jetzt hab ich's glaub ich geschnallt.
Ein Button "Start", bei dem soll die Schleife loslaufen. Ein Button "Stop", da soll die Schleife gestoppt werden. In ButtonStartClick: fAbbrechen := False; while not fAbbrechen do begin Application.ProcessMessages; MachWas; Application.ProcessMessages; MachWasAnderes; Application.ProcessMessages; end; und in ButtonStopClick: fAbbrechen := True; In der Zeit, wenn MachWas oder MachWasAnderes laufen, wird der Stop-Button eben nicht reagieren. |
Re: Abbrechen einer Schleife mit Button
Ja genau RavenIV und Sherlock, das ist das was ich mir vorstellen.
Geht prinzipiell auch mit Application.ProcesMessages, das Probelm ist jetzt nur noch, dass wenn "abbrechen" order "stop" gedrückt wurde, die Schleife nicht mehr gestartet werden kann.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) b_start: TButton; b_stop: TButton; Memo1: TMemo; procedure b_startClick(Sender: TObject); procedure ResetEscPressed; function EscPressed():Boolean; procedure b_stopClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; KnopfGedrueckt:boolean; implementation {$R *.dfm} procedure TForm1.b_startClick(Sender: TObject); var i:integer; begin i:=0; resetescpressed; repeat memo1.Text:=inttostr(i); inc(i); sleep (10); Application.ProcessMessages; until EscPressed() or KnopfGedrueckt; end; procedure TForm1.ResetEscPressed; begin GetAsyncKeyState(VK_ESCAPE); GetAsyncKeyState(VK_PAUSE); end; procedure TForm1.b_stopClick(Sender: TObject); begin KnopfGedrueckt := True; end; function TForm1.EscPressed():Boolean; begin Result := ((GetAsyncKeyState(VK_ESCAPE) and $8001) <> 0) or ((GetAsyncKeyState(VK_PAUSE) and $8001) <> 0); end; end. |
Re: Abbrechen einer Schleife mit Button
Zitat:
Natürlich musst Du die "Stop-Variable" auch irgendwann zurücksetzen. Am Besten in ButtonStart. Versuch es doch bitte Wenigstens mal mit meiner Version. :roll: |
Re: Abbrechen einer Schleife mit Button
Hallo Raven,
ja du hast Recht. Vielen Dank, so gehts. Die Sache mit dem Threat werde ich dann beim nächsten mal angehen wenn ich etwas mehr fit bin. Hab nämlich Kopfschmerzen vom :wall: Danke :hello: Raena. Close. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:35 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