Afficher : Delphi C++
Préférences d'affichage

Personnalisation des applications FireMonkey avec les styles

De RAD Studio

Remonter à Conception d'applications FireMonkey


Les contrôles FireMonkey sont des arrangements d'une arborescence de sous-contrôles, de formes primitives et de pinceaux, décorés avec des effets. Ces compositions sont définies sous forme de styles, stockés dans un livre de styles. Les éléments individuels d'un style sont appelés en interne ressources. Etant donné que ce terme a plusieurs autres significations, le terme ressource de style est utilisé pour plus de clarté. Les styles fournissent un grand niveau de personnalisation sans sous-classement.

Les styles FireMonkey fournis avec le produit résident dans :

C:\Program Files\Embarcadero\RAD Studio\n.n\Redist\styles\Fmx

Sommaire

Styles par défaut

Dans FireMonkey, chaque classe de contrôle a un style par défaut, codé en dur par plate-forme.

Pour voir les définitions de styles dans le Concepteur de styles FireMonkey :

  1. Déposez un contrôle sur une fiche dans le Concepteur de fiches.
  2. Cliquez avec le bouton droit sur le contrôle et choisissez Modifier le style par défaut.

Cela crée une copie du style interne codé en dur. Par exemple, le style par défaut de FMX.StdCtrls.TPanel est défini simplement comme suit :

  • panelstyle: TRectangle

Le nom de la ressource de style qui définit le style est "panelstyle". Il fait référence à un TRectangle. L'apparence de ce rectangle peut être changée dans le Concepteur de styles. Alors, chaque TPanel de la fiche aura cette apparence par défaut.

Mais il n'y a pas de règle spécifiant qu'un TPanel doit être représenté par un TRectangle. Un TRoundRect ou un TEllipse fonctionnerait. Cela n'a pas de sens, mais ça pourrait même être un TCalendar. Même les contrôles simples peuvent avoir une composition complexe.

Même des contrôles simples peuvent être une composition complexe. Considérons FMX.StdCtrls.TCheckBox, qui ressemble à ceci :

  • checkboxstyle: TLayout (le contrôle entier)
    • TLayout (la disposition de la zone)
      • background: TRectangle (la zone elle-même, qui est réellement une composition de :)
        • TGlowEffect (brille quand le contrôle détient la focalisation)
        • TRectangle (le rectangle extérieur qui forme la zone)
        • TRectangle (le rectangle intérieur)
        • TColorAnimation (animation de couleur quand la souris passe dessus)
        • TColorAnimation (et en arrière)
        • checkmark: TPath (la coche à l'intérieur de la zone, dessinée sous forme d'un chemin, qui a :)
          • TColorAnimation (sa propre animation de couleur quand la coche est activée ou désactivée)
    • text: TText (et en arrière sous le niveau supérieur, le libellé texte)

