Autor Beitrag
kloeffler
Hält's aus hier
Beiträge: 5

WIN 2000
D5
BeitragVerfasst: Do 16.09.04 14:16 
hallo.

Ich möchte in einer Liste alle von TWinControl abgeleiteten Klassen ausgeben.
Wie kann ich mir alle Nachkommen von TWinControl zurückgeben lassen.

danke. kai.
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Do 16.09.04 14:50 
kloeffler hat folgendes geschrieben:
Ich möchte in einer Liste alle von TWinControl abgeleiteten Klassen ausgeben.
Wie kann ich mir alle Nachkommen von TWinControl zurückgeben lassen.

Bei meinen Delphi Versionen war immer ein riesiges Poster bei, wo alle Klassen in einer Baumstruktur dargestellt worden sind.

_________________
Ciao, Sprint.
kloeffler Threadstarter
Hält's aus hier
Beiträge: 5

WIN 2000
D5
BeitragVerfasst: Do 16.09.04 15:05 
danke für den Hinweis.

ich will das ganze aber per code lösen.

etwa wie: TWinControl.getDescendants

oder ähnliches.

danke.

kai
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 16.09.04 18:29 
Die Möglichkeit dazu bietet die VCL intern. Um sie für dich nutzbar zu machen, musst du allerdings etwas Assembler können, da die Liste mit den registrierten Klassen nicht im Interface irgendeiner Unit veröffentlicht wird. Schau dir dazu (falls vorhanden) mal den Source zu RegisterClass an. Auf diesen müsstest du mit ASM zugreifen und dann den Pointer auf die interne Liste auslesen.

Eine andere Möglichkeit (mit Pointern realisierbar, aber trotzdem genauso kompliziert) bestünde darin, die internen Unit-Strukturen im Speicher nach den Definitionen zu durchforsten. Problem hierbei dürfte allerdings sein, dass das interne Unit-Layout zeimlich unbekannt ist und daher nur schwer auszulesen sein wird.

Ansonsten bleibt dir nur die 3. Möglichkeit, insofern du die Original-Quelltexte hast (ALLE UNITs!): Nimm nen Parser, les die Units ein und durchsuch sie nach allen Klassen, die direkt oder indirekt von TWinControl abgeleitet wurden.

Aber falls du nur wissen möchtest, ob eine gegebene Klasse von TWinControl abgeleitet ist, nimm einfach AObject is TWinControl :D

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.