Ich möchte auf einem Panel eine Reihe von TCheckboxen erzeugen.
In 3 Spalten, manchmal gibt es einen größeren Abstand dazwischen:
á la
Code: Alles auswählen
[ ]#### ### #### [ ]#### #### [ ]#### ####
[ ]#### ### ###
[ ]#### ### ## ### [ ]####
[ ]#### # [ ]#### ####
[ ]#### ### # [ ]# # ### [ ]#### ####
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject) ;
var
i, LeftPosi, TopPosi, len: Integer ;
cb: TCheckBox ;
begin
FillMatrix; // Matrix bekommt seine Werte
LeftPosi:=12; //linker Rand
TopPosi:=-1; //Oben, in meiner Matrix hat jede Checkbox einen Ofset = 1 zum Vorgänger
len:=0; //soll die längste CheckboxLänge speichern
for i:= 0 to MaxTag do begin
TopPosi:=TopPosi+Matrix[i].Ofs; //ofs ist 1 bei norm. Abstand, >für entspr. Lücken
cb:=TCheckBox.Create(self); //anlegen
with cb do begin
Parent:=panel1;
AutoSize:=True;
Caption:=Matrix[i].Cap; //unterschiedliche Bezeichnungen
Checked:=Matrix[i].Tick;
Name:='cb'+Matrix[i].Tag;
if Width>len Then len:=Width; //das längste soll gespeichert werden
Top:=TopPosi*Height;
Left:=LeftPosi;
if Width>=len Then len:=Width;
end;
if i=10 then begin //2. Spalte
LeftPosi:=LeftPosi+len+12; // verschieben des linken Randes
TopPosi:=-1;len:=0; // "reset", nächste Spalte begint oben
end;
if i=21 then begin //3. Spalte
LeftPosi:=LeftPosi+len+12;
TopPosi:=-1;
end;
end ;
end;
Problem ist, daß der linke Rand der 2. und 3. Spalte nicht paßt. Offensichtlich bekommt die variable "len := cb.width;" nicht den richtigen Wert.
Die Spalten sind ausgerichtet, allerdings zu schmal. cb.autosize := True oder False hat auch keinen Einfluß.
Woran kann denn das liegen?
Danke für eure Hilfe
jrx