uses StdCtrls, ExtCtrls;
type
control = class(TPanel); // TButton, TMemo, TImage usw...
const
abstand = 10; // kann auf 0 gesetzt werden
var
MyControls: array[0..99] of Control; // z.B. 100
hoch: integer = 33 + abstand; // z.B.
breit: integer = 75 + abstand; // z.B.
anzahl, am1, spalten, zeilen: integer;
procedure TForm1.FormCreate(Sender: TObject);
var
x: integer;
begin
am1 := high(MyControls);
anzahl := succ(am1);
for x := 0 to am1 do begin
MyControls[x] := control.create(self);
MyControls[x].parent := Scrollbox1;
MyControls[x].height := hoch - abstand;
MyControls[x].width := breit - abstand;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
x: integer;
begin
for x := 0 to am1 do MyControls[x].free;
end;
procedure TForm1.ScrollBox1Resize(Sender: TObject);
var
x, y, hlp: integer;
begin
spalten := Scrollbox1.ClientWidth div breit;
zeilen := (anzahl div spalten) +
ord(anzahl mod spalten > 0);
for y := 0 to pred(zeilen) do
for x := 0 to pred(spalten) do begin
hlp := y * spalten + x;
if hlp <= am1 then begin
MyControls[hlp].left := x * breit;
MyControls[hlp].top := y * hoch;
end;
end;
Scrollbox1.refresh;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
// --- anstelle von: Scrollbar1.Align := alClient ---
Scrollbox1.left := 0;
Scrollbox1.top := 0;
Scrollbox1.width := clientwidth;
Scrollbox1.height := zeilen * hoch;
// ---------------------------------------------------
Scrollbox1.refresh;
end;