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...
Hallo Günther,
Vielen dank dafür
Das hat mir sehr weitergeholfen. Ich finde es auch sehr komisch, dass so eine funktion nicht existiert. Habe auch Kolegen gefragt aber sie waren ebenfals ahnungslos.