Utilisation des fiches popup dans FireMonkey

De RAD Studio
Aller à : navigation, rechercher

Remonter à Conception d'applications FireMonkey


A propos des fiches popup

FireMonkey prend en charge les fiches popup. Les fiches popup sont définies dans la classe TCommonCustomForm. Les propriétés les plus importantes des fiches popup sont FormStyle et ParentForm.

Propriété TCommonCustomForm.FormStyle

La propriété FormStyle définit le comportement de votre fiche. FormStyle peut avoir l'une des valeurs suivantes : Normal, StayOnTop et Popup. La signification des valeurs Normal et StayOnTop est assez simple. Normal définit une fiche ordinaire et StayOnTop définit une fiche ordinaire qui reste affichée au-dessus du bureau et des autres fiches de l'application.

Sachez que la VCL possède une propriété similaire, TCustomForm.FormStyle, ayant deux valeurs supplémentaires : fsMDIChild et fsMDIForm. Ces valeurs ne sont pas définies dans FireMonkey car leur signification ne concerne que la plate-forme Windows.
Comparez FormStyle à la propriété StyleBook qui définit le style visible d'une fiche.

L'option Popup définit une fiche popup spéciale qui est utilisée dans les contrôles Liste déroulante et les menus. Les fiches popup sont dotées du comportement spécifique suivant :

  • Les fiches popup ne peuvent pas être actives. Toutes les fiches de ce type appartiennent à la liste PopupForms dans la classe TScreen. PopupFormCount définit le nombre de fiches popup actuellement créé dans l'application.
  • Sur les plates-formes mobiles, les fiches ordinaires sont toujours affichées en mode plein écran, mais les fiches popup peuvent uniquement occuper une partie du bureau.
  • Les fiches popup ne restent pas visibles longtemps. Si vous cliquez à l'aide de la souris (ou via une interaction tactile sur le pavé tactile) à l'extérieur de la fiche popup, cette dernière se ferme. Plusieurs fiches popup peuvent être affichées simultanément ; ces fiches popup peuvent avoir des relations d'appartenance.

Typiquement, les fiches popup sont dotées des propriétés suivantes :

BorderStyle := None; // No visible border (not resizable) 
Transparency := True;  // pop-up form is transparent 

Propriété TCommonCustomForm.ParentForm

La propriété ParentForm définit les relations d'appartenance entre fiches. La valeur de ParentForm est définie lorsque vous modifiez la propriété Parent. Si Parent est une fiche, ParentForm est définie comme étant égale à Parent. Sinon, ParentForm est définie comme étant égale à la fiche à laquelle le parent appartient.

Après chaque modification de la fiche ParentForm, le système exécute la méthode virtuelle DoParentFormChanged.

Sachez que toute modification des propriétés FormStyle, BorderStyle, ParentForm oblige la recréation de la fiche en cours, de l'ensemble de ses contrôles et de l'ensemble de ses fiches enfant. Par conséquent, il est déconseillé de modifier l'une de ces propriétés à l'exécution, à partir du moment où une fiche est déjà affichée à l'écran.

Utilisation de la classe TCustomPopupForm

Pour simplifier la création des fiches popup, FireMonkey définit la classe spéciale TCustomPopupForm. Les classes TPopup (dans CreatePopupForm), TComboEdit, TPopupBox, TMenuBar et les autres classes similaires utilisent TCustomPopupForm.

Par défaut, les fiches TCustomPopupForm ont un arrière-plan transparent (Transparency := True) et n'ont pas de cadre (BorderStyle := None). Lorsqu'une fiche TCustomPopupForm est fermée, elle est automatiquement détruite. Lorsqu'une fiche TCustomPopupForm est créée, le système ne recherche pas de fichier FMX lié à la fiche. Ce que signifie que la classe TCustomPopupForm est conçue pour être utilisée à l'exécution.

Les fiches TCustomPopupForm utilisent le constructeur suivant :

 constructor Create(AOwner: TComponent; AStyleBook: TStyleBook = nil; APlacementTarget: TControl = nil); reintroduce;

Ici AStyleBook spécifie les styles utilisés par une fiche, APlacementTarget spécifie le contrôle près duquel la fiche doit apparaître.

Propriétés importantes de TCustomPopupForm

Comme les fiches TCustomPopupForm n'ont pas de cadre visible et ont un arrière-plan transparent, elles ne s'étalent pas au-delà des limites de l'écran. Les coordonnées physiques d'une fiche (Position, Height, Width) ne sont pas utilisées pour le positionnement. Le positionnement des fiches TCustomPopupForm est effectué à partir d'autres propriétés : Placement, PlacementTarget, PlacementRectangle, ScreenPlacementRect, Size. Il est déconseillé de modifier explicitement les propriétés Position, Height, Width.

