Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Subclassing/Superclassing zurückverfolgen (https://www.delphipraxis.net/187517-subclassing-superclassing-zurueckverfolgen.html)

himitsu 6. Dez 2015 00:58

Subclassing/Superclassing zurückverfolgen
 
Morschn,

wenn ich per MSDN-Library durchsuchenGetClassName einen Namen bekomme, wie kann ich dann rausfinden auf welche Klasse(n) diese Klasse aufbaut?
Also vorallem würde ich gern die zugrundeliegende Standardklasse von Windows erfahren.

z.B. Delphi-Referenz durchsuchenTEdit -> MSDN-Library durchsuchenEDIT

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

https://msdn.microsoft.com/en-us/lib.../bb773183.aspx
http://winapi.foosyerdoos.org.uk/inf...superclass.php

SMO 6. Dez 2015 14:26

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.

himitsu 6. Dez 2015 15:24

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 02:49 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