Hallo,
ich habe mir eine eigene Klasse gebastelt, die das NNTP-Protokoll kapselt (Usenet). Die gibt's zwar auch von Indy oder im Netz, aber die haben nicht die Funktionen, die ich gerne hätte.
So, nun zu meinem Problem:
Meine Klasse ist keine Komponente, sondern eine abstrakte Klasse, die vom Typ TThread abgeleitet ist. Es gibt unter anderem eine Eigenschaft bzw. das Ereignis OnStatus, das immer ausgelöst werden soll, wenn sich der Status ändert. Dazu habe ich folgenden Code verwendet (gekürzt):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| type TNNTPThreadStatusEvent = procedure(ThreadID: Integer; Status: String) of object;
TNNTPThread = class(TThread) private fStatus: TNNTPThreadStatusEvent; public property OnStatus: TNNTPThreadStatusEvent read fStatus write fStatus; end; |
Im Verlauf meines Codes wird dann das Ereignis z.B. wie folgt ausgelöst:
Delphi-Quelltext
1: 2: 3:
| if Assigned(OnStatus) then begin OnStatus(fThreadID,'Verbinde mit '+Host+' ...'); end; |
Ja Schade, wird aber nicht ausgelöst. Wenn ich nämlich in den if-Block z.B. ein ShowMessage reinsetze, wird nix angezeigt. Also müsste ja OnStatus = nil sein. Der Code davor und danach wird aber ausgeführt (mittels Haltepunkt ausprobiert).
In meinem Hauptprogramm arbeite ich wie folgt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.NNTPStatus(ThreadID: Integer; Status: String); begin ShowMessage(Status); end;
procedure TForm1.Button1Click(Sender: TObject); var NNTP: TNNTPThread; begin NNTP := TNNTPThread.Create(...); NNTP.OnStatus := NNTPStatus; end; |
OnStatus wird also gesetzt, aber wie gesagt, die entsprechende Prozedur (hier NNTPStatus()) wird nicht ausgeführt. Hat irgendjemand eine Idee? Oder vielleicht habe ich auch irgendetwas schlicht und ergreifend falsch gemacht, ich hab immerhin seit locker 6-7 Jahren keine Ereignisse mehr programmiert...
Vielen Dank im Voraus.
Gruß -- Andy aka fero