Einzelnen Beitrag anzeigen

SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#2

AW: Subclassing/Superclassing zurückverfolgen

  Alt 6. Dez 2015, 14:26
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.
  Mit Zitat antworten Zitat