// Controls mit fester Breite und Höhe werden in einer Scrollbox
// bei Änderung der Scrollbox-Breite immer wieder neu angeordnet.


// Getestet mit D4 unter XP

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; 



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke