Prise en charge des styles VCL pour les résolutions élevées (High DPI)

De RAD Studio
Aller à : navigation, rechercher

Dans RAD Studio 10.4, l'architecture de styles VCL a été significativement étendue pour prendre en charge les images haute résolution (High DPI) et les moniteurs 4K.

Les versions précédentes de RAD Studio utilisaient une image unique pour l'ensemble des éléments graphiques d'un style, et des informations spécifiques sur les tailles des éléments spécifiés.

Maintenant, tous les éléments graphiques sont automatiquement mis à l'échelle conformément à la résolution du moniteur sur lequel l'élément est affiché. Cela signifie que la mise à l'échelle dépend de la résolution DPI de l'ordinateur cible ou du moniteur en cours, en cas de systèmes multi-moniteurs.

Le concepteur de styles permet maintenant d'ajouter des images supplémentaires pour des objets spécifiques, ainsi que pour des résolutions différentes.

Le nom des nouveaux éléments est basé sur un nom conventionnel composé du nom de l'objet + Informations DPI, puis un trait de soulignement séparant le nom des informations de taille, selon le format suivant :

  • [name]_15x (pour les DPI de 150%)
  • [name]_20x (pour les DPI de 200%)

RAD Studio 10.4 n'ajoute des éléments que pour les DPI de 150 % et 200 % pour la plupart des styles VCL livrés avec le produit.

Un style VCL, (*.vsf file), comprend maintenant des graphiques 1,5x et 2x pour les éléments à taille fixe comme les flèches, les icônes DB Navigator et les éléments devant être mis à l'échelle.

L'arborescence Object d'un style comporte des éléments supplémentaires liés aux graphiques à haute résolution.

Bitmap Style Designer.png

Les éléments d'un style prenant en charge la mise à l'échelle avec plusieurs images de styles sont :

  • Fiche : boutons de titre
  • Case à cocher : glyphe
  • Bouton radio : glyphe
  • Barre de défilement : flèches
  • Zone de liste déroulante : flèche de bouton
  • Barre graduée : éléments
  • Barre de contrôle : barre de redimensionnement
  • Barre d'état : barre de redimensionnement
  • Panneau de catégories : chevrons
  • Boutons de catégorie : chevrons
  • Navigateur de BD : icônes de boutons
  • Grille de BD : icônes du curseur
  • Lecteur multimédia : icônes de boutons
  • SearchEdit : icônes

La propriété de version des styles High-DPI mis à jour est 2.0 (voir les propriétés de l'arborescence Objects dans l'outil Concepteur de styles de bitmaps) :

Bitmap style designer objects.png

Remarque: Le style VCL High-DPI s'affiche incorrectement dans les versions de RAD Studio antérieures à 10.4. L'outil du concepteur de styles de bitmaps a été amélioré pour fonctionner avec des éléments pour différentes résolutions DPI.

Les styles VCL avec une prise en charge High-DPI apparaissent dans la section High-DPI Optimized de la liste de styles dans la boîte de dialogue Options de projet :

VCL Styles.png

Changements dans l'API des styles

L'API des styles a été complètement modifiée pour permettre de mettre à l'échelle des éléments en fonction de n'importe quelle résolution DPI en choisissant l'élément de DPI optimal en tant que source. Par exemple, utiliser Arrow_20x pour une DPI de 175%.

Maintenant, l'API des styles a une fonctionnalité de mise à l'échelle qui détecte automatiquement les élements pour la mise à l'échelle. Cela peut fonctionner avec d'anciens styles (sans éléments High-DPI) et avec les nouveaux styles VCL assurant la prise en charge High-DPI. Si un style VCL n'inclut pas d'élément High-DPI, l'API des styles met à l'échelle les éléments existants. Toutes les méthodes ont maintenant un paramètre DPI pour les classes Hook de style VCL.

La prise en charge High-DPI a été ajoutée aux classes Hook de style VCL avec des améliorations dans l'ensemble du code. Un paramètre DPI a été ajouté à toutes les méthodes de dessin et aux méthodes permettant de détecter des métriques système. Plus particulièrement, la classe TFormStyleHook (appliquant le style VCL pour TCustomForm) a été considérablement modifiée.

Remarque: Vous devez activer l'option Reconnaissance DPI "Per-Monitor v2"pour qu'une application fonctionne correctement sur des systèmes High-DPI (Windows 10).

Nouveaux styles High DPI

