![]() |
[RTTI] an Klassennamen der TCollectionItems herankommen
ich brauche den Klassennamen der Items einer von TCollection abgeleiteten Klasse
die untenstehende Funktion funktioniert soweit, dass ich den Namen der TCollection-Klasse habe (TStatusPanels), und mir ein Object dessen erzeugt, leider ist dessen property ItemClass=nil somit kome ich nicht an den namen ran... Jemand eine Idee? Beispiel für untenstehende Funktion: classname ist z.B. TStatusbar propname ist Panels
Delphi-Quellcode:
Gruß Frank
function getCollectionClass(classname,propname:string):string;
var ti:pTypeinfo; td:pTypeData; pi:pPropInfo; classe:TClass; col:TCollection; begin ti:=FindTypeInfo(classname); //funktion von Hagen ähnlich Typeinfo() nur mit strings pi:=GetPropInfo(ti,propname); if pi.PropType^.kind=tkClass then begin ti:=FindTypeInfo(pi.PropType^.Name); td:=GetTypeData(ti); classe:=td.ClassType; if assigned(classe) and (classe.InheritsFrom(TCollection)) then begin //showmessage(pi.PropType^.Name); //TStatusPanels wird angezeigt //hier muss ich irgendwie and den Namen der CollectionItems (TStatusPanel) herankommen col:=TCollection(classe.create); showmessage(col.ItemClass.ClassName); col.Free; end; end; end; |
Re: [RTTI] an Klassennamen der TCollectionItems herankommen
Hallo Frank,
der folgende Code könnte funktionieren:
Delphi-Quellcode:
Im Unterschied zu deinem Code wird hier das Control selbst (z.B. TStatusBar) temporär erzeugt. Ich habe leider keine andere Möglichkeit gefunden, die abzufragende Eigenschaft (Panels.ItemClass) zu initialisieren. Für den produktiven Einsatz solltest du natürlich noch die üblichen Sicherheitsabfragen einbauen.
function getCollectionClass(classname,propname:string):string;
var ti:pTypeinfo; td:pTypeData; Comp:TComponent; Coll:TCollection; begin ti:=FindTypeInfo(classname); td:=GetTypeData(ti); Comp:=TComponentClass(TD.ClassType).Create(nil); Coll:=TCollection(GetOrdProp(Comp, propname)); Result:=Coll.ItemClass.ClassName; Comp.Free; end; Gruß Hawkeye |
Re: [RTTI] an Klassennamen der TCollectionItems herankommen
Hi,
hätte ich auch selber drauf kommen können, danke. Musste nur noch eine Änderung machen...
Delphi-Quellcode:
warum itemclass nil ist ist mir jett auch klar...(es wird der consturctor von TObject aufgerufen, nicht von der klasse selbst)
var ...
pi:pPropInfo; begin ... pi:=GetPropInfo(ti,propname); Coll:=TCollection(GetOrdProp(Comp, pi)); ... end; die prüfungen mache ich auch noch rein...(assigned,try/except/finally) Gruß Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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 by Thomas Breitkreuz