Autor Beitrag
TheNeon
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: Di 06.05.03 15:38 
Salut,

eine If-Bedingung, eine While-Schleife oder eine Prozedur breche ich mit break; ab. Was aber, wenn ich einen Befehl mithilfe eines Buttons abbrechen will? Hierbei handelt es sich nicht um eine Prozedur, wo ich jedesmal eine Variable auf true oder false abfragen kann.

Gibt es so einen Befehl eine Methode abbrechen zu lassen ?

Danke
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Di 06.05.03 15:51 
werd nicht schlau draus.

was willst du denn bei einem Befehl abbrechen?

Ich geh mal davon aus, das du trotzdem ne schleife laufen hast, sonst hats irgendwie keinen sinn für mich

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
  public
    { Public-Deklarationen der Form}
    Stop:boolean;
  end;

var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ButtonStopClick(Sender: TObject);
begin
  stop:=true;
end;

procedure TForm1.ButtonstartClick(Sender: TObject);
Var I:integer;
begin
  //Geschwindigkeit mal außer acht gelassen ;)
  stop:=false;
  for i:=1 to 1000 do
    begin
      label1.Caption:=inttostr(i);
      sleep(30);
      if stop then break;
      Application.ProcessMessages;
    end;
end;


//edit daß man Proceduren mit break verlassen kann, ist mir neu. Break ist bei schliefen, Exit bei Procs.

mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
TheNeon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: Di 06.05.03 16:06 
Keldorn hat folgendes geschrieben:
werd nicht schlau draus.

was willst du denn bei einem Befehl abbrechen?

Ich geh mal davon aus, das du trotzdem ne schleife laufen hast, sonst hats irgendwie keinen sinn für mich


//edit daß man Proceduren mit break verlassen kann, ist mir neu. Break ist bei schliefen, Exit bei Procs.


ich beende meine Prozeduren immer mit break, funktioniert auch ohne Probleme
-----------------
Beispiel:
ich habe eine Function oder Methode, die eine Zahl beliebige male mit sich selbst multipliziert.
Zitat:
Label1.caption:=Multi (30); // 30 soll 30mal mit sich selbst multipliziert werden

nun möchte ich, falls der User möchte, diese Funktion ( Multi(30) ) von ihm abbrechen lassen, ohne jedoch in die Funktion einen boolean oder so reinzuschreiben. Kann ich von "außen" einen Abbruch erzwingen??
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Di 06.05.03 16:20 
Zitat:

ich beende meine Prozeduren immer mit break, funktioniert auch ohne Probleme

na dann zeig mal, wie du das machst. :roll:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Button1Click(Sender: TObject);
begin
  listbox1.items.add('1');
  break;
  listbox1.items.add('2');
end;

läßt sich gar nicht erst compilieren (d5 standard).

Zitat:

nun möchte ich, falls der User möchte, diese Funktion ( Multi(30) ) von ihm abbrechen lassen, ohne jedoch in die Funktion einen boolean oder so reinzuschreiben. Kann ich von "außen" einen Abbruch erzwingen??

Also doch irgendwo ne schleife.
ist das denn so rechenintensiv?
Ich glaub aber nicht das du das von außen abbrechen kannst. Du arbeitest dann dort in der schleife. Selbst wenn du die Sache in einen Thread verlagerst brauchst du irgendwo einen Bool-wert und ob sich dieser aufwand lohnt ....
Was gefällt dir denn an dem bool wie in meinem Beispiel nicht?

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
TheNeon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: Di 06.05.03 16:40 
ok, ok, mein Fehler ........ meinte nicht break sondern abort. :autsch:

das mit Multi(30) war nur ein Beispiel ...... würde gerne wissen, ob es möglich ist Prozeduren/Funktionen von außen "abbrechen" zu lassen.

Klar, das mit der Abfrage des boolschen Wertes ist richtig, aber ich würde es gerne anders machen ... wenn's geht :D :? :nixweiss:
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Di 06.05.03 18:54 
kurze antwort; es geht nicht. Innerhalb einer Function musst du eine Schleife haben die einen Bool-Wert abfragt und ggf. vorzeitig beendet wird. Damit diese Variable einen Wert überhaupt erhalten kann, ist Application.ProcessMessages() notwendig, damit innerhalb deines Programmes (ist auch nur ein Thread) eine beliebige Funktion diese Variable setzen kann. Allerdings sind Vorkehrungen zu treffen, dass nicht die Funktion(en) mehrfach aufgerufen werden.

Beinahe-Ausnahme: Thread. Hier mußt die die Terminated Variable abfragen und den Execute-Block verlassen,sofern diese Variable true ist.

grez.msch