Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#13

Re: In einer Klasse Messages für alle Komponenten abfangen

  Alt 15. Mai 2007, 21:15
Zitat:
Aber mit Hooks weißt Du mehr über die Komponenten als wenn Du diese selbst schreibst
Falsch. Ein Hook ist immer ein nachträgliches Instrument das nachträglich eine Funktionalität umbiegen möchte. Das bedeutet auch das als erster Schritt erstmal eine umbiegbare Fuktionalität vorhanden sein muß damit man überhaupt was Hooken kann. Der Komponentenentwickler ist also zeitlich und informell immer einen Schritt vorraus, ohne Kompoentenentwickler gibts keinen Hook-Entwickler. Denoch benötigt man das komplette Wissen eines Komponentenentwicklers wenn man einen Hook sauber platzierene möchte. Und das bestätigt sich auch, fragt doch der Threadersteller exakt nach diesem Wissen ->

Zitat:
Allerdings suche ich sowas wie eine Referenz wo ich nachschaun kann was die Controls alles für Messages bekommen...daran häng ich gerade
Die Antwort ist sehr einfach Die einzigste Referenz der man trauen kann sind die Sourcen aller Komponenten selber. Verschaffe dir also einen fundierten Einblick in die Funktonsweise aller Komponeten die du hooken möchtest dann hast du die Möglichkeit durch Messages circa 40% des Verhaltens der Komponenten zu verändern. Die restlichen 60% wirst du über Hooks nicht verändern können da es statische und geschützte Programsequenzen sind die intern eigene Staties benutzten die alle per Hooks nichts erreichbar sind. Hooks im herkömlichen Sinne benutzen die Messageabarbeitung der Komponenten und Fenster. Bei simplen Windows-Fenster ist das eine feine Sache bei der VCL aber nicht mehr. Viele Komponenten benutzen garkein Windowshandle mehr -> TControl->TGraphicControl sondern benutzen ein separates Messagekonzeopt nur typisch für Delphi VCL Controls. Zb. Nachrichten die oberhabl von cm_Base liegen -> cm_Activate, cm_Deactive, cm_Paint usw. usw. Um das alles mitzubekommen MUSST du die WindowProc der VCL-Controls hooken und NICHT das Fensterhandle des Parent WinControls -> zb. TPanel.Handle

Du wirst also nicht umhinkommen und dir das Wissen wie die komplette VCL intern arbeitet anzueignen. Alles andere wird ansonsten ein Blindflug, ein Trial&Error und aufgrund der hohen Komplexität der VCL Komponenten, niemals zu einem Erfolg führen.

Einen guten Abriß über die Arbeitsweise der VCL wird man wohl eher nicht finden. Mein "Abriß" in meinem Hirn besteht aus dem Wissen von 15 Jahren in denen ich als Komponentenentwickler mit der VCL arbeite.

Suche dir am besten Sourcen die fast das manchen was du dir wünscht, und dann studiere sie.

Gruß Hagen
  Mit Zitat antworten Zitat