AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente mit PostMessage TService-tauglich machen

Ein Thema von Hobbycoder · begonnen am 10. Apr 2024 · letzter Beitrag vom 10. Apr 2024
Antwort Antwort
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#1

Komponente mit PostMessage TService-tauglich machen

  Alt 10. Apr 2024, 18:05
Hi,
ich habe eine (Fremd)-Komponente, die, basieren auf TComponent sich ein WindowHandle holt und verschiendene Event über PostMessage feuert.
Diese Komponente möchte ich jetzt in einem Service bzw. in einem Thread einsetzen. Als Thread kann er sich aber kein WindowHandle holen (wenn's nicht stimmt bitte korrigiert mich).

Nun dachte ich mir, stell ich das einfach um auf PostThreadMessage. Statt eines WindowHandle hole ich mir einfach die ThreadID und brauch lediglich aus PostMessage->PostThreadMessage machen.
Was mir natürlich fehlt ist die WndProc, die ja, wenn ich das ganze richtig verstanden habe, im Thread nicht geht.
Also muss die Message über GetMessage oder PeekMessage in einer Schleife abgeholt werden. Dazu muss ich das der Execute-Methode unterbringen, richtig? Oder gibt es eine Möglichkeit sich innerhalb der Komponente in irgendeine MessageQueue einzuklinken?

Ich muss dazu sagen, dass ich mit PostThreadMessage und so noch nie was gemacht habe. Immer nur mit WindowMessages. Vielleicht könnte ihr mich ein wenig erhellen.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder (11. Apr 2024 um 10:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#2

AW: Komponente mit PostMessage TService-tauglich machen

  Alt 10. Apr 2024, 19:30
Was für ein Handle?
Warum nicht TWinControl, wenn es ein Handle HWND verwaltet?

Also Server kann er sich aber kein WindowHandle holen (wenn's nicht stimmt bitte korrigiert mich).
Ich sag es mal so, der Windows-Service baut intern auf der VCL auf.

Doch, Messages in Threads gehen, wenn jemand (DU) die Messages auch verarbeitet. (GetMessage bzw. PeekMessage)
Handle/HWND müssen auch in dem Thread erstellt (CreateWindow) werden, wo sie verarbeitet werden sollen.

Beim ersten Aufruf einer Message-Funktion (z.B. CreateWindow/GetMessage/PeekMessage) wird automatisch eine MessageQueue für diesen Thread erzeugt.

Und PostThreadMessage sendet direkt an den Thread, nicht an ein WinControl, also wird es auch vom keinem WinControl/WndProc empfangen/verarbeitet.
DU mußt es also in deiner Message-Verarbeitung (GetMessage bzw. PeekMessage) deine Message abfangen und verarbeiten. (in der VCL kann man sich auch an Application.OnMessage TApplicationEvents.OnMessage hängen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz