Entwickler-Ecke
Windows API - PostMessage an eigene Klasse
cvoelkel - Mi 03.08.05 15:33
Titel: PostMessage an eigene Klasse
Hallo,
wahrscheinlich stehe ich auf dem Schlauch aber vielleicht kann mir jemand einen Tipp geben:
Ein eigene Klasse (nicht TForm, nichts visuelles) verwaltet eine Liste von Einträgen.
Über eine Checkroutine werden diese Einträge über Threads geprüft. Wenn ein Thread
fertig ist, soll er über PostMessage meiner Klasse sagen, daß er fertig ist. Da PostMessage
allerdings ein Handle erwartet, stehe ich etwas auf dem Schlauch, da meine Klasse einfach
nur von TObject abgeleitet wird.
Any Idea :?:
Danke
Christian
MrSaint - Mi 03.08.05 15:35
ncith von TObject ableiten, sondern von TWinControl sollte da glaube ich helfen :) dann bekommst du glaub auch ein Handle :)
EDIT: :welcome:
cvoelkel - Mi 03.08.05 16:08
MrSaint hat folgendes geschrieben: |
ncith von TObject ableiten, sondern von TWinControl sollte da glaube ich helfen :) dann bekommst du glaub auch ein Handle :)
|
Danke für die schnelle Antwort - hat aber leider nicht viel gebracht. Wenn ich von TWinControl ableite hagelt es zunächst Fehlermeldungen (schon der Constructor ist anders). Gibt es keine einfachere Methode um einer eigenen (nichtvisuellen) Klasse eine Nachricht zukommen zu lassen?
Grüße
Christian
MrSaint - Mi 03.08.05 16:18
Hmm, ich hab grad in die TWinControl reingeschaut. Die holt das Handle irgendiwe über
CREATEWINDOWEX. Vielleicht kommst du da irgendwie weiter, wenn du dir einfach per Hand dann n Handle holst. Wie du dann aber die Message "abfangen" sollst, die dann an diene Klasse (bzw. an die Instanz der Klasse) geschickt wird, weiß ich net genau... Evtl. gehts auch gar nicht, weil der "Main-Message_loop" (implementiert in TApplication.Run) kann vielleicht auch nur mit TWinControls umgehen.. k.A., schau einfach mal n bisschen im RTL-Source rum :) Aber am Einfahcsten wäre es wahrshceinlich einfahc von TWinControl abzuleiten, dann könntest du dir sicher sien, dass alles so funktioniert wie es das üblicherweise auch tut.. Dann musst du deine Klasse halt entsprechend anpassen... Und ein paar Parameter zum Konstruktor hinzufügen is ja nich die Welt ;)
MrSaint
cvoelkel - Mi 03.08.05 23:20
Hallo nochmal,
Danke für Deine Antwort, ich hab jetzt doch eine elegante Lösung ohne den Umweg über TWinControl
gefunden. Sind nur ein paar Zeilen und es funktioniert wunderbar. :D
Wen es interessiert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| const TH_Message = WM_USER +1;
type TMyClass = class(TObject) private F_Handle : HWnd; procedure WndProc(var msg:TMessage); end;
constructor TMyClass.Create; begin inherited; F_Handle := Classes.AllocateHWnd(WNDProc); end;
procedure TMyClass.WndProc(var msg:TMessage); begin if (msg.Msg=TH_Message) then begin end; end;
destructor MyClass.Destroy; begin Classes.DeallocateHWnd(F_Handle); inherited; end;
|
Grüße
Christian
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!