Zitat von
Delphi-Freak:
Aha! Aber gibt es auch was einfacheres, außer jetzt alle Methoden nochmals zu implementieren? Also dass man das gleich für alle Methoden einer Klasse macht? Anscheinend nicht - oder doch
Wer hat denn was von Reimplementieren gesagt?
Schnell zusammengetippt und daher mit 100%iger Wahrscheinlichkeit die falschen Bezeichner, aber die kannst du ja in der Online-Hilfe nachschlagen, sieh mir nach, daß ich als Gelegenheits-mit-Delphi-Entwickler nicht alle Klassen der
VCL auswendig kenne
Delphi-Quellcode:
type
TSomeThread = class(TThread)
// ...
private
FIDIrgendwas: TIDIrgendwas;
end;
constructor TSomeThread.Create(...);
begin
inherited;
FIDIrgendwas := TIDIrgendwas.Create;
end;
procedure TSomeThread.MessageHandler(Message: TMessage); // oder so
begin
case Message.MsgType of // oder so
STM_CONNECT
begin
FIDIrgendwas.Connect(...);
// fertig, schicke eine Benachrichtigung an den Hauptthread
end;
STM_GET
begin
FIDIrgendwas.Get(...);
// fertig, schicke eine Benachrichtigung an den Hauptthread
end;
end;
end;
procedure TSomeThread.Execute(...);
begin
// Nachrichtenschleife
end;
Und damit die Handler wissen, was zu tun ist, solltest du die die beiden Datenfelder einer Message anschauen. Das sind zwar nur zwei LongWords, aber du kannst einen Pointer zu einem Integer casten, deswegen kannst du beliebig viele Informationen übergeben, indem du einfach einen Record deklarierst, die Daten dort reinpackst und einen Pointer auf den Record an die Nachricht hängst. Casten ist zwar weder schön noch hübsch, aber bei einer C-
API, wie Windows nunmal eine hat, leider nicht immer zu vermeiden.