![]() |
Subclassing/Superclassing zurückverfolgen
Morschn,
wenn ich per ![]() Also vorallem würde ich gern die zugrundeliegende Standardklasse von Windows erfahren. z.B. ![]() ![]() Grund ist vorallem, wie man die Parameter eines HWND auswerten könnte. z.B. GWL_STYLE -> ES_NOHIDESEL Dieses Bit könnte ja auch was ganz Anderes bedeuten, wenn es kein EDIT wäre. z.B. SS_NOTIFY -> TLabel TStaticText ![]() ![]() |
AW: Subclassing/Superclassing zurückverfolgen
Gute Frage.
Delphi benutzt wohl die "alte" Methode (per deinen Links, also nicht die ComCtl-v6-Methode), um Subklassen zu erstellen. Siehe TWinControl.CreateSubClass (in Vcl.Controls). Dort wird einfach GetClassInfo aufgerufen, um Params.WindowClass mit den Standardwerten für "BUTTON", "EDIT", usw. zu füllen. Am wichtigsten dabei wohl Params.WindowClass.lpfnWndProc, die in der Property DefWndProc der Delphi-Klasse gespeichert wird. Denn Subclassing bedeutet hier ja nichts anderes, als eine neue Window-Klasse zu registrieren (z.B. "TEdit"), die intern auf die WndProc einer existierenden Klasse (z.B. "EDIT") zurückgreift, um zumindest Teile deren Verhalten zu "erben". Du könntest vermutlich per GetClassInfo die WndProc-Adressen aller Standardklassen (BUTTON, EDIT, ...) abfragen, dann mit dem DefWndProc-Wert einer Delphi-Klasse vergleichen, um herauszufinden, was sie benutzt. Lass uns wissen wenn du einen besseren Weg findest. |
AW: Subclassing/Superclassing zurückverfolgen
Liste der Anhänge anzeigen (Anzahl: 1)
Jupp, hatte ich schon gesehn, aber das Problem ist, daß ich eigentlich das Programm allgemein halten und möglichst nichts Delphi-Spezifisches einbinden wollte.
(abgesehn von der Quellcodegenerierung, die man noch auf andere Sprachen ausweiten könnte) Und das beim Auslesen "fremder" Prozesse und nicht des Eigenen, wobei ich keine manuelle Übersetzungsliste wollte, denn TEdit, TLabeledEdit und dann die Edits anderer VCL-Bibliotheken. (DevExpress uvw.) Wollte endlich mal ein altes Projekt fortsetzen (neu aufsetzen), welches ich grade gebrauchen konnte. Unicode und demnächst 64-Bit (32 Bit/64 Bit-Bridge) hab ich so weit unter Kontrolle, aber Subclassing/Superclassing ist noch ein Problem, damit ich die Eigenschaften der "Basisklassen" anzeigen kann. GetWindowLong, GetClassLong und SendMessage/PostMessage sollen nur die Grundwerte anzeigen und dann jeweils typabhängig noch die Eigenschaften der Basisklassen. Hatte erst an GetWindowLong/GetClassInfo gedacht und hoffte da die innere Klasse auslesen zu können. Eventuell könnte man auch spezifische Messages senden und das Ergebnis auswerten? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz