Difference between revisions of "Anchor Sides/de"

From Free Pascal wiki
Jump to navigationJump to search
Line 26: Line 26:
 
=Beispiel 2=
 
=Beispiel 2=
  
You can anchor the Edit's top side to follow the Label's top side:
+
Sie können die obere Seite von Edit1 so verankern, daß sie der oberen Seite von Label1 folgt:
 
<pre>
 
<pre>
 
+--------+ +-------+
 
+--------+ +-------+
Line 38: Line 38:
 
Edit1.Anchors:=Edit1.Anchors+[akTop];
 
Edit1.Anchors:=Edit1.Anchors+[akTop];
 
</pre>
 
</pre>
The same can be done with the method:
+
Das selbe kann mit der Methode gemacht werden:
 
<pre>Edit1.AnchorParallel(akTop,0,Label1);</pre>
 
<pre>Edit1.AnchorParallel(akTop,0,Label1);</pre>
  

Revision as of 18:34, 20 November 2005

Es gibt einige neue Eigenschaften und Methoden für das automatische Layout von Bedienelementen. Sie können jetzt Bedienelemente so einstellen, daß sie einen bestimmten Abstand zu anderen Bedienelementen einhalten, oder relativ zu anderen Bedienelementen zentrieren. Siehe unten für Beispiele.

Jede der vier Seiten eines Bedienelements (Left, Top, Right, Bottom) kann jetzt verankert/angebunden werden an der Seite eines anderen Bedienelements. Zum Beispiel können sie jetzt die linke Seite eines TEdit an der rechten Seite eines TLabel verankern. Jedesmal wenn das Label bewegt wird oder in der Größe angepasst wird, dann wird die linke Seite des Edit's folgen, was normalerweise zu einer Bewegung des Edit parallel zum Label führt.

Beispiel 1

+--------+ +-------+
| Label1 | | Edit1 |
+--------+ |       |
           +-------+

Im Code

Edit1.AnchorSide[akLeft].Side:=asrRight;
Edit1.AnchorSide[akLeft].Control:=Label1;
Edit1.Anchors:=Edit1.Anchors+[akLeft];

Sie können den Abstand mit den BorderSpacing Eigenschaften definieren:

Edit1.BorderSpacing.Left:=10;

Das selbe kann mit der Methode gemacht werden:

Edit1.AnchorToNeighbour(akLeft,10,Label1);

Anmerkungen

Edit1.Left wird Label1.Left+Label1.Width folgen, nicht umgekehrt. Das bedeutet, daß eine Bewegung von Label1 auch Edit1 bewegen wird. Aber eine Bewegung von Edit1 wird von der LCL annulliert. Wenn sie auch die rechte Seite von Label1 an der linken Seite von Edit1 verankern, dann erzeugen sie einen Kreis, und dies kann zusammen mit einigen anderen autosize Eigenschaften eine Endlosschleife verursachen. Die Erkennung solcher Kreise ist noch nicht implementiert.

Beispiel 2

Sie können die obere Seite von Edit1 so verankern, daß sie der oberen Seite von Label1 folgt:

+--------+ +-------+
| Label1 | | Edit1 |
+--------+ |       |
           +-------+
Edit1.AnchorSide[akTop].Side:=asrTop;
Edit1.AnchorSide[akTop].Control:=Label1;
Edit1.Anchors:=Edit1.Anchors+[akTop];

Das selbe kann mit der Methode gemacht werden:

Edit1.AnchorParallel(akTop,0,Label1);

Beispiel 3

Centering a Label vertically to an Edit:

           +-------+
+--------+ |       |
| Label1 | | Edit1 |
+--------+ |       |
           +-------+
Edit1.AnchorSide[akTop].Side:=asrCenter;
Edit1.AnchorSide[akTop].Control:=Label1;
Edit1.Anchors:=Edit1.Anchors+[akTop]-[akBottom];

The same can be done with the method:

Edit1.AnchorVerticalCenterTo(Label1);

Obviously anchoring the bottom side of Edit1 does not make sense when centering.

New property

property AnchorSide[Kind: TAnchorKind]: TAnchorSide read GetAnchorSide;

This is not published in the object inspector. You can edit it in the designer via the anchor editor (Menu: View -> View anchor editor, or click on button of 'Anchors' property).

New methods to easily configure common layouts

procedure AnchorToNeighbour(Side: TAnchorKind; Space: integer;
                            Sibling: TControl);
procedure AnchorParallel(Side: TAnchorKind; Space: integer;
                         Sibling: TControl);
procedure AnchorHorizontalCenterTo(Sibling: TControl);
procedure AnchorVerticalCenterTo(Sibling: TControl);