![]() |
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 :) |
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. ;)
|
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: |
Re: Funktion von User abbrechen lassen
Dann zeige mal ein bisschen Code,
sonst stochern wir im Nebel... |
Re: Funktion von User abbrechen lassen
hm k^^
FOriginal:=Stringlist
Delphi-Quellcode:
also wie gesagt das
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; if abort=true then exit; macht er ja, wenn ich das weglassen würde, würde er die Time_search ja 2mal ausführen |
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: |
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; |
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:
PS: TurboPascal und Taaktaak waren schneller als ich :wink:
while not Table.Eof do begin
// hier lesen oder schreiben wir. Table.Next; If abort then exit; Application.ProcessMessages; end; |
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 20:55 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