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…