Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Funktion von User abbrechen lassen (https://www.delphipraxis.net/124021-funktion-von-user-abbrechen-lassen.html)

Zioone 13. Nov 2008 08:27


Funktion von User abbrechen lassen
 
Hallo,
ich hab da eine Funktion die da recht lange dauern kann.
Also möchte ich das der User diese ggf. abbrechen kann.

Also ich zeige ein "Abbrechen-Button" an, alles andere wird deaktiviert.

Über "Application.ProcessMessages;" geht er jetzt auch in die "ButtonClick"-Funktion rein.
Nur leider weiß ich jetzt nicht, wie ich aus der "ButtonClick" funktion jetzt ein komplett andere Funktion abbrechen kann. :?:
Mit Exit, beende ich ja nur die "buttonClick" Funktion :roll:

Schon bisschen rumprobiert aber irgendwie nichts gefunden was dies macht.

Über Hilfe wäre ich dankbar :)

freak4fun 13. Nov 2008 08:28

Re: Funktion von User abbrechen lassen
 
Du könntest eine boolsche Variable anlegen. Die du in deiner abzubrechenden Fkt. abfragst und in deiner ButtonClick-Proz. setzt. ;)

Zioone 13. Nov 2008 09:23

Re: Funktion von User abbrechen lassen
 
ah ok ;)
wäre zu einfach gewesen *gg*

Aber nun hab ich ein Problem, er geht jetzt in die Funktion rein und Überprüft ob die Variable gesetzt ist, wenn ja dann hab ich "Exit". Das Funktioniert auch, aber trotzdem macht er den rest weiter, weil er ja schon mal in der Funktion war und dort dann die "Prüfung" bestanden wurde :cry:

taaktaak 13. Nov 2008 09:25

Re: Funktion von User abbrechen lassen
 
Dann zeige mal ein bisschen Code,
sonst stochern wir im Nebel...

Zioone 13. Nov 2008 09:33

Re: Funktion von User abbrechen lassen
 
hm k^^

FOriginal:=Stringlist
Delphi-Quellcode:
procedure TfrmLogView.btnabortClick(Sender: TObject);
var
  abort: boolean;
begin
  abort:=true;
  Time_search(FOriginal,abort);
end;

procedure TfrmLogView.Time_search(FOriginal: TStringlist;abort: boolean);
var
  i, j, ii,i2,i3: Integer;
  vs: string;
  b: boolean;
begin
 
 if abort=true then
    exit;
  cbo_date.Clear;
  cbo_date.Text:='--- Datum wählen ---';
  ii:=-1;

  TrackBar1.Max:=rtfLines.Lines.Count;
  TrackBar1.Enabled:=true;
  tlbfind.Enabled:=true;
  tlbSave.Enabled := true;

  //--mach noch mehr

  ProgressBar1.Position:=ProgressBar1.Max;
  ProgressBar1.Position:=0;
  btnabort.Visible:=false;
end;
also wie gesagt das
if abort=true then
exit;
macht er ja, wenn ich das weglassen würde, würde er die Time_search ja 2mal ausführen

turboPASCAL 13. Nov 2008 09:39

Re: Funktion von User abbrechen lassen
 
Entweder habe ich Tomatos auf den Augen oder ich sehe nichts was einer Schleife oder Ähnlichem
gleich kommt was eine längere Zeit zum bearbeiten braucht.

Da kann man eigentlich auch nichts abbrechen.

:gruebel:

taaktaak 13. Nov 2008 09:39

Re: Funktion von User abbrechen lassen
 
Hmm, wo/wie wird Time_Search aufgerufen?

Aber generell war es wohl etwas anders gedacht:
Delphi-Quellcode:
private
  FTimeSearchAbort : Boolean
end;

//..

procedure TfrmLogView.btnabortClick(Sender: TObject);
begin
  FTimeSearchAbort:=true
end;


// vor Aufruf von TimeSearch (wo?) FTimeSearchAbort:= false setzen

procedure TfrmLogView.Time_search(FOriginal: TStringlist);
begin

 // hier an geeigneter Stelle z.B. Schleife o.Ä.
 // auf FTimeSearchAbort reagieren

end;

nahpets 13. Nov 2008 09:43

Re: Funktion von User abbrechen lassen
 
Hallo,

was machst Du da?

Du schreibst doch, dass Du eine laufende Funktion über einen Button abbrechen lassen willst.
Beim Klick auf den Button rufst Du die Funktion aber ein zweites Mal auf, wo sie natürlich sofort abgebrochen wird, die bereits laufende Funktion bekommt davon natürlich nichts mit.

Du brauchst eine "globale" Variabel abort, die Du im Buttonklickereignis auf True setzt und dort, wo Dein Kommentar steht "//--mach noch mehr " musst Du eine geeignete Stelle suchen, an der Du aus der Funktion, wenn abort = true ist, mit Exit aussteigen kannst.
Z. B. Sowas in der Form:
Delphi-Quellcode:
while not Table.Eof do begin
  // hier lesen oder schreiben wir.
  Table.Next;
  If abort then exit;
  Application.ProcessMessages;
end;
PS: TurboPascal und Taaktaak waren schneller als ich :wink:

Zioone 13. Nov 2008 09:46

Re: Funktion von User abbrechen lassen
 
wahh.
Da hat ich wohl Denkfehler :oops:

Geht jetzt, danke :hello:


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