AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Abbrechen einer Schleife mit Button

Abbrechen einer Schleife mit Button

Ein Thema von raena · begonnen am 15. Jul 2008 · letzter Beitrag vom 15. Jul 2008
Antwort Antwort
Seite 2 von 2     12
raena

Registriert seit: 30. Dez 2007
124 Beiträge
 
#11

Re: Abbrechen einer Schleife mit Button

  Alt 15. Jul 2008, 10:56
ja schon, aber wenn die Schleife läuft reagiert der Button gar nicht
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#12

Re: Abbrechen einer Schleife mit Button

  Alt 15. Jul 2008, 10:58
Zitat von raena:
ja schon, aber wenn die Schleife läuft reagiert der Button gar nicht
Hast Du das so umgesetzt, wie ich geschrieben habe?
Dann sollte der Button reagieren, da sorgt ProcessMessages dafür.

Oder anderst gefragt:
Was machst Du denn genau in der Schleife?
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.753 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Abbrechen einer Schleife mit Button

  Alt 15. Jul 2008, 11:00
Ist doch ganz einfach. Aus allen Antworten mal die einfachste heraussuchen und schon bekommt man
Delphi-Quellcode:
procedure TForm1.b_startClick(Sender: TObject);
begin
repeat
sleep (200);
Application.ProcesMessages;
If KnopfGedrueckt then
  Exit;
until 1=0;
end;
Und noch fix für den Knopf was gemacht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender:TObject);
begin
  KnopfGedrueckt := True;
end;
Edit: Das ist bei weitem nicht die schönste, sicherste, eleganteste Lösung des Problems, aber ein Anfang (und vielleicht auch Ende dieses Threads ).

Sherlock
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: Abbrechen einer Schleife mit Button

  Alt 15. Jul 2008, 11:08
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.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
raena

Registriert seit: 30. Dez 2007
124 Beiträge
 
#15

Re: Abbrechen einer Schleife mit Button

  Alt 15. Jul 2008, 11:20
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.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#16

Re: Abbrechen einer Schleife mit Button

  Alt 15. Jul 2008, 11:27
Zitat von raena:
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.
Ich schreib mir den Wolf und nichts wird daraus gelernt

Natürlich musst Du die "Stop-Variable" auch irgendwann zurücksetzen.
Am Besten in ButtonStart.

Versuch es doch bitte Wenigstens mal mit meiner Version.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
raena

Registriert seit: 30. Dez 2007
124 Beiträge
 
#17

Re: Abbrechen einer Schleife mit Button

  Alt 15. Jul 2008, 11:33
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

Danke Raena.

Close.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 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