Einzelnen Beitrag anzeigen

Loko789

Registriert seit: 23. Sep 2015
74 Beiträge
 
#8

AW: Panel an Content automatisch anpassen Delphi(Firemonkey)

  Alt 6. Sep 2016, 09:19
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.
  Mit Zitat antworten Zitat