Announcement

Collapse
No announcement yet.

nmftp-komponente

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • nmftp-komponente

    hallo,

    habe jetzt ein ftp-programm programmiert(abgeschrieben?*grins*).<br>
    tut eigentlich fast alles. weiß nur nicht wie ich mit der nmftp-komponente eine html-seite auf dem server anzeigen lassen kann. wer kann mir helfen.

    mfg

    markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    <br>hi,...
    <br>
    <br>verstehe ich nicht "...eine html-seite auf dem server anzeigen lassen kann."
    <br>willst du den verzeichnisinhalt des ftp servers lesen?
    <br>
    <br>mfg
    <br>p

    Comment


    • #3
      ja genau!! die normalen ftp-programme können das!!<br>
      da gibt es einen schalter view und exec.<br>

      mfg

      marku
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment


      • #4
        <br>Habe jetzt leider keinen Quellcode zur Hand
        <br>
        <br>Stichwort: ftpdirectorylist
        <br>Siehe Delphi Hilfe
        <br>
        <br>MfG
        <br>P

        Comment


        • #5
          okay, werde mal schauen, wenn ich vom schach wieder zurück bin!<br>

          mfg

          marku
          Herzliche Grüße

          Markus Lemcke
          barrierefreies Webdesign

          Comment


          • #6
            Hallo... ist es möglich das mit jemand von euch mal den Quelltext zukommen lässt

            [email protected] Wäre super.
            MfG
            Christia

            Comment


            • #7
              Hallo,

              Um euch mal zu schocken hier ein sehr ausführliches Beispiel, was man mit der NMFTP-Komponente so alles dummes machen kann.
              Der Quelltext wurde von mir zur genüge auf Stabilität getestet.
              Allerdings musste ich die NMFTP-Komponente selber noch ein klein wenig ändern, dass auch diese stabil lief.

              Mit dabei sind noch irgendwelche Funktionen um Lokale Dateien zu löschen (Thread), FTP-Informationen in einer Datei zu speichern und eine kleine Terminverwaltung (zeitgesteuertes Downloaden/Uploaden).

              Man sollte dazu noch Zwei Formulare entwerfen, eins für die eventuell benötigte Authentifizierung und eines für Statusanzeigen (Jeder Thread benutzt solch ein Form zu Anzeige).

              Müsst ihr euch mal das klauen was ihr braucht.

              <PRE>
              unit ThreadsFtp;

              interface

              uses Windows, Classes, SysUtils, k2files, Messages, Psock, NMFtp, Dialogs,
              Controls, FormThread, Authentication, k2dialoge, inifiles;

              var Besitzer : TComponent;

              type
              TCopyOption = (coAllOverwrite, coNoOverwrite, coRestore);
              TTransferMode = (tmAscii, tmImage, tmByte);
              TJob2Do = (jdExecute, jdDownload, jdUpload, jdDeleteRemote, jdDeleteLokal);//für Termine
              TRepeatMode = (rmIntervall, rmOnce, rmEveryDay, rmEveryWeek, rmEveryMonth, rmEveryJear);//für Termine
              TTerminStatus = (tsWaiting, tsActivated, tsDeleted, tsUnknown, tsStopped);
              TUrlType = (utFTP, utHTTP);

              type TConnectionInfo = record
              Host,UserID,
              Password,ProxyServer : string;
              Port,ProxyPort : integer;
              UseProxy : boolean;
              Firewalltyp : TFirewallType;//0 ftUser, 1 ftOpen, 2 ftSite
              Passive : boolean;
              TransferMode : TTransferMode;
              end;

              type TFtpThread = class (TThread)
              private
              formauthentication : TFAuthentication;
              public
              ftp : TNMFtp;
              form : TFThread;
              end;

              type TDownload = class (TFtpThread)
              private
              DirList, FileList, MASKE : TStringList;
              StartDir, ZielDir : string;
              CopyOption : TCopyOption;
              Transfer : TTransferMode;
              procedure OnFtpPacketRecvd(Sender : TObject);
              procedure OnFormCloseQuery(Sender : TObject; var CanClose : boolean);
              procedure OnFtpAuthentication(var Handled : boolean);
              procedure OnFtpConnectionRequired(var Handled : boolean);
              protected
              procedure Execute; override;
              procedure DownloadFile(Quellverz, Quelle, Zielverz, Ziel: string);
              procedure DownloadDirectory(Quellverz, Zielverz: string);
              public
              constructor Create(ConDat : TConnectionInfo; Dirs, Files, SourceDir, DestDir, FileMask : string; Option : TCopyOption; AutoClose : boolean);
              destructor Destroy; override;
              end;

              type TUpload = class (TFtpThread)
              private
              DirList, FileList, MASKE : TStringList;
              StartDir, ZielDir : string;
              CopyOption : TCopyOption;
              Transfer : TTransferMode;
              procedure OnFtpPacketSent(Sender : TObject);
              procedure OnFormCloseQuery(Sender : TObject; var CanClose : boolean);
              procedure OnFtpAuthentication(var Handled : boolean);
              procedure OnFtpConnectionRequired(var Handled : boolean);
              protected
              procedure Execute; override;
              procedure UploadFile(Quellverz, Quelle, Zielverz, Ziel: string; RemoteFiles, RemoteFileSizes: TStringList);
              procedure UploadDirectory(Lokalpfad, Quellverz, Zielverz: string);
              public
              constructor Create(ConDat : TConnectionInfo; Dirs, Files, SourceDir, DestDir, FileMask : string; Option : TCopyOption; AutoClose : boolean);
              destructor Destroy; override;
              end;

              type TDeleteRemote = class(TFtpThread)
              private
              DirList, FileList : TStringList;
              StartDir : string;
              procedure OnFormCloseQuery(Sender : TObject; var CanClose : boolean);
              procedure OnFtpAuthentication(var Handled : boolean);
              proce

              Comment


              • #8
                Fortsetzung...
                <PRE>
                procedure OnFtpConnectionRequired(var Handled : boolean);
                protected
                procedure Execute; override;
                procedure DeleteFile(Filename : string);
                procedure DeleteDirectory(Dirname : string);
                public
                constructor Create(ConDat : TConnectionInfo; Dirs, Files, SourceDir : string; AutoClose : boolean);
                destructor Destroy; override;
                end;

                type TDeleteLokal = class(TFtpThread)
                private
                DirList, FileList : TStringList;
                StartDir : string;
                procedure OnFormCloseQuery(Sender : TObject; var CanClose : boolean);
                protected
                procedure Execute; override;
                procedure DeleteFileX(Filename : string);
                procedure DeleteDirectoryX(Dir, Dirname : string);
                public
                constructor Create(Dirs, Files, SourceDir : string; AutoClose : boolean);
                destructor Destroy; override;
                end;

                type TSynchronize = class (TFtpThread)
                private
                DirLokal, DirRemote : string;
                procedure OnFtpAuthentication(var Handled : boolean);
                procedure OnFtpConnectionRequired(var Handled : boolean);
                protected
                procedure Execute; override;
                public
                constructor Create(ConDat : TConnectionInfo; RemoteDir, LokalDir : string);
                destructor Destroy; override;
                end;

                type TTermin = class
                Aktion : TJob2Do;//Execute, Upload, Download, DeleteLokal, DeleteRemote
                Port,ProxyPort : integer;
                Host,UserID,
                Password,ProxyServer : string;
                UseProxy, Passive : boolean;
                Directories : TStringList;
                Files : TStringList;
                SourceFolder : string;//oder Ausführen <Datei>
                DestFolder : string;//Parameter <Datei>
                FileMask : string;//*.* oder Startverzeichnis <Datei>
                Option : TCopyOption;//all, keine überschreiben, restore
                TransferMode : TTransferMode;//byte, image, ascii
                Firewall : TFirewallType;
                CDate : TDateTime;//Zeitpunkt
                CTime : TDateTime;
                Intervall : TDateTime;
                NextTime : TDateTime;//nächstes mal ausführen
                Repeating : TRepeatMode;//wie oft soll der Termin wiederholt werden
                Status : TTerminStatus;//Termin ist überfällig
                constructor Create;
                destructor Destroy; override;
                procedure SaveToStream(f : TFileStream);
                function LoadFromStream(f : TFileStream) : boolean;
                function NextActivate(Jetzt : TDateTime) : TDateTime;
                end;

                type TWebDatenFile = class
                //allgemein relevant
                Url : string;
                UrlTyp : TUrlType;
                Description : string;
                //relevant für Ftp
                Port,ProxyPort : integer;
                UserID,
                Password,
                ProxyServer,
                DirRemote,
                DirLokal : string;
                UseProxy, Passive : boolean;
                Firewall : TFirewallType;
                constructor Create;
                destructor Destroy; override;
                function GetDataAsString: string;
                function GetFieldNamesAsCSVString: string;
                function GetDataAsCSVString: string;
                procedure SaveToStream(f : TFileStream);
                procedure SaveToFtpFile(f : TFileStream);
                function LoadFromStream(f : TFileStream) : boolean;
                function LoadFromFtpFile(f : TFileStream) : boolean;
                function LoadFromFavoritenFile(filename : string) : boolean;
                end;

                implementation

                {BEGIN der zusätzlichen FUNTKIONEN}

                //Paser für die Dateimaske...
                function ParseMASKE(var mask : string) : boolean;
                var i : integer;
                begin
                result := False;
                //LZ löschen
                try
                for i := l

                Comment


                • #9
                  Fortsetzung...
                  <PRE>
                  for i := length(mask) downto 1 do begin
                  if mask[i] = ' ' then delete(mask, i, 1);
                  end;
                  except
                  Exit;
                  end;
                  if (mask = '') then Exit;
                  if pos('*.*', mask) <> 0 then mask := '*.*';
                  result := True;
                  end;

                  {ENDE der zusätzlichen FUNKTIONEN}

                  { TTermin }

                  constructor TTermin.Create;
                  begin
                  inherited;
                  Aktion := jdDownload;
                  Port := 21;
                  ProxyPort := 21;
                  Host := '';
                  UserID := '';
                  Password := '';
                  ProxyServer := '';
                  UseProxy := False;
                  Passive := False;
                  Directories := TStringList.Create;
                  Files := TStringList.Create;
                  SourceFolder := '';
                  DestFolder := '';
                  FileMask := '';
                  Option := coAllOverwrite;
                  TransferMode := tmByte;
                  Firewall := ftUser;
                  CDate := 0;
                  CTime := 0;
                  Intervall := 0;
                  NextTime := 0;
                  Repeating := rmOnce;
                  Status := tsWaiting;
                  end;

                  destructor TTermin.Destroy;
                  begin
                  Directories.Free;
                  Files.Free;
                  inherited;
                  end;

                  function TTermin.LoadFromStream(f: TFileStream): boolean;
                  var i : integer;
                  cnt : longint;
                  buf : pchar;
                  begin
                  result := False;
                  cnt := f.Read(Aktion, sizeof(Aktion));
                  if cnt <> sizeof(Aktion) then Exit;

                  f.Read(Port, sizeof(Port));
                  f.Read(ProxyPort, sizeof(ProxyPort));

                  f.Read(i, sizeof(i));
                  Host := '';
                  if i <> 0 then begin
                  buf := stralloc(i + 10);
                  f.Read(buf[0], i);
                  buf[i] := #0;
                  Host := strpas(buf);
                  strdispose(buf);
                  end;
                  f.Read(i, sizeof(i));
                  UserID := '';
                  if i <> 0 then begin
                  buf := stralloc(i + 10);
                  f.Read(buf[0], i);
                  buf[i] := #0;
                  UserID := strpas(buf);
                  strdispose(buf);
                  end;
                  f.Read(i, sizeof(i));
                  Password := '';
                  if i <> 0 then begin
                  buf := stralloc(i + 10);
                  f.Read(buf[0], i);
                  buf[i] := #0;
                  Password := strpas(buf);
                  strdispose(buf);
                  end;
                  f.Read(i, sizeof(i));
                  ProxyServer := '';
                  if i <> 0 then begin
                  buf := stralloc(i + 10);
                  f.Read(buf[0], i);
                  buf[i] := #0;
                  ProxyServer := strpas(buf);
                  strdispose(buf);
                  end;

                  f.Read(UseProxy, sizeof(UseProxy));
                  f.Read(Passive, sizeof(Passive));

                  f.Read(i, sizeof(i));
                  SourceFolder := '';
                  if i <> 0 then begin
                  buf := stralloc(i + 10);
                  f.Read(buf[0], i);
                  buf[i] := #0;
                  SourceFolder := strpas(buf);
                  strdispose(buf);
                  end;
                  f.Read(i, sizeof(i));
                  DestFolder := '';
                  if i <> 0 then begin
                  buf := stralloc(i + 10);
                  f.Read(buf[0], i);
                  buf[i] := #0;
                  DestFolder := strpas(buf);
                  strdispose(buf);
                  end;
                  f.Read(i, sizeof(i));
                  FileMask := '';
                  if i <> 0 then begin
                  buf := stralloc(i + 10);
                  f.Read(buf[0], i);
                  buf[i] := #0;
                  FileMask := strpas(buf);
                  strdispose(buf);
                  end;

                  f.Read(Option, sizeof(Option));
                  f.Read(TransferMode, sizeof(TransferMode));
                  f.Read(Firewall, sizeof(Firewall));
                  f.Read(CDate, sizeof(CDate));
                  f.Read(CTime, sizeof(CTime));
                  f.Read(Intervall, sizeof(Intervall));
                  f.Read(NextTime, sizeof(NextTime));
                  f.Read(Repeating, sizeof(Repeating));
                  f.Read(Status, sizeof(Status));

                  f.Read(i, sizeof(i));
                  Directories.CommaText := '';
                  if i <> 0 then begin
                  buf := stralloc(i + 10);
                  f.Read(buf[0], i);
                  buf[i] := #0;
                  Directories.CommaText := strpas(buf);
                  strdispose(buf);
                  end;
                  f.Read(i, sizeof(i));
                  Files.CommaText := '';
                  if i <> 0 then begin
                  buf := stralloc(i + 10);
                  f.Read(buf[0], i);
                  buf[i] := #0;
                  Files.CommaText := strpas(buf);
                  strdispose(buf);
                  end;

                  CDate := int(CDate);
                  CTime := frac(CTime);
                  Intervall := frac(Intervall);

                  result := True;
                  end;

                  procedure TTermin.SaveToStream(f: TFileStream);
                  var i : integer;
                  begin
                  f.Write(Aktion, sizeof(Aktion));
                  f.Write(Port, sizeof(Port));
                  f.Write(ProxyPort, sizeof(ProxyPort));

                  i := length(Host);

                  Comment


                  • #10
                    Hier ein BSP für Download-Thread (rekursiv)

                    <PRE>type TFtpThread = class (TThread)
                    private
                    formauthentication : TFAuthentication;
                    public
                    ftp : TNMFtp;
                    form : TFThread;
                    end;

                    type TDownload = class (TFtpThread)
                    private
                    DirList, FileList, MASKE : TStringList;
                    StartDir, ZielDir : string;
                    CopyOption : TCopyOption;
                    Transfer : TTransferMode;
                    procedure OnFtpPacketRecvd(Sender : TObject);
                    procedure OnFormCloseQuery(Sender : TObject; var CanClose : boolean);
                    procedure OnFtpAuthentication(var Handled : boolean);
                    procedure OnFtpConnectionRequired(var Handled : boolean);
                    protected
                    procedure Execute; override;
                    procedure DownloadFile(Quellverz, Quelle, Zielverz, Ziel: string);
                    procedure DownloadDirectory(Quellverz, Zielverz: string);
                    public
                    constructor Create(ConDat : TConnectionInfo; Dirs, Files, SourceDir, DestDir, FileMask : string; Option : TCopyOption; AutoClose : boolean);
                    destructor Destroy; override;
                    end;

                    { TDownload }

                    destructor TDownload.Destroy;
                    begin
                    try
                    DirList.Free;
                    FileList.Free;
                    MASKE.Free;
                    ftp.Free;
                    form.Release;
                    except
                    end;
                    inherited;
                    end;

                    constructor TDownload.Create(ConDat : TConnectionInfo; Dirs, Files, SourceDir, DestDir, FileMask : string; Option : TCopyOption; AutoClose : boolean);
                    var s : string;
                    begin
                    inherited Create(True);
                    FreeOnTerminate := False;
                    form := TFThread.Create(Besitzer);
                    form.CheckBoxAutoClose.Checked := AutoClose;
                    form.Caption := 'Download';
                    form.Show;
                    ftp := TNMFtp.Create(form);
                    ftp.ParseList := True;
                    //Verbindungsdaten zuweisen...
                    ftp.TimeOut := 120000;
                    ftp.Host := ConDat.Host;
                    ftp.Port := ConDat.Port;
                    ftp.UserID := ConDat.UserID;
                    ftp.Password := ConDat.Password;
                    if ConDat.UseProxy then begin
                    ftp.Proxy := ConDat.ProxyServer;
                    ftp.ProxyPort := ConDat.ProxyPort;
                    end else begin
                    ftp.Proxy := '';
                    ftp.ProxyPort := 0;
                    end;
                    ftp.FirewallType := ConDat.Firewalltyp;
                    ftp.Passive := ConDat.Passive;
                    //Methoden zuweisen...
                    form.OnCloseQuery := OnFormCloseQuery;
                    ftp.OnAuthenticationFailed := OnFtpAuthentication;
                    ftp.OnAuthenticationNeeded := OnFtpAuthentication;
                    ftp.OnPacketRecvd := OnFtpPacketRecvd;
                    ftp.OnConnectionRequired := OnFtpConnectionRequired;

                    DirList := TStringList.Create;
                    FileList := TStringList.Create;
                    MASKE := TStringList.Create;
                    DirList.CommaText := Dirs;
                    FileList.CommaText := Files;
                    StartDir := SourceDir;
                    ZielDir := DestDir;
                    CopyOption := Option;
                    Transfer := ConDat.TransferMode;
                    s := FileMask;
                    if not ParseMASKE(s) then begin
                    form.MessageList.Items.Append('FEHLER: Dateimaske konnte nicht geparst werden');
                    Terminate;
                    end;
                    MASKE.CommaText := s;
                    end;

                    procedure TDownload.OnFtpPacketRecvd(Sender: TObject);
                    begin
                    if ftp.BytesTotal <> 0 then
                    form.PBar.Max := ftp.BytesTotal
                    else
                    form.PBar.Max := ftp.BytesRecvd;
                    form.PBar.Position := ftp.BytesRecvd;
                    end;

                    procedure TDownload.DownloadFile(Quellverz, Quelle, Zielverz, Ziel: string);
                    begin
                    if Self.Terminated then Exit;
                    if Ziel = '' then Ziel := extractfilename(Quelle);
                    if (CopyOption = coNoOverwrite) and (fileexist(completedir(Zielverz) + Ziel)) then Exit;
                    try
                    if AnsiUpperCase(Quellverz) <> AnsiUpperCase(ftp.CurrentDir) then begin
                    form.MessageList.Items.Append('ChangeDir: ' + Quellverz + '...');
                    ftp.ChangeDir(Quellverz);
                    end;
                    if (CopyOption = coRestore) then begin
                    form.MessageList.Items.Append('DownloadRestoreFile : ' + Quelle + '...');
                    ftp.DownloadRestore(Quelle, completedir(Zielverz) + Ziel);
                    end else begin
                    form.MessageList.Items.Append('Downlo

                    Comment


                    • #11
                      Fortsetzung...
                      <PRE> end else begin
                      form.MessageList.Items.Append('DownloadFile: ' + Quelle + '...');
                      ftp.Download(Quelle, completedir(Zielverz) + Ziel);
                      end;
                      except
                      on E:Exception do form.MessageList.Items.Append('FEHLER: ' + E.message);
                      end;
                      end;

                      procedure TDownload.DownloadDirectory(Quellverz, Zielverz: string);
                      var FTPList : TFTPDirectoryList;
                      DirList : TStringList;
                      OldDir : string;
                      i : integer;
                      begin
                      if Self.Terminated then Exit;
                      FTPList := TFTPDirectoryList.Create;
                      DirList := TStringList.Create;
                      try
                      form.MessageList.Items.Append('ChangeDir: ' + Quellverz + '...');
                      ftp.ChangeDir(Quellverz);
                      OldDir := ftp.CurrentDir;
                      form.MessageList.Items.Append('GetRemoteFilelist.. .');
                      ftp.List;
                      FTPList := ftp.FTPDirectoryList;
                      for i := 0 to FTPList.Name.Count - 1 do begin
                      if Self.Terminated then Exit;
                      if (FTPList.Name[i] = '..') or (FTPList.Name[i] = '.') then continue;
                      if pos('-', FTPList.Attribute[i]) = 1 then begin
                      if not (MASKE.CommaText = '*.*') then begin
                      if pos(extractfileext(FTPList.Name[i]), MASKE.CommaText) = 0 then continue;
                      end;
                      DownloadFile(OldDir, FTPList.Name[i], completedir(Zielverz) + Quellverz, FTPList.Name[i]);
                      end else begin
                      if pos('d', FTPList.Attribute[i]) = 1 then begin
                      CreateDir(completedir(completedir(Zielverz) + Quellverz) + FTPList.Name[i]);
                      DirList.Append(FTPList.Name[i]);
                      end;
                      end;
                      end;
                      for i := 0 to DirList.Count - 1 do begin
                      DownloadDirectory(DirList.Strings[i], completedir(Zielverz) + Quellverz);
                      form.MessageList.Items.Append('ChangeDir: ' + OldDir + '...');
                      ftp.ChangeDir(OldDir);
                      end;
                      except
                      on E:Exception do form.MessageList.Items.Append('FEHLER: ' + E.message);
                      end;
                      end;

                      procedure TDownload.Execute;
                      var i : integer;
                      begin
                      if Self.Terminated then Exit;
                      //Verbindung herstellen...
                      try
                      form.MessageList.Items.Append('Verbinden mit: ' + ftp.Host + '...');
                      ftp.Connect;
                      if ftp.Connected then form.MessageList.Items.Append('Verbindung mit: ' + ftp.Host + ' hergestellt');
                      except
                      on E:Exception do begin
                      form.MessageList.Items.Append('FEHLER: ' + E.message);
                      FehlerBeep;
                      Exit;
                      end;
                      end;
                      try
                      if ftp.Connected then begin
                      form.MessageList.Items.Append('Setze Transfermodus [' + inttostr(ord(Transfer)) + ']...');
                      ftp.Mode(ord(Transfer) + 1);
                      end;
                      except
                      on E:Exception do begin
                      form.MessageList.Items.Append('FEHLER: ' + E.message);
                      FehlerBeep;
                      Exit;
                      end;
                      end;
                      //Download beginnen...
                      try
                      form.MessageList.Items.Append('ChangeDir: ' + StartDir + '...');
                      ftp.ChangeDir(StartDir);
                      for i := 0 to FileList.Count - 1 do begin
                      DownloadFile(StartDir, FileList.Strings[i], ZielDir, FileList.Strings[i]);
                      end;
                      for i := 0 to DirList.Count - 1 do begin
                      if Self.Terminated then exit;
                      CreateDir(completedir(ZielDir) + DirList.Strings[i]);
                      DownloadDirectory(DirList.Strings[i], ZielDir);
                      form.MessageList.Items.Append('ChangeDir: ' + StartDir + '...');
                      ftp.ChangeDir(StartDir);
                      end;
                      except
                      on E:Exception do form.MessageList.Items.Append('FEHLER: ' + E.message);
                      end;
                      try
                      form.MessageList.Items.Append('Verbindung trennen: ' + ftp.Host + '...');
                      ftp.Disconnect;
                      if not ftp.Connected then form.MessageList.Items.Append('Verbindung mit: ' + ftp.Host + ' getrennt');
                      except
                      on E:Exception do begin
                      form.MessageList.Items.Append('FEHLER: ' + E.message);
                      Exit;
                      end;
                      end;
                      if form.CheckBoxAutoClose.Checked then begin
                      if Assigned(OnTerminate) then Synchronize(Self.DoTerminate);
                      form.Close;
                      end else begin
                      form.MessageList.Items.Append('Download beendet!');
                      form.ButtonAbort.Caption := 'S&chließen';
                      form.Butto

                      Comment


                      • #12
                        Fortsetzung...
                        <PRE> end else begin
                        form.MessageList.Items.Append('Download beendet!');
                        form.ButtonAbort.Caption := 'S&chließen';
                        form.ButtonAbort.Hint := 'Schließen';
                        end;
                        end;

                        procedure TDownload.OnFormCloseQuery(Sender: TObject; var CanClose: boolean);
                        begin
                        try
                        CanClose := True;
                        form.MessageList.Items.Append('ABBRUCH DURCH DEN BENUTZER');
                        Self.Terminate;
                        try
                        if Assigned(ftp) and ftp.Connected then ftp.Abort;
                        except
                        end;
                        finally
                        if Assigned(OnTerminate) then Synchronize(Self.DoTerminate);
                        Self.Destroy;
                        end;
                        end;

                        procedure TDownload.OnFtpAuthentication(var Handled: boolean);
                        begin
                        Handled := False;
                        formauthentication := TFAuthentication.Create(form);
                        formauthentication.LabelHost.Caption := ftp.Host;
                        formauthentication.EditUserID.Text := ftp.UserID;
                        if formauthentication.ShowModal = mrOK then begin
                        ftp.UserID := formauthentication.EditUserID.Text;
                        ftp.Password := formauthentication.EditPass.Text;
                        Handled := True;
                        end;
                        formauthentication.Free;
                        end;

                        procedure TDownload.OnFtpConnectionRequired(var Handled: boolean);
                        begin
                        if Self.Terminated then begin
                        Handled := True;
                        Exit;
                        end;
                        Handled := False;
                        try
                        ftp.Connect;
                        Handled := True;
                        except
                        end;
                        end;

                        { ENDE - TDownload }</PRE&gt

                        Comment

                        Working...
                        X