Difference between revisions of "Anchor Sides/fr"

From Lazarus wiki
Jump to navigationJump to search
m (Text replace - "delphi>" to "syntaxhighlight>")
Line 76: Line 76:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
[[Category:LCL/fr]]
+
=See also=
 +
 
 +
*[[Autosize / Layout]]
 +
*[[Example: Anchors. How to reliably align dynamically created controls under changing visibility]]

Revision as of 19:59, 30 January 2016

Deutsch (de) English (en) français (fr) 日本語 (ja) русский (ru)

Il y a quelques nouvelles propriétés et méthodes pour la disposition automatique des contrôles. Vous pouvez maintenant paramétrer des contrôles pour conserver une certaine distance à d'autres contrôles, ou se centrer relativement à d'autres contrôles. Voir ci-dessous pour des exemples.

Chacun des quatre côtés d'un contrôles (Gauche, Haut, Droit, Bas) peut maintenant être ancré/contraint à un côté d'un autre contrôle. Par exemple vous pouvez maintenant ancrer le côté gauche d'un TEdit au coté droit d'un TLabel. Chaque fois que le Label est déplacé ou redimensionné, le côté gauche du contrôle Edit suivra, ce qui se traduit normalement par un déplacement parallèlement au Label.

Exemple 1

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

En code

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

Vous pouvez définir la distance par l'intermédiaire des propriétés d'espacement de bordure:

 Edit1.BorderSpacing.Left:=10;

La chose même peut être fait avec la méthode :

 Edit1.AnchorToNeighbour(akLeft,10,Label1);

Notes

Edit1.Left suivra Label1.Left+Label1.Width, pas les autres contours. Cela signifie, que le déplacement du Label1 déplacera Edit1. Mais le déplacement de Edit1 sera défait par la bibliothèque LCL. Si vous ancrez également le côté droit du Label1 au côté gauche de Edit1, vous avez créé un cercle vicieux, et ceci peut résulter comme avec d'autres propriétés de redimensionnement automatique en une boucle infinie. La détection de ces cercles vicieux n'est pas encore implémentée.

Exemple 2

Vous pouvez ancrer le côté supérieur du contrôle Edit pour suivre le côté supérieur du Label:

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

La même chose peut être fait avec la méthode:

Edit1.AnchorParallel(akTop,0,Label1);

Exemple 3

Centrage du Label verticalement au Edit:

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

La même chose peut être fait avec la méthode:

Edit1.AnchorVerticalCenterTo(Label1);

Evidemment, Ancrer le côté inférieur du Edit1 n'a pas de sens avec le centrage.

Nouvelle propriété

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

Cette propriété n'est pas édité dans l'inspecteur d' objets. Vous pouvez l'éditer dans le concepteur par l'intermédiaire de l'éditeur d'ancres (Menu: Voir -> Afficher l'éditeur d'ancres, ou cliquez sur le bouton de propriété 'Anchors').

Nouvelles méthodes pour configurer facilement des dispositions (de contrôles) communes

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

See also