Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Panel an Content automatisch anpassen Delphi(Firemonkey)

  Alt 6. Sep 2016, 08:31
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...
Angehängte Dateien
Dateityp: zip 2016-09-06_09-22-50.zip (24,0 KB, 14x aufgerufen)
  Mit Zitat antworten Zitat