Le style est nommé, afin qu'il puisse être trouvé et utilisé. En outre, certains sous-éléments sont nommés, afin qu'ils puissent être référencés. Quand la propriété IsChecked est basculée, la "coche" a sa visibilité changée (en animant l'opacité de sa couleur de unie à transparente). La définition du texte du TCheckBox définit la propriété Text du TText sous-jacent nommé "text".

Nommage et référencement des ressources

Deux propriétés avec des noms similaires forment les liens entre un contrôle, son style et ses sous-composants.

  • La propriété StyleName est le nom par lequel un style ou un sous-composant de style est connu des autres et peut être trouvé.
  • La propriété StyleLookup d'un contrôle est définie sur le nom de la ressource style désirée afin d'adopter ce style pour le contrôle spécifique. Quand StyleLookUp est vide, le style par défaut est utilisé.
  • Les sous-composants peuvent être trouvés en appelant FindStyleResource avec le nom désiré.

Un contrôle a deux propriétés car il peut être stylé, et il peut être un style (ou partie d'un style). Des composants plus simples tels que les formes ne peuvent pas être stylés, et peuvent être seulement un élément de style.

Stockage des ressources de style : TStyleBook

Une collection de styles pour une fiche est représentée par un objet TStyleBook. Un de ces objets est automatiquement créé si nécessaire quand le Concepteur de styles est ouvert.

Pour ouvrir le concepteur de styles FireMonkey :

  • Cliquez avec le bouton droit sur un contrôle et sélectionnez :
    • Modifier le style par défaut
    • Modifier un style personnalisé

Le nouvel objet créé est défini en tant que propriété StyleBook de la fiche, il prend donc effet pour la fiche.

Une fiche peut avoir plusieurs objets TStyleBook. La propriété StyleBook de la fiche peut référencer ces objets, un à la fois, ou elle peut être définie sur nil, ce qui permet à la fiche de rétablir seulement les styles par défaut codés en dur.

Le Concepteur de styles FireMonkey modifie les styles pour un seul TStyleBook à la fois. Double-cliquer sur un TStyleBook d'une fiche ouvre le Concepteur de styles avec ces styles. Le Concepteur de styles peut enregistrer le TStyleBook sous un format texte dans un fichier .style, et il peut charger un tel fichier. Le jeu complet de styles par défaut codés en dur peut aussi être chargé dans le Concepteur de styles.

Styles personnalisés

De nouveaux styles peuvent être créés en modifiant les styles par défaut, ou en démarrant à partir de rien avec un composant unique.

  • Pour modifier un style par défaut, cliquez avec le bouton droit sur un contrôle sur le Concepteur de fiches et sélectionnez Modifier un style personnalisé. Le nom de style généré est dérivé du nom du contrôle, vous pouvez donc d'abord enregistrer une étape en choisissant un nom correct pour le contrôle. Le nom généré est assigné en tant que propriété StyleLookup du contrôle, il prend ainsi effet pour ce contrôle. Le nouveau style est une copie du style en cours du contrôle.
  • Des styles totalement nouveaux peuvent être créés en modifiant un fichier .style et en le chargeant, même en utilisant des composants qui ne sont pas disponibles dans la Palette d'outils. Par exemple, après l'enregistrement du jeu de styles en cours, modifiez le fichier en ajoutant avant le end final :
 object TBrushObject
   StyleName = 'somebrush'
 end

Styles imbriqués

Des styles peuvent se référer à d'autres composants stylés. Comme toujours, les styles sont trouvés par leurs noms de niveau supérieur dans le TStyleBook. Par exemple, pour utiliser le même dégradé :

  1. Dans le Concepteur de styles FireMonkey, enregistrez les styles existants dans un fichier .style.
  2. Modifiez le fichier avec un éditeur de texte pour créer un TBrushObject. Utilisez un StyleName approprié.
  3. Chargez le fichier .style.
  4. Sélectionnez le nouveau style défini afin qu'il apparaisse dans l'inspecteur d'objets.
  5. Ouvrez la propriété Brush :
    1. Modifiez la propriété Gradient avec le Concepteur de pinceaux (choisissez Modifier dans le menu déroulant de la valeur de la propriété).
    2. Définissez la propriété Kind sur bkGradient.
  6. Pour chaque composant utilisant le dégradé, par exemple, avec la propriété Fill d'un TRectangle :
    1. Définissez la propriété Kind sur bkResource.
    2. Ouvrez la propriété Resource (un TBrushResource) et définissez la propriété StyleLookup sur le nom du dégradé de l'étape 2.

Séquence de recherche des ressources de style

Pour trouver son style, un contrôle parcourt la séquence approximative suivante, en s'arrêtant à la première correspondance :

  1. Si la propriété StyleBook de la fiche est définie, ce TStyleBook est recherché en utilisant deux noms :
    1. La propriété StyleLookup du contrôle, si elle est définie.
    2. Un nom par défaut construit à partir du nom de la classe du contrôle :
      1. Enlevez la première lettre (présumée être le préfixe 'T' du schéma de nommage des classes standard).
      2. Ajoutez 'style'.
  2. Les styles par défaut codés en dur sont recherchés en utilisant trois noms :
    1. La propriété StyleLookup du contrôle, si elle est définie.
    2. Le nom par défaut construit à partir du nom de la classe du contrôle.
    3. Un nom par défaut construit à partir du nom de la classe parent du contrôle, en utilisant les mêmes étapes.

Par exemple, les noms par défaut pour TPanel sont "Panelstyle" et "Controlstyle". Pour TCalloutPanel, les noms par défaut sont "CalloutPanelstyle" et "Panelstyle".

La correspondance du nom n'est pas sensible à la casse. Si aucune correspondance n'est trouvée, le contrôle n'a pas de contenu et est en réalité invisible. Le code qui dépend de la recherche des sous-composants échouera. Cela devrait seulement se produire pour les contrôles personnalisés incomplets ou incorrectement regroupés, puisque tous les contrôles intégrés ont des styles codés en dur correspondants. Les descendants directs des classes intégrées devraient avoir leur contenu de classe de base ; les descendants de seconde génération devraient être vides.

Style des fiches

Bien que TForm n'est pas un contrôle ou une sous-classe de TStyledControl, il est aussi stylé. Sa propriété StyleLookup prend par défaut "backgroundstyle". La ressource de style par défaut avec ce StyleName est un TRectangle gris.

Quand elle est chargée, la propriété Align de la ressource est définie sur alContents pour remplir la fiche comme arrière-plan. C'est le premier objet dessiné, avant les autres enfants de la fiche.

Voir aussi

Autres langues