Difference between revisions of "Anchor Sides/fr"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed syntax highlighting)
 
(32 intermediate revisions by 4 users not shown)
Line 2: Line 2:
  
 
Il y a quelques nouvelles propriétés et méthodes pour la disposition automatique des contrôles.  
 
Il y a quelques nouvelles propriétés et méthodes pour la disposition automatique des contrôles.  
Vous pouvez maintenant installer des contrôles pour garder une certaine distance avec d'autres contrôles,  
+
Vous pouvez maintenant paramétrer des contrôles pour conserver une certaine distance à d'autres contrôles,  
ou centrer relativement avec d'autres contrôles. Voir ci-dessous pour des exemples.  
+
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)  
+
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.  
peut maintenant être ancré/limite à un côté d'un autre contrôle.  
 
Par exemple vous pouvez maintenant ancrer le côté gauche d'un TEdit  
 
sur le côté d'un TLabel. Chaque fois que le Label est déplacé  
 
ou est remis à la côte le côté gauche de l'éditeur suivra,  
 
lequel normalement suivra le déplacement parallèlement au Label.  
 
 
=Exemple 1=
 
=Exemple 1=
 
  +--------+ +-------+
 
  +--------+ +-------+
Line 17: Line 12:
 
             +-------+
 
             +-------+
 
==En code==
 
==En code==
<delphi>
+
<syntaxhighlight lang=pascal>
 
  Edit1.AnchorSide[akLeft].Side:=asrRight;
 
  Edit1.AnchorSide[akLeft].Side:=asrRight;
 
  Edit1.AnchorSide[akLeft].Control:=Label1;
 
  Edit1.AnchorSide[akLeft].Control:=Label1;
 
  Edit1.Anchors:=Edit1.Anchors+[akLeft];
 
  Edit1.Anchors:=Edit1.Anchors+[akLeft];
</delphi>
+
</syntaxhighlight>
Vous pouvez définir la distance avec les propriétés d'espacement de bordure:  
+
Vous pouvez définir la distance par l'intermédiaire des propriétés d'espacement de bordure:  
<delphi> Edit1.BorderSpacing.Left:=10;</delphi>
+
<syntaxhighlight lang=pascal> Edit1.BorderSpacing.Left:=10;</syntaxhighlight>
 
La chose même peut être fait avec la méthode :  
 
La chose même peut être fait avec la méthode :  
<delphi> Edit1.AnchorToNeighbour(akLeft,10,Label1);</delphi>
+
<syntaxhighlight lang=pascal> Edit1.AnchorToNeighbour(akLeft,10,Label1);</syntaxhighlight>
  
 
==Notes==
 
==Notes==
Edit1.Left suivra Label1.Left Label1.Width, pas les d'autres autours.  
+
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.
Cela signifie, que le déplacement du Label1 déplacera Edit1.  
 
Mais le déplacement de Edit1 sera défait par la LCL.  
 
Si vous ancrez également le bon côté du Label1 au côté gauche de Edit1,  
 
vous avez créé un cercle, et ceci peut résulter que quelques autres propriétés automatiques de taille dans une boucle infinie. La détection des cercles n'est pourtant pas mis en application.
 
  
 
=Exemple 2=
 
=Exemple 2=
  
Vous pouvez ancrer le côté supérieur du Edit pour suivre le côté supérieur du Label:  
+
Vous pouvez ancrer le côté supérieur du contrôle Edit pour suivre le côté supérieur du Label:  
 
<pre>
 
<pre>
 
+--------+ +-------+
 
+--------+ +-------+
Line 43: Line 34:
 
           +-------+
 
           +-------+
 
</pre>
 
</pre>
<delphi>
+
<syntaxhighlight lang=pascal>
 
Edit1.AnchorSide[akTop].Side:=asrTop;
 
Edit1.AnchorSide[akTop].Side:=asrTop;
 
Edit1.AnchorSide[akTop].Control:=Label1;
 
Edit1.AnchorSide[akTop].Control:=Label1;
 
