AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy-Event per Code zuweisen - "Parameter unterschiedlich"
Thema durchsuchen
Ansicht
Themen-Optionen

Indy-Event per Code zuweisen - "Parameter unterschiedlich"

Ein Thema von S - tefano · begonnen am 30. Mai 2005 · letzter Beitrag vom 2. Jun 2005
Antwort Antwort
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#1

Indy-Event per Code zuweisen - "Parameter unterschiedli

  Alt 30. Mai 2005, 16:21
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
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Indy-Event per Code zuweisen - "Parameter unterschi

  Alt 1. Jun 2005, 10:31
*push*
niemand?
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#3

Re: Indy-Event per Code zuweisen - "Parameter unterschi

  Alt 1. Jun 2005, 11:29
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....
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Indy-Event per Code zuweisen - "Parameter unterschi

  Alt 1. Jun 2005, 23:41
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...
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#5

Re: Indy-Event per Code zuweisen - "Parameter unterschi

  Alt 2. Jun 2005, 08:54
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
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Indy-Event per Code zuweisen - "Parameter unterschi

  Alt 2. Jun 2005, 12:40
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.
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 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