Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 

Re: Panels in einer Scrollbox anzeigen lassen

  Alt 6. Jan 2007, 22:47
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
  Mit Zitat antworten Zitat