Ich kenne in FireMonkey für so etwas triviales und selbstverständliches leider auch nichts. Anscheinend muss man sich das selber zusammenzimmern.
Ich würde es so machen (Video im Anhang):
Delphi-Quellcode:
TControlHelper = class helper for FMX.Controls.TControl
procedure makeAutoSize();
end;
procedure TForm9.Button1Click(Sender: TObject);
begin
ColorBox1.Height := 50.0;
ColorBox2.Height := 50.0;
Panel1.makeAutoSize();
end;
procedure TForm9.Button2Click(Sender: TObject);
begin
ColorBox1.Height := 200.0;
ColorBox2.Height := 200.0;
Panel1.makeAutoSize();
end;
procedure TControlHelper.makeAutoSize();
var
childIndex: Integer;
asControl: TControl;
totalRect: TRectF;
begin
totalRect := TRectF.Empty();
for childIndex := 0 to Pred(ChildrenCount) do begin
asControl := Children[childIndex] as TControl;
if not Assigned(asControl) then Continue;
if asControl.Stored then
totalRect.Union(asControl.BoundsRect);
end;
Width := totalRect.Width + Padding.Right;
Height := totalRect.Height + Padding.Bottom;
end;
Nicht sicher bin ich mir beim Ausschluss von Controls welche nicht "Stored = True" haben. Bei einem Panel beispielsweise findet man ein
TRectangle
als erstes Child-Element. Deswegen hast du bei dir wahrscheinlich auch bei 1 angefangen zu zählen und nicht bei Null. Wer weiß was in der nächsten FireMonkey-Version geändert wird, da sind es dann z.B. zwei Rectangles. Oder keines. Oder ganz andere Dinge. Ich hoffe nur dass diese unsichtbaren Hilfsobjekte dann weiterhin "Stored = False" haben werden...