Il peut parfois arriver d'avoir besoin de connaître l'arborescence des composants présents dans une fiche FireMonkey. Pour cela c'est assez simple puisque chaque composant a une propriété ChildrenCount qui indique combien il a d'enfants et une propriété Children qui contient ses enfants.
Ce bout de code permettra d'afficher l'arborescence de la fiche actuelle dans un TMemo :
procedure TForm1.FormCreate(Sender: TObject);
procedure godown(o: tfmxobject; indent: string = '');
var
c: tfmxobject;
begin
if assigned(o) then
begin
Memo1.Lines.Add(indent + '> ' + o.ClassName);
if (o.ChildrenCount > 0) then
for c in o.Children do
godown(c, indent + '--');
end;
end;
begin
Memo1.Lines.Clear;
godown(self);
if (application.ComponentCount > 0) then
for var i := 0 to application.ComponentCount - 1 do
if (application.Components[i] is tfmxobject) then
godown(application.Components[i] as tfmxobject);
end;
Ce qui donne ça pour un écran avec un TStyleBook, un TStringGrid et un TMemo :
> TForm1 --> TStringGrid ----> TStyledGrid ------> TCellText ----> TGridScrollContent ------> TStringColumn ------> TCheckColumn ------> TDateColumn --> TMemo ----> TFixedStyledMemo ----> TScrollContent --> TStyleBook
Bien entendu on peut en faire plein de choses et l'étendre à l'intégralité des fiches de l'application si on pioche dans Application.Components pour y trouver tout ce qui une TForm ou plus simplement un TFMXObject.
Par exemple avec :
if (application.ComponentCount > 0) then
for var i := 0 to application.ComponentCount - 1 do
if (application.Components[i] is tfmxobject) then
godown(application.Components[i] as tfmxobject);