Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy-Event per Code zuweisen - "Parameter unterschiedlich" (https://www.delphipraxis.net/46728-indy-event-per-code-zuweisen-parameter-unterschiedlich.html)

S - tefano 30. Mai 2005 15:21


Indy-Event per Code zuweisen - "Parameter unterschiedli
 
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:

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

S - tefano 1. Jun 2005 09:31

Re: Indy-Event per Code zuweisen - "Parameter unterschi
 
*push*
niemand?

barf00s 1. Jun 2005 10:29

Re: Indy-Event per Code zuweisen - "Parameter unterschi
 
eventuell brauchst garkein "Sender: TObject;" in der parameterliste........... aber um das ganz einfach rauszufinden, machst dir einfach nen TidFTP auf dein formular klixxt die events doppelt an die du brauchst und schaust im interface von deiner klasse, da siehst dann wie du die methoden deklarieren musst....

S - tefano 1. Jun 2005 22:41

Re: Indy-Event per Code zuweisen - "Parameter unterschi
 
Das mit dem Sender werde ich nachher mal ausprobieren, danke.
Was den Doppelklick auf die Events angeht, so habe ich ja geschrieben dass ich auf TForm1 schon ein solches Event zugewiesen habe, und dass die Deklarationen genau gleich aussehen...:(

barf00s 2. Jun 2005 07:54

Re: Indy-Event per Code zuweisen - "Parameter unterschi
 
dann hast entweder was falsch gemacht, oder 's wird doch am Sender: TObject liegen :)

auch komisch das manche entwickler in ihren events mal einen sender benützen, mal nicht

S - tefano 2. Jun 2005 11:40

Re: Indy-Event per Code zuweisen - "Parameter unterschi
 
Meeeeeeeerkwürdig...
Habe mir vom Objektsinspektor per Doppelklick einfach mal eine neue Prozedur machen lassen, da waren die letzten Parameter (jew. entweder AWorkCount oder AWorkCountMax) im Gegensatz zur vorherigen Version nicht mehr "const", und der Sender hieß nun "ASender".
Diese Deklaration habe ich dann in die Thread-Klasse übernomme - es funktioniert!!
Das komische daran ist nur, dass die alte Version, die im Thread nicht akzeptiert wurde, als Event auf TForm1 immernoch existiert (naja gut, das ist nicht komisch) und beim Compilieren aber genauso akzeptiert wird wie die neue "Schreibweise".

Vielen Dank für Eure Tipps, jetzt kann ich eeeendlich weiterarbeiten.


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