Ah, jetzt ja ...
Delphi-Quellcode:
procedure TDemoForm.CreatePanels(n, cols, gap: Integer; pc: TScrollBox);
var
i, rows, pnlWidth, pnlHeight, vsbWidth: Integer;
begin
if n > 4
then vsbWidth := GetSystemMetrics(SM_CXVScroll)
else vsbWidth := 0;
pnlWidth := Round((pc.ClientWidth - vsbWidth - Succ(cols) * gap) div cols);
pnlHeight := Round((pc.Height - Succ(cols) * gap) div cols);
Panels.Clear;
rows := Succ(n) div cols;
pc.VertScrollBar.Range := gap + rows * (gap + pnlHeight) - 4;
while Panels.Count < n do
with TPanel(Panels[Panels.Add(TPanel.Create(self))]) do
begin
i := Pred(Panels.Count);
Parent := pc;
Caption := Format('Panel %d', [Succ(i)]);
Width := pnlWidth;
Height := pnlHeight;
Left := gap + (i mod cols) * (gap + Width);
Top := gap + (i div cols) * (gap + Height);
end;
end;
Die Zuweisung an Top kannst du bestimmt an deine Bedürfnisse anpassen. Die anderen Anpassungen an meinem Code sorgen dafür, dass der rechte Rand genauso groß wird wie der linke und dass der untere Rand so groß wird wie der obere.
Gute Nacht