Utilisation du panneau relatif

De RAD Studio
Aller à : navigation, rechercher

Remonter à VCL


Le TRelativePanel est un contrôle de conteneur qui vous permet de positionner des contrôles enfant relatifs au panneau lui-même ou relatifs à d'autres contrôles enfant de ce panneau.

En raison de la nature non restrictive de ce contrôle, si vous ne respectez pas certaines directives, vous risquez de configurer des règles d'alignement conflictuelles.

Priorité des règles d'alignement

Vous devez absolument garder à l'esprit cette section lorsque vous utilisez le panneau relatif. Le processus de positionnement des enfants d'un panneau relatif s'exécute selon l'ordre suivant :

  1. AlignXxWithPanel : toute propriété "Align" ayant un rapport avec "Panel", par exemple AlignLeftWithPanel.
    • Le centrage de (AlignXxCenterWithPanel) est prioritaire par rapport aux alignements latéraux.
    • La gauche (left) est prioritaire sur la droite (right), le haut (top) sur le bas (bottom).
  2. AlignXxWith : le reste des propriétés "Align".
    • Le centrage de (AlignXxCenterWith) est prioritaire par rapport aux alignements latéraux.
    • La gauche (left) est prioritaire sur la droite (right), le haut (top) sur le bas (bottom).
  3. Alignements latéraux : LeftOf, RightOf, Above et Below.
    • La gauche (left) est prioritaire sur la droite (right), le dessus (above) sur le dessous (below).

L'ordre dans lequel les enfants sont positionnés lors des étapes 2 et 3 dépend de leur index dans le tableau des enfants. Si vous voulez qu'un contrôle "l'emporte" sur un autre dans un conflit d'alignement, définissez l'index du contrôle devant l'emporter sur une valeur supérieure.

Considérations spéciales

Alignement hors de vue (disparition des contrôles)

Il n'existe pas de moyen d'éviter de définir un alignement poussant un contrôle en dehors du panneau relatif. Dans ce cas, le contrôle disparaît du panneau. C'est intentionnel et cela peut s'avérer utile dans certains cas.

Dépendance circulaire

La relation entre les éléments à l'intérieur d'un TRelativePanel forme un graphe orienté. Une dépendance circulaire se produit lorsqu'un cycle existe dans ce graphe. Ce qui signifie que deux éléments dépendent l'un de l'autre, y compris par l'intermédiaire d'éléments.

Lorsque vous définissez une dépendance circulaire, le composant TRelativePanel la détecte et déclenche une exception. Si l'exception se produit en mode conception, le concepteur affiche un message d'erreur. Le code invoquant les membres EnableAlign ou Realign peuvent également déclencher l'exception.

Relations conflictuelles

Si vous définissez plusieurs alignements ciblant le même bord d'un contrôle, il se peut que vous rencontriez un conflit. Pour de plus amples informations sur les règles d'alignement prioritaires par rapport aux autres, reportez-vous à la section Priorité des règles d'alignement.

Alignements de bords opposés et auto-dimensionnement

Si vous définissez les alignements de bords opposés (gauche et droite ou haut et bas) d'un contrôle sur la même cible ("Panel" ou un autre contrôle frère), le contrôle affecté change automatiquement sa largeur ou sa hauteur pour qu'elle corresponde à une cible. Par exemple, si vous définissez à la fois AlignLeftWithPanel et AlignRightWithPanel pour un bouton, ce bouton change sa largeur pour qu'elle corresponde à la largeur du panneau relatif.

Ce comportement peut produire des situations inattendues. Par exemple, si vous définissez à la fois AlignLeftWithPanel| et AlignRightWithPanel pour un contrôle d'édition et que vous paramétrez ce contrôle pour qu'il se trouve à gauche (LeftOf) d'un contrôle de bouton, le contrôle d'édition suppose la largeur du panneau relatif, mais en raison de la règle de position "à gauche de", il "sort" du panneau relatif.

Voir aussi