![]() |
idFTP-Fortschritt in eigenem Thread
Hallo zusammen,
ich schreibe an einem kleinen FTP-Client, welcher an sich auch schon gut funktioniert. Jedoch möchte ich noch den Fortschritt anzeigen lassen. Generell kein Problem, aber meine idFTP-Komponente wird zur Laufzeit erzeugt und ich weiß nicht, wie ich hier auf das onWork, onWorkbegin etc zugreifen kann. Hier mal noch der Code:
Delphi-Quellcode:
Im Voraus schonmal vielen Dank!
unit FTP_Class;
interface uses Classes, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdFTP, SysUtils; type MyFTPThread = Class(TThread) private FTP: TIdFTP; res: TStringList; Description, action: string; state: boolean; procedure updateVLC(); protected procedure Execute; override; public upload, download, clear: boolean; server, user, password: string; uploadname, downloadname: string; procedure initialize; end; implementation uses OC_F1; procedure MyFTPThread.Execute; begin res := TStringList.Create; initialize; end; procedure MyFTPThread.initialize; begin FTP := TIdFTP.Create(); FTP.Host := server; FTP.Username := user; FTP.Password := password; FTP.Connect; if FTP.Connected then begin if download then begin ... end; if upload then begin ... end; end; FTP.Free; end; procedure MyFTPThread.updateVLC(); begin Form1.updateVLC(res, Description, state, action); end; end. Admirandis |
Re: idFTP-Fortschritt in eigenem Thread
Du kannst die Methoden zur Laufzeit einfach zuweisen, sofern sie die entsprechende Signatur besitzen.
|
Re: idFTP-Fortschritt in eigenem Thread
kannst du das evtl. etwas weiter ausführen? bin nicht sooo der Held im Delphi-Programmieren!
Generell ist schon klar was du meinst, aber ich muss ja auf die Variablen aus der "originalen" Prozedur zugreifen um den Fortschritt zu bekommen. Wie komm ich an diese? EDIT: Also ich habs jetzt durch viel herumprobieren selber rausgefunden: Für alle Suchenden:
Delphi-Quellcode:
Grüße Admirandis
type MyFTPThread = Class(TThread)
private res: TStringList; Description, action: string; state: boolean; connected: boolean; max: Double; FTP: TIdFTP; procedure sync(descr: string; atend: boolean; ac: string); procedure updateVLC(); procedure FTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer); procedure FTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer); protected procedure Execute; override; public upload, download, clear, abort: boolean; server, user, password: string; uploadname, downloadname: string; procedure initialize; end; implementation uses OC_F1; procedure MyFTPThread.Execute; begin res := TStringList.Create; state := false; action := '-'; initialize; end; procedure MyFTPThread.initialize; var cnt: integer; begin sync('Sequence started'#9#9' @ ' + TimeToStr(now), false, '_'); FTP := TIdFTP.Create(); FTP.Host := server; FTP.Username := user; FTP.Password := password; FTP.OnWork := FTPWork; // <-- Zuweisung der onWork-Prozedure auf meine eigene. Die Argumente müssen gleich sein!!! FTP.OnWorkBegin := FTPWorkBegin; // <-- Dasselbe für OnWorkBegin... FTP.Connect; if FTP.Connected then begin if download then begin ... end; if upload then begin ... end; if clear then begin ... end; end; FTP.Free; end; procedure MyFTPThread.updateVLC(); begin Form1.updateVLC(res, Description, state, action); end; procedure MyFTPThread.FTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer); begin if max > 0 then begin Form1.updatePROG(AWorkCount, max); // Bei mir wird beim Download keine Maximalgröße der Datei übertragen. Deswegen setze ich bei end; // Downloads die Größe noch in der Downloadroutine mit FTP.GetSize (o.Ä.). if abort then begin FTP.Abort; download := false; upload := false; abort := false; end; end; procedure MyFTPThread.FTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer); begin if AWorkMode = wmWrite then // Wie oben beschrieben nur bei Uploads zu verwenden... max := AWorkCountMax; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 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