Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Schleife anhalten (https://www.delphipraxis.net/97816-schleife-anhalten.html)

FordPerfekt 16. Aug 2007 19:21


Schleife anhalten
 
Hallo,

Ich arbeite gerade an einem Programm, welches Bilder auf einen Server per FTP(mit INDY-Komponenten) hochläd!

Leider schaffe ich es nicht, eine "Abbruch"-Funktion einzubauen, weil dann immer eine Fehlermeldung kommt!

Da das Programm egtl. nur ich selbst benutze, wollte ich es so lösen:

Immer 3 Bilder hochladen
Dann nach fragen ob weiter gemacht werden soll oder nicht
Dann weiter machen oder nicht :?

Hier der Code:
Delphi-Quellcode:
procedure upl;
var
i,co:integer;
begin
i:=0;
co:=0;
uploadfrage:=1; //UPLFR: 1=Ja 2=Nein(=Abort) 3=Immer Ja

for i:= 0 to Listbox1.Items.count - 1 do
  begin
    if co=3 then
      begin
        uploadfrage:=5; // uploadfrage <> 1 o. 3 => Stop!
        logform.Memo1.Lines.Add(timetostr(now)+': Performing abort request');
        groupbox1.Show;

        case uploadfrage of
         1: begin
              co:=0;
              uploadfrage:=1;
            end;
         2: idftp1.Disconnect();
         3: begin
              co:=4;
              uploadfrage:=3;
            end;
         4: idftp1.Disconnect();
     end;
//bilder werden nacheinander durchgegangen und dann hochgeladen... Logfile wird mit daten gefüttert
if (uploadfrage=1) or (uploadfrage=3) then
   begin
     status_lbl.Caption:='Uploading '+inttostr(i+1)+' of '+inttostr(listbox1.Items.Count);  logform.Memo1.Lines.Add('Uploading '+extractfilename(listbox1.Items[i]));
     idftp1.Put(listbox1.Items[i],ExtractFileName(listbox1.Items[i]),false);
     urlform.Memo1.Lines.Add(remoteurl+ExtractFileName(listbox1.Items[i]));
     logform.Memo1.Lines.Add(timetostr(now)+': Added URL:'+ remoteurl+ExtractFileName(listbox1.Items[i]));
     inc(co);
     end;
  end;
end;
Es wird gefragt, ob der Upload fortgesetzt werden soll, dabei bedeutet 1=Ja 2=Nein 3=immer Ja(also alle einfach).
Nur wenn er mir die Frage stellt läd er einfach weiter hoch ohne zu stoppen!

Wo ist der Fehler?

mfg
Ford

mkinzler 16. Aug 2007 19:23

Re: Schleife anhalten
 
Ich würde die Schleife von der For in eine While-Schleife mit entsprechender Bedingung umbauen.

SirThornberry 16. Aug 2007 19:25

Re: Schleife anhalten
 
ich würde es so machen:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    fCancel: Boolean;
[...]
procedure TForm1.BtnCancelClick(Sender: TObject);
begin
  fCancel := True;
end;

procedure TForm1.BtnUploadClick(Sender: TObject);
var
  lCount : Integer;
begin
  lCount := 0;
  fCancel := False;
  while (lCount < Listbox1.Items.Count) and not(fCancel) do
  begin
    Application.ProcessMessages();
    //Datei auf FTP hochladen
    Application.ProcessMessages();
    inc(lCount);
  end;
end;

FordPerfekt 17. Aug 2007 12:31

Re: Schleife anhalten
 
Super Danke!
An die Möglichkeit habe ich noch gar nicht gedacht!

mfg
Ford!


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