Einzelnen Beitrag anzeigen

CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#1

Reihenfolge von zur Laufzeit erstellten Komponenten mit Align=alTop

  Alt 7. Jul 2011, 14:47
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?
  Mit Zitat antworten Zitat