Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

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

Re: mit string an PTypeinfo rankommen

  Alt 27. Apr 2006, 22:07
An die interne Liste die in RegisterClass() benutzt wird kommst du nicht in jeder Delphi Version, soviel ich weis.
Du kannst im grunde nur mit RegisterClass() Klassen dort hinzufügen und mit GetClass() nachfragen ob eine Klasse registriert wurde. Man könnte per Tricks an diese globale Variable herankommen, das geht mit absoluter Sicherheit. Das wäre dann aber von der Delphi Version abhängig.

Allerdings was brauchst du ?
So wie ich dich zwischen den Zeilen verstanden habe suchst du "TopLevel" Komponenten, also die Komponenten die keine weiteren Descands besitzen. Auch das lässt sich mit EnumTypeInfo() bewerkstelligen.

Als erstes mit EnumTypeInfo() eine Liste aller Klassen erzeugen die von TComponent abstammen. Danach müssen aus dieser Liste alle Klassen rausgefiltert werden die selber eine Vorfahrklasse der gefundenen Klassen in dieser List sind.

Zb. wird diese Liste auch TEdit und TCustomEdit enthalten. TEdit ist gesucht und ein Nachfahre von TCustomEdit. TCustomEdit ist eine abstrakte Vorfahrklasse und besitzt TEdit als Nachfahre in der Liste. Also wird TCustomEdit durch Ausschlußverfahren über TEdit aus der Liste rausgeschmissen.
Übrig bleibt eine Liste alle Klassen der Anwendung die abgeleitet sind von TComponent und keine Nachfahren besitzen.

Fragt sich nur was du damit weiter anfangen möchtest. Denn die Hauptaufgabe von RegisterClasses() und GetClass() ist einzigst das Mapping einen Klassennamens als String in eine TClass = Zeiger auf die VMT einer Klasse und indirekt ein Zeiger auf die RTTI. D.h. die reine Funktionalität von RegisterClasses(), GetClass() kannst du 1 zu 1 auch mit EnumTypeInfo() erreichen, ohne Speicherlisten etc.pp.

Gruß Hagen
  Mit Zitat antworten Zitat