also ich hab mir das so gemacht: ich habe ein object von typ TIdTCPClient abgeleitet und darin ein object, welches von einer thread-klasse abgeleitet ist, instanziiert. bei der onexecute-methode des thread-objects habe ich dann den IOHandler des TIdTCPClient-Object angesprochen und geschaut, ob daten vorhanden sind. das kannst du so abfragen
Delphi-Quellcode:
var
cmd : String;
{ ... }
// Aktuellen Puffer lesen
cmd := tcpClient.IOHandler.Readln();
// Prüfen, ob Daten angekommen sind
if (cmd <> '') then
begin
{ Hier musst du noch auf die eingehenden Daten reagieren. }
end;
auf die eingehenden daten reagiere ich wie folgt. ich leite diese eben an die nächst "höhere" instanz weiter, bei der eben eine entsprechende methode definiert sein muss.
Delphi-Quellcode:
TOnRecieve = procedure(aStr: String) of object;
TReadThread = class(TThread)
private
{ ...}
FOnRecieve : TOnRecieve;
protexted
procedure Execute(); override;
public
{ ... }
property OnRecieve : TOnRecieve read FOnRecieve write FOnRecieve;
end;
{ WICHTIG: Anpassen der OnExecute }
proceudre TReadThread.Execute();
var
cmd : String;
begin
{ ... }
// Aktuellen Puffer lesen
cmd := tcpClient.IOHandler.Readln();
// Prüfen, ob Daten angekommen sind
if (cmd <> '') then
begin
// Eingehende Daten weiterleiten
if (Assigned(FOnRecieve)) then
FOnRecieve(cmd);
end;
{ ... }
end;
vielleicht hilft dir das ja ein bisschen
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)