Hallihallo,
nach einiger Abstinenz und zwischenzeitlicher Umsattelung von Delphi7 auf Delphi2005 will ich nun versuchen mein schon länger einstaubendes
FTP-Client-Projekt in der neuen Entwicklungsumgebung nochmal anzugehen und weiter zu bringen.
Die noch fehlenden Packages für irgendwelche Komponenten sind alle nachinstalliert, die Indies sind auch alle da, die Grundvoraussetzungen für einen ersten Build-Versuch sind gelegt.
Aus lauter Jux und Dollerei habe ich vor ein paar Monaten mal versucht, Dateitransfers über Threads zu erledigen, um mal zu schauen wie das wohl läuft wenn man mehrere Dateien gleichzeitig transportiert. So habe ich dann eine TThread-erbende Klasse erzeugt, die u.a. eine idFTP-Instanz besitzt. Damit sie "über ihren Status" bzw den des Transfers bescheid weiß, gibt es in ihr Prozeduren die die
Indy-Ereignisse OnWork, OnWorkBegin, OnWorkEnd und OnAfterClientLogin behandeln sollen.
Im Execute des Threads (ob das nun richtig oder falsch ist, sei mal dahingestellt) erzeuge ich dann halt eine idFTP-Instanz und weise sie der Variable FidFTP zu. Danach setze ich bei FidFTP die für mich wichtigen Werte und weise den vier oben erwähnten Events meine vier enstprechenden Prozeduren zu.
Diese sind so deklariert:
Delphi-Quellcode:
procedure Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
procedure WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
procedure WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
procedure LoggedOn(Sender: TObject);
Die Zuweisungen sehen dann so aus:
Delphi-Quellcode:
self.FidFTP.OnWork:= self.Work; //Dies ist eine Markierung
self.FidFTP.OnWorkBegin:= self.WorkBegin; //und direkt noch eine
self.FidFTP.OnWorkEnd:= self.WorkEnd;
self.FidFTP.OnAfterClientLogin:= self.LoggedOn;
Unter D7 hat das ganz vorzüglich kompiliert und lief auch - jedenfalls der Teil mit den Zuweisungen. Beim Buildversuch unter D2k5 kriege ich allerdings für die im obigen Codeblock markierten Zeilen jeweils diese Fehlermeldung:
Zitat von
Delphi-Compiler:
E2009 Inkompatible Typen: 'Liste der Parameter ist unterschiedlich'
Jetzt hatte ich schon den Verdacht, dass die bei den Indies mit dem Versionssprung vielleicht ein "A" vor den Sender geschrieben haben oder sowas, da hab ich dann halt ein wenig mit Anfangsbuchstaben rumgespielt, aber keinen Erfolg gehabt. Merkwürdigerweise akzeptiert der Compiler aber die Zeilen für WorkEnd und LoggedOn, obwohl es da von den Übereinstimmungen her genauso aussieht wie bei den anderen beiden Zeilen.
Auf TForm1 habe ich auch noch einen idFTP liegen, da gibt es auch diese Ereignisbehandlungen. Die werden der Komponente aber vom Objektsinspektor zugewiesen, da funktioniert es auch.
Der einzige Unterschied, den mir HelpInsight (wenn es denn so heißt, jedenfalls dieser InformationsHint, wenn man auf bspw einen Methodennamen zeigt) zwischen dem FidFTP.OnWorkBegin und self.WorkBegin zeigt, ist dass es sich bei dem von idFTP um ein Event handelt, und bei meiner Version um eine Methode. Ist ja auch logisch. Sonst ist es aber genau gleich, was mir die Compilermeldung umso schleierhafter erscheinen lässt.
Evtl. habe ich nur nach den falschen Stichworten gesucht, jedenfalls habe ich bislang nichts Vergleichbares vor D2k5-Hintergrund finden können.
Ratschläge sind daher gern willkommen
bis dann,
S - tefano