Difference between revisions of "Anchor Sides/de"

From Lazarus wiki
Jump to navigationJump to search
Line 3: Line 3:
 
oder relativ zu anderen Bedienelementen zentrieren. Siehe unten für Beispiele.
 
oder relativ zu anderen Bedienelementen zentrieren. Siehe unten für Beispiele.
  
Each of the four sides of a control (Left, Top, Right, Bottom) can now
+
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.
be anchored/bound to a side of another control. For example you can now
 
anchor the left side of TEdit to the right side of a TLabel. Everytime
 
the Label is moved or resized the Edit's left side will follow, which
 
normally results in moving the Edit parallel to the Label.
 
  
 
=Beispiel 1=
 
=Beispiel 1=

Revision as of 18:22, 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 |
+--------+ |       |
           +-------+

In code

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

You can define the distance with the BorderSpacing properties:

Edit1.BorderSpacing.Left:=10;

The same can be done with the method:

Edit1.AnchorToNeighbour(akLeft,10,Label1);

Notes

The Edit1.Left will follow Label1.Left+Label1.Width, not the other way around. That means, moving Label1 will move Edit1. But moving Edit1 will be undone by the LCL. If you also anchor the right side of Label1 to the left side of Edit1, you created a circle, and this can result together with some other autosize properties in an infinite loop. Detection of circles is not yet implemented.

Beispiel 2

You can anchor the Edit's top side to follow the Label's top side:

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

The same can be done with the method:

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);