Hallo,
Es gibt seit einiger Zeit die Margins-Eigenschaft für jedes Steuerelement, aber zwei benachbarte Steuerelement werden ihre Margins nicht verschmelzen, sondern addieren.
Bei CSS gibt es collapsible margins, zumindest für vertikal angeordnete Block-Element.
Auf Delphi übertragen:
Nun möchte ich horizontal z.B. 3 Steuerelemente ausrichten die alle den gleichen Abstand zueinander haben. Dafür setze ich Margins.Left und Margins.Right auf jeweils 10 und aktiviere AlignWithMargins. Das funktioniert gut für die Ränder, also dort wo die Steuerelemente auf die Fensterränder treffen. Der Leerraum zwischen zwei benachbarten Steuerelementen (A und B) wird nun aber 20, da sich A.Margins.Right und B.Margins.Left addieren, anstatt zu 10 zu verschmelzen.
Man kann natürlich rumpfuschen, und nur Margins.Left auf 10 setzten (Margins.Right aber auf 0), und dann beim letzten Steuerelement in der Liste Margins.Right auf 10 setzen. Aber der Punkt ist dass die Ausrichtung automatisch funktionieren soll, auch wenn die Reihenfolge der Steuerelemente sich ändert.
Hat jemand einen Weg gefunden dass in der
VCL zu erreichen?
Mein Ansatz war TMargins zu überschreiben (und dann den Steuerelementen zuzuweisen).
Aber wie findet man heraus was das benachbarte Steuerelement sein wird, während des Alignments?
Ich mach das so: Margins.Left = 5, Margins.Right = 5, Padding.Left und Padding.Right des Parents = 5. Wenn man es nur mit den Margins macht muss man das erste oder letzte Control gesondert behandeln, oder sich eine custom Parent (panel oder so) schnitzen, der das Alignment per Kode übernimmt. Für ein Control selbst sehe ich keine (einfache) Möglichkeit, herauszufinden, wo in der Positionierungssequenz es sich befindet.