Edit1.Anchors:=Edit1.Anchors+[akTop];
 
Edit1.Anchors:=Edit1.Anchors+[akTop];
</delphi>
+
</syntaxhighlight>
 
La même chose peut être fait avec la méthode:  
 
La même chose peut être fait avec la méthode:  
<delphi>Edit1.AnchorParallel(akTop,0,Label1);</delphi>
+
<syntaxhighlight lang=pascal>Edit1.AnchorParallel(akTop,0,Label1);</syntaxhighlight>
  
 
=Exemple 3=
 
=Exemple 3=
Line 61: Line 52:
 
           +-------+
 
           +-------+
 
</pre>
 
</pre>
<delphi>
+
<syntaxhighlight lang=pascal>
 
Edit1.AnchorSide[akTop].Side:=asrCenter;
 
Edit1.AnchorSide[akTop].Side:=asrCenter;
 
Edit1.AnchorSide[akTop].Control:=Label1;
 
Edit1.AnchorSide[akTop].Control:=Label1;
 
Edit1.Anchors:=Edit1.Anchors+[akTop]-[akBottom];
 
Edit1.Anchors:=Edit1.Anchors+[akTop]-[akBottom];
</delphi>
+
</syntaxhighlight>
 
La même chose peut être fait avec la méthode:  
 
La même chose peut être fait avec la méthode:  
<delphi>Edit1.AnchorVerticalCenterTo(Label1);</delphi>
+
<syntaxhighlight lang=pascal>Edit1.AnchorVerticalCenterTo(Label1);</syntaxhighlight>
  
Evidemment Ancrer le côté inférieur du Edit1 ne se comprend pas en centrant.
+
Evidemment, Ancrer le côté inférieur du Edit1 n'a pas de sens avec le centrage.
  
 
=Nouvelle propriété=
 
=Nouvelle propriété=
<delphi>property AnchorSide[Kind: TAnchorKind]: TAnchorSide read GetAnchorSide;</delphi>
+
<syntaxhighlight lang=pascal>property AnchorSide[Kind: TAnchorKind]: TAnchorSide read GetAnchorSide;</syntaxhighlight>
Ceci n'est pas édité dans l'inspecteur d'objet. Vous pouvez l'éditer dans le concepteur par l'intermédiaire du rédacteur d'ancre  (Menu: View -> View anchor editor, or
+
Cette propriété n'est pas édité dans l'[http://wiki.lazarus.freepascal.org/IDE_Window:_Object_Inspector/fr inspecteur d' objets]. Vous pouvez l'éditer dans le concepteur par l'intermédiaire de l'éditeur d'ancres (Menu: Voir -> Afficher l'[http://wiki.lazarus.freepascal.org/IDE_Window:_Anchor_Editor/fr éditeur d'ancres], ou cliquez sur le bouton de propriété 'Anchors').
click on button of 'Anchors' property).
 
  
=Nouvelles méthodes pour configurer facilement des dispositions (d'objets) communes=
+
=Nouvelles méthodes pour configurer facilement des dispositions (de contrôles) communes=
<delphi>
+
<syntaxhighlight lang=pascal>
 
procedure AnchorToNeighbour(Side: TAnchorKind; Space: integer;
 
procedure AnchorToNeighbour(Side: TAnchorKind; Space: integer;
 
                             Sibling: TControl);
 
                             Sibling: TControl);
Line 84: Line 74:
 
procedure AnchorHorizontalCenterTo(Sibling: TControl);
 
procedure AnchorHorizontalCenterTo(Sibling: TControl);
 
procedure AnchorVerticalCenterTo(Sibling: TControl);
 
procedure AnchorVerticalCenterTo(Sibling: TControl);
</delphi>
+
</syntaxhighlight>
 +
 
 +
=See also=
 +
 
 +
*[[Autosize / Layout]]
 +
*[[Example: Anchors. How to reliably align dynamically created controls under changing visibility]]

Latest revision as of 08:11, 9 February 2020

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