Ich erzeuge zuweil dynamisch TWinControls auf einer Form.
Beispiel (Ausschnitt):
Delphi-Quellcode:
for i := 1 to 10 do begin
lbl := TLabel.Create(Self);
lbl.Parent := sbParameters;
lbl.Align := alTop;
lbl.AlignWithMargins := true;
lbl.Caption := IntToStr(i);
FParameterEditors.Add(lbl);
end;
sbParameters ist dabei eine TScrollbox, FParameterEditors eine TComponentList.
In dieser Form habe ich sogar noch eine erwartete Reihenfolge. Nun füge ich aber TEdits hinzu:
Delphi-Quellcode:
for i := 1 to 10 do begin
lbl := TLabel.Create(Self);
lbl.Parent := sbParameters;
lbl.Align := alTop;
lbl.AlignWithMargins := true;
lbl.Caption := IntToStr(i);
lbl.Top := iParameter * 2;
FParameterEditors.Add(lbl);
edt := TEdit.Create(Self);
edt.Parent := sbParameters;
edt.Align := alTop;
edt.AlignWithMargins := true;
edt.ReadOnly := (p.Direction = bapdOut);
edt.Top := iParameter * 2 + 1;
edt.Text := 'HAllo Welt';
FParameterEditors.Add(edt);
end;
In dieser Mischmasch-Form muss ich schon per obiger .Top-Zuweisung etwas "Ordnung" reinbringen, sonst habe ich 10 Labels übereinander, danach 10 Edits übereinander. Obwohl sie abwechselnd, nicht nacheinander, erstellt werden.
Füge ich nun noch zwischendurch ein paar TMemos ein, bekomme ich über eine einfache .Top-Zuweisung während der Erstellung die Original-Erstellungsreihenfolge nicht angezeigt. Da hilft mir nur noch ein:
Delphi-Quellcode:
for iParameter := 0 to FParameterEditors.Count - 1 do begin
if iParameter = 0 then begin
TControl(FParameterEditors[iParameter]).Top := 0;
end else begin
TControl(FParameterEditors[iParameter]).Top := TControl(FParameterEditors[iParameter - 1]).Top + TControl(FParameterEditors[iParameter]).Height + 1;
end;
end;
Aber: da muss es doch etwas einfacheres geben? Was wäre denn die "Standard"-Methode zum dynamischen Einfügen von Controls, mit Align, sortiert? Gibt es da überhaupt etwas "vorgegebenes"? Oder etwas eleganteres?