PlacementTarget pointe sur un contrôle cible par rapport auquel la fiche TCustomPopupForm est positionnée. Désormais, nous utiliserons le terme adhésion ou adhérer pour spécifier le positionnement de la fiche popup par rapport au contrôle cible placé à proximité. Si PlacementTarget est spécifiée, les coordonnées de la fiche sont exécutées par rapport à ce contrôle PlacementTarget.

Si PlacementTarget n'est pas défini et que TCustomPopupForm possède un ParentForm, le TCustomPopupForm est positionné par rapport à son parent. Si PlacementTarget et ParentForm ne sont pas définis, TCustomPopupForm est positionné par rapport au coin supérieur gauche de l'écran (fenêtre principale).

PlacementRectangle définit les coordonnées du rectangle auquel la fiche adhère. Les coordonnées écran de PlacementRectangle sont calculées par rapport à PlacementTarget (si cette valeur est spécifiée). Sinon, les coordonnées écran sont calculées par rapport au coin supérieur gauche de l'écran. Les règles suivantes s'appliquent :

ScreenPlacementRect définit les coordonnées écran du rectangle auquel la fiche adhère en tenant compte des propriétés PlacementRectangle et PlacementTarget.

Placement définit comment une fiche popup est positionnée par rapport à un rectangle spécifié par une propriété comme ScreenPlacementRect, par rapport à l'écran ou à la position de la souris (périphérique de pointage). TPlacement définit les valeurs possibles de Placement. La valeur par défaut ordinaire est Bottom ; elle définit que la fiche popup adhère au bas du rectangle cible. La figure suivante illustre la valeur TopCenter :

Rectangle de placement à l'écran

Dans la figure, ScreenPlacementRect est le rectangle fuchsia du bouton Show popup.

Padding, comme pour les fiches ordinaires, définit les indentations par rapport aux limites de la zone rectangulaire d'une fiche. Tous les contrôles enfant de la fiche sont alignés conformément à ces indentations. La valeur par défaut est 8 ; elle est utilisée pour faire en sorte que les effets, tels que les ombres par exemple, ne coupent pas les limites physiques d'une fenêtre.

Size définit la taille de zone de travail de la fiche popup en cours. Le rectangle de la taille physique de la fenêtre, illustré par le cadre composé de tirets rouges sur la figure, n'est pas intéressant. Le rectangle Size, représenté sur la figure par le cadre de tirets verts, spécifie les dimensions qui déterminent l'alignement des contrôles. Les dimensions de la fiche (ClientWidth et ClientHeight) sont définies automatiquement en fonction de Size et Padding. Si PlacementRectangle est définie et que Placement vaut Absolute, Size est ignorée.

ContentPadding définit les indentations par rapport à la zone client d'une fiche popup. L'adhésion à la fiche popup est exécutée sur les limites de ce "rectangle de remplissage" indenté.

ScreenContentRect définit les coordonnées écran du "rectangle de remplissage" sur lequel des limites adhérant à une fiche popup sont implémentées.

Tout le contenu utile d'une fiche popup est positionné à l'intérieur de ce "rectangle de remplissage". Sachez que certains "éléments décoratifs", comme une pointe triangulaire apparaissant sur le côté d'un panneau TCalloutPanel peuvent être positionnés à l'extérieur du rectangle de remplissage. Ceci est illustré par la figure suivante :

Pointes triangulaires

Offset définit le décalage du "rectangle de remplissage" par rapport au rectangle client d'une fiche popup. Définit le nombre de pixels selon lequel déplacer une fiche popup par rapport à la position de la fiche obtenue en prenant en compte toutes les propriétés de positionnement présentées précédemment. La direction Offset dépend de la valeur de Placement. La propriété Offset est utilisée par exemple dans des menus à niveaux multiples lorsque les fiches popup des sous-menus sont placées en superposition d'une fiche d'un niveau inférieur.

Fiche popup - propriété Offset

DragWithParent spécifie si le TCustomPopupForm en cours peut être glissé une fois qu'il est affiché. Par exemple, si DragWithParent vaut True, TCustomPopupForm est glissé avec sa fiche parent lorsque celle-ci est la cible d'une opération de glisser-déplacer. Lorsque Placement vaut Mouse ou MouseCenter, la fiche popup suit le mouvement du curseur de la souris. Sur les périphériques mobiles, après un changement d'orientation (portrait/paysage), la fiche popup peut changer de position afin de ne pas être masquée partiellement par les limites de l'écran.

Voir aussi