Do you remember the great posters that came with older versions of delphi?
Now you can build your own tree of classes using the new rtti, here I leave the source code
uses Rtti; procedure FillTreeClasses(TreeViewClasses:TTreeView); //function to get the node wich match with the TRttiType function FindTRttiType(lType:TRttiType):TTreeNode; var i : integer; Node : TTreeNode; begin Result:=nil; for i:=0 to TreeViewClasses.Items.Count-1 do begin Node:=TreeViewClasses.Items.Item[i]; if Assigned(Node.Data) then if lType=TRttiType(Node.Data) then begin Result:=Node; exit; end; end; end; //function to get the node wich not match with the BaseType of the Parent function FindFirstTRttiTypeOrphan:TTreeNode; var i : integer; Node : TTreeNode; lType : TRttiType; begin Result:=nil; for i:=0 to TreeViewClasses.Items.Count-1 do begin Node :=TreeViewClasses.Items[i]; lType:=TRttiType(Node.Data); if not Assigned(lType.BaseType) then Continue; if lType.BaseType<>TRttiType(Node.Parent.Data) then begin Result:=Node; break; end; end; end; var ctx : TRttiContext; TypeList : TArray<TRttiType>; lType : TRttiType; PNode : TTreeNode; Node : TTreeNode; begin ctx := TRttiContext.Create; TreeViewClasses.Items.BeginUpdate; try TreeViewClasses.Items.Clear; //Add Root, TObject lType:=ctx.GetType(TObject); Node:=TreeViewClasses.Items.AddObject(nil,lType.Name,lType); //Fill the tree with all the classes TypeList:= ctx.GetTypes; for lType in TypeList do if lType.IsInstance then begin if Assigned(lType.BaseType) then TreeViewClasses.Items.AddChildObject(Node,lType.Name,lType); end; //Sort the classes Repeat Node:=FindFirstTRttiTypeOrphan; if Node=nil then break; //get the location of the node containing the BaseType PNode:=FindTRttiType(TRttiType(Node.Data).BaseType); //Move the node to the new location Node.MoveTo(PNode,naAddChild); Until 1<>1; finally TreeViewClasses.Items.EndUpdate; ctx.Free; end; end;
When you run this code the output will look like this
October 4, 2010 at 8:16 pm
Very nice, but where are the pretty colors? ;)
October 5, 2010 at 6:05 am
¡¡¡Qué recuerdos me trae esa imagen!!!
;-D
___________________________
Neftalí -Germán Estévez-
Pingback: /*Prog*/ Delphi-Neftalí /*finProg*/ » Póster de pared…