RAD Studio 10.4 a actualisé un grand nombre de styles VCL pour prendre en charge le mode High-DPI. Cela inclut les styles suivants :

  • Aqua Light Slate
  • Glow
  • Iceberg Classico
  • Lavender Classico
  • Sky
  • Slate Classico
  • Tablet Dark
  • Tablet Light
  • Windows 10
  • Windows 10 Blue
  • Windows 10 Dark
  • Windows 10 Green
  • Windows 10 Purple
  • Windows 10 SlateGray

Stylage par contrôle

Auparavant, la bibliothèque VCL ne permettait de sélectionner qu'un seul style (ou aucun style) pour l'ensemble de l'application

Depuis 10.4, la bibliothèque VCL vous permet d'utiliser plusieurs styles VCL en même temps dans différentes parties d'une application, ainsi que d'avoir certains éléments par défaut dans le thème par défaut de la plate-forme.

Différentes fiches d'une application peuvent utiliser des styles différents et les différents contrôles visuels d'une même fiche peuvent aussi utiliser des styles différents.

La nouvelle propriété TControl.StyleName contrôle cette nouvelle fonctionnalité en utilisant le nom du style du contrôle donné. Ce qui signifie que si cette propriété est vide, le style du contrôle parent est utilisé.

Comme son nom l'indique, le stylage par contrôle permet à un développeur d'appliquer différents styles pour les contrôles et les fiches d'une même application. Il faut d'abord ajouter plusieurs styles à votre application, ce qui vous permettra ensuite de les utiliser. Cette fonctionnalité ne fonctionne que si l'un des styles VCL est activé.

Voici l'exemple d'une fiche dotée de cinq boutons utilisant 5 styles différents :

Buttons.png

Différentes approches permettent d'ajuster le style des différentes fiches et contrôles d'une application VCL :

1. Ajustez la liste de styles dans Options de projet.

2. Utilisez la propriété TControl.StyleName pour définir le style spécifique de chaque contrôle ou de chaque fiche. La valeur de StyleName doit être l'un des noms de styles définis dans Options de projet. Un contrôle peut utiliser la valeur StyleName définie pour son contrôle parent. Vous pouvez donc définir la propriété StyleName d'une fiche pour qu'elle ait un style spécifique utilisé par tous ses contrôles.

Par défaut, TControl.StyleName est vide et le contrôle utilise un style par défaut. Vous pouvez définir StyleName sur Windows pour désactiver la possibilité d'appliquer un style pour un contrôle ou une fiche. Si vous définissez un nom de style qui ne fait pas partie des styles VCL chargés, le contrôle utilisera le style par défaut.

3. Vous pouvez aussi définir un style spécifique pour les dialogues communs. Utilisez la propriété TStyleManager.DialogsStyleName pour cela. Cette propriété est vide par défaut et les dialogues communs utilisent le style par défaut de l'application.

4. Vous pouvez définir le style d'application par Windows. Cela signifie que si la propriété StyleName d'un contrôle ou d'une fiche est vide, le style Windows sera utilisé et le style VCL sera désactivé.

Pour désactiver cette fonctionnalité, vous devez définir la propriété TStyleManager.UseSystemStyleAsDefault sur True. Utilisez cette propriété si vous ne voulez activer les styles VCL que pour certaines fiches pour lesquelles vous définirez la propriété StyleName. Sachez toutefois que les styles VCL doivent être activés dans tous les cas.

Le mécanisme décrit au point 4 ci-dessus vous permet d'utiliser des composants tierce partie ne supportant pas les styles VCL au sein d'une application stylée, ce qui était auparavant assez complexe. La nouvelle architecture offre plus de souplesse pour utiliser des contrôles stylés, non stylés et des fiches, ainsi que des contrôles tierce partie dans devoir pour autant abandonner les styles VCL.

Remarque: Le stylage par contrôle n'est pas appliqué automatiquement aux contrôles tierce partie. Pour prendre en charge cette fonctionnalité, un contrôle doit utiliser le code de la méthode Vcl.Themes.StyleServices avec le paramètre TControl. Par exemple, StyleServices(Self).DrawElement.

Améliorations relatives aux performances de styles

Pour améliorer les performances de styles VCL, RAD Studio 10.4 a ajouté la capacité à utiliser un tampon de bitmap au contrôle image que les contrôles enfant peuvent utiliser pour obtenir l'image parent. Les contrôles peuvent copier les rectanges de l'image depuis ce tampon au lieu d'appeler le dessin de l'ensemble des contrôles parent. Cette optimisation s'avère être particulièrement utile dans le cas où plusieurs TGroupBox sont dotés de TRadio.

Pour désactiver cette fonctionnalité, vous devez définir la propriété TStyleManager.UseParentPaintBuffers sur True.

Remarque: Cette fonctionnalité ne fonctionne que si un style VCL est actif et utilise une quantité de mémoire significative pour stocker les images.