Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IndyFTP Fortschritt bei Upload (https://www.delphipraxis.net/141574-indyftp-fortschritt-bei-upload.html)

meg91 11. Okt 2009 18:49


IndyFTP Fortschritt bei Upload
 
Hallo Community,
es geht um folgendes: Ich möchte eine Datei per FTP auf einen Server laden. Der einzige Lösungsansatz, welchen ich bisher zum Funktionieren überzeugen konnte, ist die Indy-Variante. Da ich leider nur eine Turbo-Delphi Version habe, bleibt es mir verwehrt die Komponenten einfach auf der Form zu platzieren.
So habe ich alles schön erstellt, nur bei der Zuweisung der Prozeduren für eine Fortschrittsanzeige scheitere ich kläglich, es gibt immer Fehlermeldungen mit Parametern, auch im Forum habe ich bislang noch keine Lösung gefunden, um non-VLC erstellten Indy-Komponenten Prozeduren zuzuweisen.
Wo liegt hier der Fehler? Der FTP-Upload an sich funktioniert, nur möchte auch gerne sehen was voran geht...

Gruß Markus

Delphi-Quellcode:
var
  indy_FTPClient: TIdFTP;

procedure Tfo_uploader.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  ProgressBar1.Position := AWorkCount;
  Application.ProcessMessages;
end;

procedure Tfo_uploader.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  ProgressBar1.Max := AWorkCountMax;
end;

procedure Tfo_uploader.IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
ProgressBar1.Position := 0;
end;

procedure Tfo_uploader.FormCreate(Sender: TObject);
begin
  indy_FTPClient := TIdFTP.Create;

  indy_FTPClient.OnStatus := IdFTP1Status;

  indy_FTPClient.OnWorkBegin := IdFTP1WorkBegin(indy_FTPClient, wmRead, 100); // es geht um diese Parameter
  indy_FTPClient.OnWorkEnd := IdFTP1WorkEnd;
  indy_FTPClient.OnWork := IdFTP1Work;
end;

jfheins 11. Okt 2009 18:55

Re: IndyFTP Fortschritt bei Upload
 
Eigentlich sollte es so funktionieren:
Delphi-Quellcode:
var
  indy_FTPClient: TIdFTP;

procedure Tfo_uploader.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  ProgressBar1.Position := AWorkCount;
  Application.ProcessMessages;
end;

procedure Tfo_uploader.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  ProgressBar1.Max := AWorkCountMax;
end;

procedure Tfo_uploader.IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
ProgressBar1.Position := 0;
end;

procedure Tfo_uploader.FormCreate(Sender: TObject);
begin
  indy_FTPClient := TIdFTP.Create;

  indy_FTPClient.OnStatus := IdFTP1Status;

  indy_FTPClient.OnWorkBegin := IdFTP1WorkBegin; // genauso wie die anderen beiden
  indy_FTPClient.OnWorkEnd := IdFTP1WorkEnd;
  indy_FTPClient.OnWork := IdFTP1Work;
end;
Aber das hast du bestimmt schon ausprobiert und verworfen (da du die Zuweisung bei den anderen beiden ja schon so machst) - oder?

SirThornberry 11. Okt 2009 18:55

Re: IndyFTP Fortschritt bei Upload
 
Dein Fehler ist das du dort einen Funktionsaufruf hast (du übergibst Parameter). Richtig ist es jedoch wie in der Zeile darunter - einfach nur der Funktionsname (genauer gesagt Methodenanme) ohne Klammern.

meg91 11. Okt 2009 18:58

Re: IndyFTP Fortschritt bei Upload
 
hätte ich ohne Parameter keine Fehlermeldung bekommen, wäre ich ja gar nicht auf die Idee gekommen etwas hin zu schreiben...

Mit folgendem Code
Delphi-Quellcode:
  indy_FTPClient.OnStatus := IdFTP1Status;
  indy_FTPClient.OnWorkBegin := IdFTP1WorkBegin;
  indy_FTPClient.OnWorkEnd := IdFTP1WorkEnd;
  indy_FTPClient.OnWork := IdFTP1Work;
bekomme ich diese Fehlermeldung:
[Pascal Fehler] u_uploader.pas(218): E2009 Inkompatible Typen: 'Liste der Parameter ist unterschiedlich'

Der Compiler will ja anscheinend irgendwas in Klammern dahinter haben....

jfheins 11. Okt 2009 19:02

Re: IndyFTP Fortschritt bei Upload
 
Erstmal danke für die Fehlermeldung ;)

Er will keine Klammern, sondern er will eher dass die prozedur, die du zuweist auch dieselben Parameter hat wie erwartet ;)

meg91 11. Okt 2009 19:05

Re: IndyFTP Fortschritt bei Upload
 
wie würde das den konkret aussehen? Ich habe leider keine Vorstellung, was ich an dem Code verändern muss, damit da endlich mal was funktioniert...

Die Fehlermeldung bezieht sich auf folgende beiden Zeilen
Delphi-Quellcode:
  indy_FTPClient.OnWorkBegin := IdFTP1WorkBegin;
indy_FTPClient.OnWork := IdFTP1Work;

SirThornberry 11. Okt 2009 21:22

Re: IndyFTP Fortschritt bei Upload
 
Ich hab mal die Suche für dich bemüht (OnWorkBegin) und folgendes gefunden:
Delphi-Quellcode:
procedure FTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
procedure FTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer);
vorgehensweise ist übrigens folgende. Man schaut von welchem Typ das Event ist und sucht dann die Declaration davon.

Bei einem Button zum Beispiel ist das OnClick vom Typ TNotifyEvent. Und wenn man die Declaration von TNotifyEvent sucht findet man wie die Methode aussehen muss.

meg91 11. Okt 2009 21:37

Re: IndyFTP Fortschritt bei Upload
 
super vielen Dank :)
Kann es sein, dass meine Prozeduren aus einer anderen Indy-Versionen waren? Naja auf jeden Fall geht es jetzt.

Gruß Markus


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