Hallo,
Zitat von
sx2008:
Schreib' deine Komponente doch so, dass sie eine TTCPClient-Komponente übergeben bekommt.
Ich habe den TCPClient im On Create meiner Komponente so erzeugt :
FTCPClient := TTCPClient.Create(Self);
Und zwar weil ich nicht alle Properties des TCPClients in meiner Komponente dem Anwender öffentlich machen will. Wenn ich den TCPClient in der von Dir vorgeschlagenen Weise implementiere, habe ich automatisch auch alle public properties in meiner Komponente mit veröffentlicht (sag ich jetzt mal aus dem Bauch heraus). Und wahrscheinlich auch alle Events. Und genau diese Events muss ich speziell behandeln, eben um diese BlackBox (Ok, es ist eine SPS) spezifische Protokoll wieder aus den
TCP Nutzdaten zu extrahieren. Damit der Anwender im Endeffekt nur die Nutzdaten bekommt und sich nicht mit dem Protokoll auseinander setzen muss. Wie schon oben geschrieben, funktioniert das auch alles soweit. Eigentlich hat mir nur dieses Indy10 Monster missfallen, darum habe ich die aus dem Projekt rausgekegelt. Die Macher von
Indy haben da beim Umstieg von Indy9 auf Indy10 Ihre Philosphie völlig geändert und sich da irgendwie verrannt. Bei Indy9 bekam ich bei einem Fehler einen Event gefeuert, den konnte ich nach meinem Belieben behandeln. Indy10 knallt selbst bei normalen Vorgängen Exceptions heraus, die nicht ohne Aufwand abzufangen sind (und nicht nur im Debugmodus). Bei Indy9 konnte ich im Event "OnError" selber entscheiden, wie ich darauf reagiere. Der Anwender meiner Komponente soll auf keinen Fall zur Laufzeit eine Fehlermeldung sehen. Wenn eine solche Meldung auftritt, möchte ich eben selber entscheiden, wie diese zu behandeln ist.
Im Moment überlege ich noch, ob ich beim D2009 TTCPClient bleibe oder wieder auf Indy9 zurück gehe.
Also Indy10 bleibt nach meinen bisherigen Erfahrungen aus dem Spiel, wenn ich solche Konstrukte hier sehe : TIdTCPClient.IdIOHandler.IdInterceptor.IdSocket.Id ..... krieg ich das Kotzen. Und die Hilfe zu
Indy ist noch schlechter als die von Delphi, und die muss man erstmal unterbieten.
Ok, das Beispiel war jetzt etwas übertrieben, aber nur etwas ....
Aber danke für Deinen Hinweis, ich werde das auf jeden Fall morgen mal ausprobieren.
Gruß
Question_mark