Eigentlich brauchst Du ja nur das eine Control, das am Tiefsten steht mit der größten Höhe. Aus der Summe von Top+Height erhältst Du dann den äußersten unteren Rand, der noch angezeigt werden muss und somit die notwendige Höhe Deines FlowLayouts.
Das könnte man z.B. so erledigen:
Delphi-Quellcode:
procedure TForm89.bnResizeFlowLayOutClick(Sender: TObject);
var
L: Integer; AMax, ABot: Extended;
begin
AMax := 0;
for L := 0 to FlowLayout1.ChildrenCount-1 do begin
ABot := TControl (FlowLayout1.Children[L]).Position.Y + TControl (FlowLayout1.Children[L]).height;
if ABot > AMax then AMax := ABot;
end;
FlowLayout1.Height := AMax;
FlowLayout1.Repaint;
end;