Nouveautés
Remonter à Accueil
Remonter à Nouveautés des releases précédentes
La release RAD Studio 12.0 Athens contient les nouvelles fonctionnalités et améliorations suivantes :
Sommaire
- 1 Améliorations relatives à l'installateur
- 2 Nouvelles améliorations de l'EDI
- 3 Améliorations relatives au débogueur
- 4 Intégration de Skia
- 5 Compilateur Delphi
- 5.1 Littéraux chaîne longs et multilignes
- 5.2 NativeInt en tant qu’alias faible
- 5.3 Support des comparaisons NaN comme requis par l’IEEE
- 5.4 Avertissements améliorés dans les classes génériques
- 5.5 Nouveau symbole LLVM
- 5.6 Delphi exporte le graphe des instructions uses dans un fichier GraphViz
- 5.7 Améliorations de qualité
- 6 C++ Builder
- 7 Améliorations relatives à Delphi RTL et aux données
- 8 FireDAC
- 9 Modifications relatives à FireMonkey et à la VCL
- 9.1 VCL
- 9.1.1 MDI remaniée pour HighDPI et Styles
- 9.1.2 Contrôle TFormTabsBar
- 9.1.3 Fontes et écrans
- 9.1.4 Intégration de la plate-forme
- 9.1.5 Edge Browser
- 9.1.6 Prise en charge de la vue Mosaïque pour TListView
- 9.1.7 Enumérateur TControl
- 9.1.8 Nouvelle propriété de fiche ShowInTaskbar
- 9.1.9 Améliorations relatives aux gestionnaires de plates-formes de bureau Windows
- 9.1.10 Nouveau mode Double tampon
- 9.2 FireMonkey
- 9.1 VCL
- 10 ToolsAPI
- 11 Voir aussi
Améliorations relatives à l'installateur
Nouveau Gestionnaire de fonctionnalités
RAD Studio 12.0 Athens a amélioré l’interface utilisateur et le comportement d’installation des plates-formes et d’autres éléments en simplifiant les choix d’installation. Utilisez la boîte de dialogue Gestionnaire de fonctionnalités, anciennement Gestionnaire de plates-formes, pour sélectionner vos installations.
Toutes les fonctionnalités et options d’installation se trouvent sur un seul écran, avec les langages (Delphi ou C++) et les plates-formes cibles (Windows, iOS, etc.) au centre de l’écran. Les éléments supplémentaires sont affichés dans une liste sur la barre latérale droite.
Enfin, la barre inférieure du programme d’installation affiche des informations utiles, comme la différence d’espace disque utilisé (n Go). Un nouveau bouton Erreurs s’affiche là où il y a des erreurs. Utilisez-le pour prévisualiser le journal et ouvrir l’emplacement du fichier journal d’installation dans l'explorateur.
Mises à jour apportées aux bibliothèques
Voici les mises à jour apportées aux bibliothèques intégrées au programme d’installation du produit principal.
- Version intégrée de DUnitX mise à jour avec la version la plus récente des bibliothèques.
- Version d’Indy fournie avec RAD Studio et mise à jour avec la version la plus récente du référentiel Indy GitHub.
Améliorations de qualité relatives à GetIt
RAD Studio 12.0 Athens a la possibilité de charger simultanément plusieurs packages GetIt à partir d’un seul dossier sur votre disque dur. Ouvrez la boîte de dialogue Gestionnaire de packages GetIt, utilisez le nouveau bouton Charger plusieurs packages pour ouvrir une boîte de dialogue, puis sélectionnez plusieurs fichiers JSON avec les configurations de packages locaux GetIt.
Autres améliorations de qualité :
- L’outil en ligne de commande GetItCmd se connecte désormais à
GetItInstall.log
. - Le message d’erreur et les solutions de contournement pour compiler des projets avec des dépendances de package GetIt ont été améliorés.
- Installez les packages GetIt à partir de la page Bienvenue lorsque l’installation est effectuée « hors ligne » (avec l’image ISO).
Nouvelles améliorations de l'EDI
Les sections suivantes décrivent plusieurs améliorations apportées à différentes parties de l’EDI.
Déplacement des fonctionnalités obsolètes
Dans RAD Studio 12.0 Athens, nous supprimons certains outils anciens et non supportés de l’installation du produit principal, désormais disponibles sous forme d’add-ons :
- Outils de traduction VCL.
- Modélisation. Notez que vous devez installer cette fonctionnalité si vous voulez utiliser le formatage de code Delphi, et qu’elle est disponible dans la section Technologie de l’installateur.
Recherche
La boîte de dialogue Chercher dans les fichiers dispose désormais d’une nouvelle option Masque d'exclusion du sous-répertoire, qui exclut des dossiers spécifiques de la recherche effectuée avec les fonctionnalités Chercher dans les répertoires et Inclure les sous-répertoires. Il y a des exclusions par défaut pour Delphi et C++, et la boîte de dialogue a été agrandie pour afficher le nouveau contenu.
Utilisation des ressources GDI
Le nombre de bitmaps GDI est désormais inférieur dans l’EDI. Les images peuvent maintenant être dormantes si elles ne sont pas utilisées pendant plus d’une minute. Toutes les listes d’images de l’EDI, y compris celles pour les barres d’outils et les menus, les images des composants de la palette, etc., rendent leurs images dormantes lorsqu’elles ne sont pas utilisées.
CodeInsight et DelphiLSP
{product}} 12.0 Athens propose une mise à jour de la fonctionnalité « Invoquer automatiquement » de l’achèvement de code. Dans les versions de Delphi antérieures à 10.4, les fonctionnalités LSP et d’achèvement de code de RAD Studio s’invoquaient automatiquement après un court délai suivant une frappe. Vous pouviez ainsi saisir quelques lettres d’un symbole et attendre, la fenêtre d’achèvement s’affichait.
RAD Studio version 12.0 implémente à nouveau la fonctionnalité « Invoquer automatiquement ». Ce qui signifie que l’achèvement de code s’affiche dans les situations suivantes :
- Vous appuyez sur
Ctrl+Espace
ou saisissez “.
” (seulement à la saisie du point), comme dans 11.3. - Vous saisissez quelque chose et attendez un moment.
- Vous saisissez à l’intérieur d’un identificateur (il était auparavant invoqué au début de l’identificateur).
La fonctionnalité Invoquer automatiquement n’est pas activée par défaut. Pour l’activer, accédez à Options > Editeur > Langage > Delphi > Audit de code, puis assurez-vous que la case à cocher Invoquer automatiquement est cochée, et choisissez le délai dans le menu déroulant. Même si la case à cocher est désactivée, l’invocation automatique s’affiche lorsque vous appuyez sur “.
”.
Vous pouvez configurer la vitesse à laquelle la fenêtre d’achèvement s’affiche ou utiliser l’ancien comportement, c’est-à-dire que la fenêtre s’affiche uniquement lorsque vous saisissez “.” (seulement à la saisie du point) ou appuyez sur les touches Ctrl+Espace
.
L'appui sur (, [,
ou <
peut aussi déclencher l’achèvement de code automatiquement. Cela signifie que vous pouvez saisir un appel de méthode, générique, ou l'accesseur de tableau et voir la fenêtre d’achèvement s’afficher automatiquement. DelphiLSP tentera également d’afficher les types autorisés dans une déclaration <>
générique.
L’achèvement de code ajoute maintenant des crochets [ ]
pour les types tableau et place le point d'insertion à l’intérieur. La fenêtre d’achèvement de code peut afficher les touches qui affectent l’achèvement, par exemple Entrée, Espace, Echap
, etc.
Dans version 12.0, des éléments de menu ont été ajoutés au menu principal Chercher pour les fonctionnalités Aller à la définition et Aller à l’implémentation (Delphi) ou Aller à la définition et Aller à l’implémentation (C++), ce qui correspond à la combinaison de touches Ctrl+Maj+Haut/Bas
dans l’éditeur (notez que vous pouvez appuyer sur l’une des deux flèches ; les deux raccourcis fonctionnent de la même manière et permettent simplement de passer d'un emplacement à un autre). Cela garantit que l’interaction par les menus est plus évidente que des raccourcis invisibles.
Mots clés du code
RAD Studio 12.0 Athens inclut des mots clés du langage dans la liste d’achèvement. Les mots clés sont sélectionnés automatiquement avant les identificateurs. Ainsi, même lorsque l’achèvement de code est invoqué automatiquement quel que soit ce que vous saisissez, il est effectué correctement tant qu’il est valide.
Qualité du LSP Delphi
- Un élément a été ajouté au menu Outils pour redémarrer le serveur LSP en cas de besoin.
- La représentation des constantes de couleur pour l’achèvement de code a été améliorée. Lors de l'achèvement d'une constante de couleur, les couleurs sont plus grandes et dans un carré ; les valeurs hexadécimales et RVB sont affichées ; et les couleurs système s’affichent correctement (en respectant le thème du système, pas le thème de l’EDI). Cela inclut TColor et TAlphaColor.
Visual Assist pour C++
RAD Studio 12.0 Athens introduit l’intégration de Visual Assist, un outil de productivité C++ auparavant disponible uniquement pour Visual Studio. Visual Assist est un produit qui comporte beaucoup de fonctionnalités. Cette release inclut les fonctionnalités les plus essentielles et utiles pour la productivité dans les domaines de l’achèvement de code, plus un sous-ensemble de fonctionnalités de recherche, de navigation et de refactoring.
Parmi les fonctionnalités que Visual Assist apporte à C++Builder et C++ dans RAD Studio, citons notamment :
- Audit de code (activé par défaut, mais vous pouvez activer la précédente implémentation cquery LSP si vous le souhaitez) :
- Achèvement de code, achèvement des paramètres et audit de conseil.
- Refactorings :
- Renommer : pour renommer les symboles (méthodes, classes, etc.) dans votre groupe de projets.
- Ajouter Include : cliquez avec le bouton droit de la souris sur un symbole comme ‘vector’ ou ‘TButton’ pour que VA ajoute le fichier d’en-tête correct dans une instruction include en haut de l’unité.
- Créer une déclaration et Créer l'implémentation, deux fonctionnalités qui vous assistent dans la création de méthodes : saisissez une méthode dans une déclaration de type pour que VA crée automatiquement une implémentation vide ou saisissez une implémentation pour que VA ajoute la déclaration au type.
Navigations :
- Rechercher le symbole : trouvez n’importe quel symbole dans votre projet ou votre groupe de projets et en-têtes - ce peut être n’importe quel symbole que VA connaît grâce à l'analyse.
- Chercher les références : permet de chercher où un symbole (méthode, classe, etc.) est utilisé dans votre groupe de projets, plus une mini version qui cherche des références dans l’unité en cours.
- Aller à la définition et Aller à l’implémentation : cette fonctionnalité permet de permuter entre la déclaration et l'implémentation d’une méthode et est semblable à la fonctionnalité de Delphi (l’implémentation de cette fonctionnalité pour C++ a compté parmi les fonctionnalités les plus demandées de l’éditeur de code).
- Aller aux éléments associés : une fonctionnalité extraordinairement utile qui vous permet d’accéder à tous les éléments en relation avec un symbole (méthode, type, include, etc.), notamment le constructeur d’un type, les types ancêtre et descendant, les redéfinitions des ancêtres et descendants des méthodes virtuelles, etc.
Les fonctionnalités de Visual Assist sont un puissant ensemble d’outils de productivité, et nous sommes ravis d’avoir cette intégration initiale.
Nouvel expert App WinAPI pour C++
RAD Studio 12.0 Athens introduit un nouvel expert Application WinAPI pour C++ Builder.
Pour en créer une, il vous suffit d’ouvrir Fichier > Nouveau > WinAPI ou de visiter notre page de documentation pour suivre l’expert.
Améliorations générales relatives à l'EDI
Nouveaux concepteurs
RAD Studio 12.0 Athens a déplacé certains concepteurs de la bibliothèque KSVC dans le produit principal, notamment les concepteurs suivants :
- Editeur de liste de chaînes - Barre d’outils permettant de charger et d’enregistrer dans des fichiers texte, opérations standard sur le presse-papiers, plus une barre d’état avec les informations de position.
- Editeur de chaîne multiligne - Cette fonctionnalité est activée pour la propriété Hint de tous les contrôles et la propriété Caption de certains d’entre eux.
- Configuration Bouton rapide - Ajoute une configuration rapide pour TButton.
- Configuration Groupe de boutons radio rapide - Introduction d’un nouvel éditeur pour le contrôle Groupe de boutons radio.
- Configuration Volet rapide - Nouvelle boîte de dialogue de configuration pour le contrôle TPanel.
Mise en surbrillance de la syntaxe dans l’ensemble de l’EDI
RAD Studio 12.0 Athens ajoute la mise en surbrillance de la syntaxe à l’aide de la palette de couleurs de l’EDI :
- La mise en surbrillance est également ajoutée aux conseils du débogueur.
- La mise en surbrillance de la syntaxe a également été ajoutée aux messages en relation avec l'audit d'erreur dans le volet Structure.
- La vue Structure met en surbrillance les méthodes et les types.
- La barre d’outils de navigation met en surbrillance les méthodes et les types.
- La pile d’appels prend en charge la mise en surbrillance de la syntaxe pour les méthodes et les adresses ou les modules.
Plusieurs améliorations ont été apportées à la barre d'outils de navigation en haut de l’éditeur afin de rendre l’utilisation de la fonctionnalité plus intuitive et ses résultats plus clairs à comprendre. Voici certaines de ces améliorations :
- Les listes déroulantes disposent désormais d’indicateurs visuels à propos de leur fonction lorsqu’aucun texte n’a encore été saisi :
- Lorsque vous recherchez un type ou une méthode, initialement, tous les résultats sont affichés (auparavant, la fenêtre de résultats s’ouvrait vierge et n’affichait les résultats que si vous aviez saisi un terme de recherche).
- La syntaxe des résultats de la recherche est mise en surbrillance, et la correspondance de la recherche en cours est indiquée :
La barre d'outils de navigation suit désormais aussi les couleurs du thème de l’éditeur, pas du thème de l'EDI :
Améliorations générales de l'EDI
- La page Options > EDI > Enregistrement et récupération comporte une nouvelle case à cocher pour enregistrer l’état de l’éditeur.
- Les onglets de l’éditeur ont désormais un élément de menu Copier le chemin > , avec des sous-éléments pour le chemin complet, le nom de fichier uniquement et le dossier uniquement.
- L’éditeur vous permet maintenant de définir la hauteur de ligne sous forme d’un multiple de la taille de fonte (par exemple, 1.1).
- Les options de l’éditeur sont désormais une entrée de niveau supérieur dans la boîte de dialogue Options de l’EDI au lieu d’être imbriquées sous l’interface utilisateur.
- Les éléments Chercher du refactoring Delphi ont été déplacés dans un sous-menu : Chercher (menu principal) > Rechercher > Rechercher des symboles. Cela améliore les performances d’ouverture du menu.
- Les icônes de la gouttière, comme les points d'arrêt, sont maintenant mises à l'échelle de l’éditeur en fonction de la taille de la fonte. ToolsAPI INTACodeEditorState290 a de nouvelles propriétés CharWidth et CharHeight et une méthode Refresh.
- La pile d’appels et le journal d'événements de débogage permettent désormais aux utilisateurs de copier ces composants dans le Presse-papiers et de les sélectionner tous dans le menu contextuel.
- Il existe de nouveaux styles utilisés dans le concepteur VCL quand l’option ‘Reproduire le style système’ est activée, et que l’EDI fonctionne sous Windows 11, à la fois pour le mode clair et le mode sombre.
Améliorations de qualité relatives à l'EDI
On dénombre de nombreuses améliorations de qualité dans des domaines tels que :
- Recherche en ligne de l’éditeur.
- Conception de fiches haute résolution, notamment redimensionnement des fiches, placement de composants non visuels et extraction du concepteur de fiches entre plusieurs fenêtres.
Améliorations relatives au débogueur
Les versions précédentes avaient des délais étendus avant d’afficher un problème potentiel. RAD Studio version 12.0 a réduit ces délais à un délai initial de 6 secondes. Un clic sur le bouton Attendre rallonge le temps d’attente de 3 secondes (c’est-à-dire 9 secondes, 12 secondes) jusqu’à un maximum de 15 secondes.
Lorsque le kernel de débogage ne répond pas, une boîte de dialogue s’affiche, autorisant les utilisateurs à Attendre ou Terminer le processus. Cette amélioration s’applique à Win64, macOS, Linux, iOS et Android.
Autres améliorations relatives au débogueur
- Le débogage sur le simulateur iOS pour iOS 17 fonctionne, mais le débogage sur le périphérique avec iOS 17 n’est pas pris en charge. Cela est dû à une modification d’iOS affectant plusieurs fournisseurs non Apple.
- Xcode 15 est pris en charge pour l’exécution d'applications.
- Le LLDB macOS a été mis à jour.
- Le LLDB Linux a été mis à jour en conséquence.
- Les messages PAServer, y compris les conseils, s’afficheront dans le volet Messages de l'EDI.
- Le handle du thread du système d’exploitation s’affiche dans la vue Threads.
- L’affichage des registres FPU sur Mac Intel a été amélioré.
- Le débogage du code Delphi à l’aide de méthodes anonymes affiche les variables capturées.
- Le conseil du débogueur dans l’éditeur se met maintenant à l’échelle en fonction de la taille de fonte et dispose de la mise en surbrillance de la syntaxe.
- Les registres FPU et XMM s’affichent correctement pour Windows 64 bits avec LLDB, macOS et Linux.
- Les registres ST et XMM sont lus correctement pour les plates-formes Win64 C++.
- Les registres FPU et ST.XMM ont été modifiés sur Linux et macOS.
Intégration de Skia
RAD Studio 12.0 ajoute le support de Skia pour toutes les plates-formes FireMonkey prises en charge. La bibliothèque Skia prend entièrement en charge toutes les plates-formes supportées par RAD Studio Athens, aussi bien dans C++Builder que dans Delphi, y compris les récents ajouts du simulateur iOS ARM et de macOS ARM 64 bits.
RAD Studio effectue l'interfaçage avec Skia en exploitant le projet open-source Skia4Delphi mais inclut des capacités supplémentaires absentes des projets open-source, comme le pilote Vulkan.
Qu'est-ce que Skia
Skia4Delphi est une API graphique 2D multiplate-forme pour Delphi et C++Builder basée sur la bibliothèque graphique Skia de Google. Elle fournit une API 2D complète pour restituer les images sur les plates-formes supportées (mobile, bureau et serveur). Elle est compatible avec tous les frameworks (Console, FMX et VCL) et plates-formes RAD Studio.
Elle fournit des API 2D communes en effectuant l'abstraction des complexités dans l’implémentation des bibliothèques de bas niveau utilisées en arrière-plan, comme OpenGL, Vulkan, DirectX ou Metal, en implémentant des optimisations et de nouvelles fonctionnalités. Consultez la documentation Skia pour découvrir toutes les principales fonctionnalités et comment activer l’intégration Skia.
Contrôles UI basés sur Skia
L’intégration de la bibliothèque Skia offre aussi de nouveaux contrôles et composants natifs spécifiques. Ces contrôles sont uniquement disponibles si Skia est activée et déployée sur la plate-forme cible.
- TSkAnimatedImage : le contrôle qui charge et restitue les images animées, y compris les animations vectorielles.
- TSkLabel : implémente de nouvelles fonctionnalités qui n’étaient pas prises en charge par TLabel ou étaient difficiles à implémenter, comme :
- Familles de fonte ; (liste alternative de fontes comme dans CSS)
- Poids et slant de fonte ;
- Prise en charge de plusieurs styles dans le texte ;
- Prise en charge de BiDi (de droite à gauche) ;
- Prise en charge de l’alignement horizontal ;
- Prise en charge de la couleur d'arrière-plan sur certaines parties du texte ;
- Option de dimensionnement automatique ;
- Décorations avancées (soulignement ondulé, barré, ligne de tirets, etc.).
- TSkPaintBox : contrôle pour dessiner avec des API Skia directement à l’écran avec l’événement OnDraw.
- TSaAnimatedPaintBox : permet de définir la durée d’une animation et de dessiner la progression de cette animation à l’aide de l’API Skia par le biais de l’événement OnAnimationDraw.
- TSkSVG : contrôle pour l’affichage des SVG.
Rendu FireMonkey Skia
Avec la prise en charge de Skia, il est possible de remplacer le canevas par défaut provenant de FMX par un canevas basé sur Skia. Une fois Skia activée, tous les contrôles FMX seront automatiquement dessinés en utilisant l'implémentation basée sur Skia. Cela améliore les performances et la qualité des dessins pour la FMX (principalement sur les plates-formes mobiles) et l’intégralité de la bibliothèque.
Pour activer le rendu des applications en utilisant Skia, consultez notre page Documentation Skia.
Backend Vulkan
La bibliothèque Skia de RAD Studio offre la prise en charge du backend Vulkan pour Android et, facultativement, pour Windows. Le canevas Skia de RAD Studio utilise automatiquement Vulkan sur Android s’il est pris en charge, ce qui se traduit par des performances graphiques et une efficacité améliorées par rapport à OpenGLES. Pour activer Vulkan sur Windows lorsqu’il est pris en charge, définissez la valeur booléenne FMX.Types.GlobalUseVulkan sur True
et la valeur booléenne FMX.Skia.GlobalUseSkiaRasterWhenAvailable sur False
dans la section d'initialisation.
uses
System.StartUpCopy,
FMX.Forms,
FMX.Types,
FMX.Skia,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
GlobalUseSkia := True;
GlobalUseSkiaRasterWhenAvailable := False;
GlobalUseVulkan := True;
Application.Initialize;
...
False
pour la désactiver.Langage SKSL (Skia Shading Language)
Lorsque vous utilisez le rendu des applications Skia avec accélération par GPU au lieu du tramage, Firemonkey exploite le puissant langage SKSL pour restituer les effets et les filtres. Cette approche fournit des performances supérieures et améliore l’efficacité du canevas Skia.
La maintenance simplifiée représente l’un des principaux avantages liés à l’utilisation de SKSL pour créer des effets et des filtres. Une base de code de shader unique fonctionne de façon homogène sur toutes les plates-formes, éliminant la nécessité de plusieurs codes spécifiques à chaque API backend et garantissant des résultats uniformes.
Codec animé : encodeur WebP
La version de Skia intégrée à RAD Studio supporte l'encodage des images WebP animées. Avec la nouvelle base de codec animé de Firemonkey, il est possible de recenser de nouveaux encodeurs capables d’effectuer l'encodage et/ou le décodage.
WebP est l’un des formats les plus largement utilisés sur le Web grâce à sa capacité de compression supérieure au format JPEG, qui permet de réduire la taille des fichiers tout en maintenant une qualité supérieure. Il offre également des capacités d’animation similaires aux GIF, mais avec des trames sans perte pour supprimer la perte de qualité et/ou une certaine compression. En outre, il supporte la transparence, ce qui en fait un format hautement polyvalent. Consultez la documentation Skia Animated Codec pour voir des exemples et plus d’informations.
Gestion de l'imprimante et impression au format PDF
Lorsque Skia est activée, l’imprimante native de Firemonkey pour Windows utilise Skia comme backend pour l’imprimante physique et assure le support de toutes les autres plates-formes via l’impression de documents PDF, avec l’impression XPS facultative également disponible lorsque la cible est Windows. Sur iOS et Android, l’imprimante génère un fichier imprimable, qui sera automatiquement partagé en fin de traitement. Pour voir des exemples et plus d’informations, reportez-vous à la documentation Skia FireMonkey Printer.
Support Skia C++ Builder
RAD Studio Athens offre le support Skia4Delphi pour C++ Builder, y compris la démo principale du projet écrite en C++ pour aider les utilisateurs dans son implémentation. Pour accéder à la démo pendant l’installation de RAD Studio, installez les exemples ou visitez le référentiel GitHub d’Embarcadero pour la télécharger.
Démos Skia
Les démos Skia suivantes sont incluses avec l’installation.
Compilateur Delphi
La section suivante introduit les améliorations et mises à jour apportées au compilateur Delphi.
Littéraux chaîne longs et multilignes
RAD Studio 12.0 Athens introduit des modifications significatives dans la façon dont le compilateur Delphi gère les littéraux chaîne en lien avec la conception de chaîne en Pascal classique (chaîne courte) depuis les premières versions de Delphi.
Les littéraux chaîne peuvent maintenant dépasser 255 caractères ; en d’autres termes, les littéraux chaîne ne sont pas limités au type Pascal ShortString classique. Notez que la longueur d’une chaîne littérale peut toujours être restreinte par les limites de l’éditeur (à 4 000 caractères par ligne). Aucune modification n’a été apportée à la syntaxe ; vous pouvez simplement avoir une chaîne littérale sans guillemets plus longue que 255 caractères.
Le langage ajoute le support des chaînes multilignes. Une chaîne multiligne est introduite par un triple guillemet (’’’)
et une nouvelle ligne. Elle peut générer plusieurs lignes de code source et se termine par un triple guillemet de fermeture (’’’) dans une ligne sans aucun texte la précédant. Notez qu’il est incorrect d’avoir du texte supplémentaire au-delà du triple guillemet sur la première ligne. Ce qui importe, c’est qu’il n’est pas nécessaire de concaténer les lignes en chaînes à ligne unique avec un signe +
, comme auparavant.
Pour de plus amples information sur les littéraux chaîne longs et multilignes et les règles d’indentation, voir notre page de documentation Types de chaînes.
NativeInt en tant qu’alias faible
RAD Studio 12.0 Athens introduit un changement important dans le compilateur qui affecte principalement le fonctionnement de la surcharge pour certains types entiers et la compatibilité du code 32 bits et 64 bits. Le compilateur Delphi a un type “flottant” appelé NativeInt (ou NativeUInt), qui correspond au nombre de bits de la plate-forme.
Depuis RAD Studio 12.0, NativeInt est devenu un "alias faible", ce qui signifie que les utilisateurs ne peuvent plus l'utiliser en tant que type distinct. Vous trouverez des explications sur son utilisation et un exemple sur notre page NativeInt.
Support des comparaisons NaN comme requis par l’IEEE
L’IEEE exige que toutes les opérations de comparaison impliquant NaN renvoient false
. La règle précise : "IEEE 754 assigne la valeur de toutes les expressions relationnelles impliquant NaN. Dans la syntaxe de C, le prédicat x != y
a la valeur True
mais tous les autres, x < y
, x <= y
,x == y
, x >= y
et x > y
, ont la valeur False
chaque fois que x ou y ou les deux sont NaN..."
Le compilateur Delphi Win32 fonctionne maintenant conformément à cette règle. Pour en savoir plus, lisez notre page de documentation Formats de données internes.
Avertissements améliorés dans les classes génériques
Le code dans les classes génériques n’affichait pas les mêmes avertissements que le code non générique dans plusieurs scénarios. Le compilateur analyse maintenant les méthodes dans un type générique ou des méthodes génériques pour produire des conseils et des avertissements identiques aux méthodes standard pour afficher les messages suivants :
W1035 Return value of function '%s' might be undefined
W1036 Variable '%s' might not have been initialized
H2077 Value assigned to '%s' never used
H2164 Variable '%s' is declared but never used in '%s'
Voici des exemples de messages d’avertissement spécifiques extraits de notre message code test.
Warning: W1035 Return value of function 'TEStatic.Func<T1,TResult>.[0]' might be undefined
Warning: W1035 Return value of function 'TEStatic.Func<T1,T2,TResult>.[0]' might be undefined
Hint: H2077 Value assigned to 'G<T>.foo' never used
Nouveau symbole LLVM
RAD Studio Athens 12.0 a ajouté à tous les compilateurs Delphi basés sur LLVM le "symbole prédéfini LLVM pour faciliter la dépendance du code au backend du compilateur. Utilisez le symbole EXTERNALLINKER dans les versions récentes pour effectuer la même vérification, avec toutefois des résultats moins évidents et lisibles.
Delphi exporte le graphe des instructions uses dans un fichier GraphViz
Le compilateur Delphi a une nouvelle fonctionnalité pour aider les utilisateurs à comprendre la structure d’un projet et éviter les références d'unité circulaires inutiles, qui peuvent ralentir la compilation et provoquer des effets secondaires négatifs sur le compilateur lui-même lorsqu’elles sont utilisées avec d’autres fonctionnalités du langage. La possibilité de générer un graphe des instructions uses directement au niveau du compilateur (sans outil d’analyse distinct) peut s’avérer utile dans de nombreux autres scénarios, en général, pour comprendre la structure d’une application.
Le compilateur a une nouvelle option --graphviz
, qui génère un graphe des dépendances d'unité dans un fichier .gv GraphViz, qui peut ultérieurement être traité par divers outils et même en ligne.
Ou bien, les utilisateurs peuvent exclure des unités (individuellement ou par famille) du graphe :
--graphviz
Génère un fichier <exename>.gv.--graphviz-exclude:<UnitList>
Exclut des noms d’unités spécifiques de la sortie.
--graphviz-exclude:<UnitList>
peut inclure le caractère générique '*'
, et plusieurs patterns nom d'unité peuvent être spécifiés dans <UnitList>
séparés par un ';'
.
Par exemple :
--graphviz-exclude:System.*;VCL.*;FMX.*
exclut toutes les unités System, VCL et FireMonkey.
Prenez l’exemple d’une application simple avec une fiche principale, une boîte de dialogue secondaire et un module de données. Ils s'auto-référencent via des instructions uses dans l’interface ou la section implementation. Construisez-la avec la ligne de commande suivante (excluant les unités systèmes) :
dcc32 --graphviz --graphviz-exclude=System.*;Vcl.*;WinApi.* GraphTest.dpr
Cela générera le fichier .gv suivant, dans lequel le style=dashed est utilisé pour les instructions uses dans la section implementation :
digraph GraphTest {
GraphTest -> { GT_mainform GT_dialog GT_datamodule }
GT_mainform -> { GT_datamodule GT_dialog }
GT_datamodule
GT_dialog -> { GT_datamodule GT_mainform } [arrowhead=open,style=dashed]
}
Le fichier .gv inclut des informations détaillées sur les relations entre les unités. Il s’agit d’une fichier texte qui peut être analysé par un code personnalisé pour extraire des informations sur les cycles d’unités. Il peut également être utilisé directement pour générer un graphe (même si cela peut s’avérer très complexe pour un projet volumineux). Cet exemple spécifique produit un graphe comme celui-ci :
Améliorations de qualité
Les améliorations de qualité les plus notables relatives au compilateur incluent :
- Code généré optimisé pour les opérations div lorsque le diviseur est une constante
- Le compilateur utilise maintenant le répertoire de sortie de la documentation XML pour les artefacts XMLDoc comme prévu. Il utilisait le dossier C++ .hpp à la place.
- Le type de paramètre "limite supérieure" caché pour un paramètre tableau ouvert est passé de Integer à NativeInt, un alias de Integer ou Int64, selon la CPU cible. En conséquence, les paramètres de tableau ouvert Length, High et Low dans les compilateurs 64 bits renvoient maintenant une valeur 64 bits.
- Le compilateur Delphi affiche maintenant des informations détaillées en cas d’erreur de référence d'unité circulaire. Lorsque vous développez le message d'erreur, vous voyez désormais des informations supplémentaires concernant la séquence réelle de références d'unité conduisant à la référence d'unité circulaire, comme dans l'exemple suivant :
[dcc32 Fatal Error] GT_mainform.pas(7): F2047 Circular unit reference to 'GT_MainForm'
GT_dialog.pas(7): Unit 'GT_datamodule' is used by 'GT_dialog'
GT_mainform.pas(7): Unit 'GT_dialog' is used by 'GT_mainform'
GT_datamodule.pas(6): Unit 'GT_MainForm' is used by
'GT_datamodule'
C++ Builder
La section suivante présente les améliorations et mises à jour relatives à C++ Builder.
Suppression des plates-formes iOS et Android
RAD Studio Athens a supprimé les plates-formes iOS 64 bits et Android 32 bits, en raison de l’impossibilité de déployer des applications dans leurs magasins. Utilisez la version 11.3 pour construire des applications pour iOS ou Android avec C++.
Mise à niveau de Clang
RAD Studio 12.0 fournit une préversion d’un compilateur Clang Win64 mis à niveau. La préversion du compilateur et sa chaîne d'outils sont fournis avec l’installateur. La chaîne d'outil actuelle (Clang 5) et la préversion (Clang 15) Win64 sont disponibles dans la version 12.0. Pour en savoir plus sur les caractéristiques et voir un exemple, consultez notre page Clang Win64.
Informations relatives à la chaîne d'outils
- Utilise Clang 15.
- Utilise le fichier lld de LLVM en tant que lieur.
- Utilise l’ABI Itanium (pas l’ABI Microsoft).
- Utilise la STL libc++ de LLVM.
- Utilise UCRT pour le runtime C.
- Utilise un mélange de LLVM et Mingw pour le runtime C++.
- Outils en ligne de commande uniquement. La compilation ou la liaison dans l'EDI n'étant pas autorisée, exécutez bcc64x manuellement.
- Les utilisateurs peuvent effectuer le débogage dans l'EDI. Utilisez Exécuter > Charger un processus ou Exécuter > Attacher au processus et vérifiez que le débogueur correct est sélectionné : ‘Débogueur Embarcadero Windows 64 bits (Moderne)’.
- Obtenez des informations de débogage au format PDB en utilisant l’option du débogueur Exécuter > Attacher au processus > LLDB moderne, et déboguez une application C++ à l’aide des informations de débogage PDB.
Améliorations relatives à Delphi RTL et aux données
Delphi RTL
RAD Studio 12.0 offre de nombreuses améliorations significatives dans la bibliothèque RTL.
GetCompilerVersion et GetRTLVersion
RAD Studio 12.0 ajoute deux nouvelles fonctions à l’unité système :
- GetCompilerVersion - Renvoie le numéro de version du compilateur de cette unité système lorsqu’elle a été compilée. L’octet supérieur contient la version majeure du compilateur, tandis que l’octet inférieur contient la version mineure du compilateur.
- GetRTLVersion - Renvoie le numéro de version de la RTL de cette unité système lorsqu’elle a été compilée. L’octet supérieur contient la version majeure de la RTL, tandis que l’octet inférieur contient la version mineure de la RTL.
Désactivation des exceptions de virgule flottante sur toutes les plates-formes
RAD Studio 12.0 a changé la valeur par défaut des paramètres des exceptions de virgule flottante RTL : Default8087CW, DefaultMXCSR, DefaultFPSCR et DefaultFPSCR, dans le but de désactiver toutes les exceptions de virgule flottante par défaut si une opération à virgule flottante détecte des incidents. Toutes les plates-formes (Windows, macOS, iOS, Android et Linux) et C++Builder sont affectées. Les utilisateurs peuvent réactiver manuellement les exceptions de virgule flottante dans une application au niveau des threads.
Cette modification a l'impact suivant :
- Expressions contenant les quatre opérations arithmétiques de base (addition, soustraction, multiplication et division) :
- Les plates-formes Windows/32 et 64 vont être modifiées pour supprimer les exceptions de virgule flottante.
- Les autres plates-formes et les applications Windows FMX ne changent pas (le comportement précédent consistait à ne pas déclencher d’exceptions).
- Fonctions mathématiques, y compris les fonctions trigonométriques (sin, cos, tan) et transcendantales (ln, exp) :
- Les plates-formes Windows/32 et 64 et la plupart des autres plates-formes vont être modifiées pour supprimer les exceptions de virgule flottante.
- Seules les applications macOS/Arm64 et Windows FMX ne changeront pas car elles suppriment déjà les exceptions.
Si votre application attend des exceptions de virgule flottante, essayez ceci :
- Restaurez l’ancien comportement.
- Mettez le code à jour pour éviter les exceptions (solution recommandée pour prendre en charge les nouvelles plates-formes en dehors de Windows et des futures versions de Windows).
Pour plus d’informations, voir la page de documentation Masques des exceptions des opérations en virgule flottante.
Améliorations relatives aux listes, tableaux et collections
Voici une liste des améliorations :
- Pour TList et les classes descendantes, le message d'erreur "Index de liste hors limites" a été amélioré pour que l’index utilise la plage valide (ou le fait que la structure est vide). Cela inclut le nom de la classe.
- La fonction TSparseArray.Add a été optimisée.
- De nouvelles méthodes TArray ont été ajoutées : IndexOf, LastIndexOf, Contains.
- La façon dont TDictionary crée des clés de hachage pour la même taille que le hachage des types de clés a été améliorée. De même, certaines fonctions GetHashCode ont été améliorées.
- System.Generics.Collections, System.Generics.Default et System.Classes.TList utilisent maintenant NativeInt à la place de Integer pour tous les index.
Support amélioré des fichiers UTF sans BOM
RAD Studio 12.0 a amélioré le support des fichiers texte UTF sans encodage BOM.
Une nouvelle propriété TEncoding.UseBOM, disponible dans toutes les sous-classes, peut être utilisée pour changer le comportement dans les versions antérieures. Cette valeur peut être transmise en tant que paramètre à un nouveau constructeur surchargé. Dans le code, elle est utilisée pour lire et écrire dans un flux.
De nouvelles méthodes surchargées TEncoding.IsBufferValid (avec des valeurs d'entrée différentes) visent à vérifier si un tampon donné contient des données valides pour un encodage donné. Cela s’avère particulièrement utile pour déterminer si un fichier texte sans BOM est au format UTF-8 ou ASCII. La fonctionnalité principale consiste à implémenter cette méthode pour la classe TUTF8Encoding.
Le code TEncoding.IsBufferValid utilise l’algorithme Bjoern Hoehrmann, offrant une solution multiplate-forme rapide.
Améliorations supplémentaires de la RTL
Autres améliorations introduites dans RAD Studio 12.0 :
- Nouvelles couleurs ajoutées à System.UIConsts.Colors (utilisé par les fonctions StringToColor et ColorToString) pour qu’elles s’affichent dans l'inspecteur d'objets.
- Les FListeners dans TMessageManager sont maintenant protégés.
- Un moyen simplifié de convertir une liste d’éléments en une représentation chaîne avec le formatage et les délimiteurs spécifiés a été ajouté à System.Generics.Collections.TArray :
class function ToString<T>(const Values: array of T; const AFormatSettings: TFormatSettings; const ASeparator: string = ','; const ADelim1: string = ''; const ADelim2: string = ''): string; reintroduce; overload; static;
class function ToString<T>(const Values: array of T; const ASeparator: string = ','; const ADelim1: string = ''; const ADelim2: string = ''): string; reintroduce; overload; static;
- Améliorations relatives à la prise en charge des fichiers ZIP :
- La propriété TZipHeader.ModifiedTime et le support de Deflate64 dans TZipFile ont été ajoutés.
- Les fichiers de plus de 4 Go sont désormais pris en charge sur Win64.
- Une interface IZipCryptor a été ajoutée, avec les méthodes Decrypt et Encrypt, pour permettre aux clients d’ajouter le cryptage dans les fichiers Zip.
- Bibliothèque de programmation parallèle :
- TThreadPool offre maintenant un moyen d’initialiser les threads, à l’aide des propriétés suivantes.
- Propriétés TThreadPool.InitializeCOM et InitializeCOMFlags.
- Evénements TThreadPool.OnThreadStart et OnThreadTerminate.
- RAD Studio 12.0 ajoute une nouvelle configuration dans le pool de threads, la nouvelle propriété UnlimitedWorkerThreadsWhenBlocked de la classe TThreadPool, avec une valeur par défaut de
True
. Définissez-la surFalse
pour rétablir le comportement et forcer le système à une limite stricte lorsque le seuil MaxWorkerThreads est atteint.
- TThreadPool offre maintenant un moyen d’initialiser les threads, à l’aide des propriétés suivantes.
- TPath.Combine dans System.IOUtils a maintenant plusieurs versions surchargées.
- De nouvelles méthodes d’accès au chemin par défaut ont été ajoutées : TPath.GetDesktopPath et TPath.GetAppPath.
- La nouvelle méthode CreateImplementation a été ajoutée dans la classe TRttiInvokableType.
- De nouveaux énumérateurs ont été ajoutés pour lire le contenu des fichiers :
Données et Internet
Les sections suivantes décrivent les améliorations apportées en matière de données et d’Internet.
JSON et l’expert Liaison de données JSON
Un nouvel expert Liaison de données JSON est disponible dans la section Nouveau > Nouveaux éléments > Delphi > Web. L’expert Liaison de données JSON permet la création de types de données Delphi basés sur une structure de données JSON.
IBLite/IBToGo pour le simulateur iOS
RAD Studio supporte maintenant les versions d’InterBase incorporées pour la plate-forme iOS du simulateur Delphi.
RAD Server
Le moteur RAD Server est construit avec le gestionnaire de mémoire FastMM5, qui améliore les performances, spécifiquement dans les scénarios massivement multi-threads. Le gain de performances moyen est de 5 %. Les sections suivantes montrent d’autres améliorations concernant RAD Server.
Améliorations relatives à la pagination
RAD Studio 12.0 offre la possibilité aux requêtes LIST envoyées à TEMSDataSetResource de spécifier une taille de page dynamique dans un paramètre. Pour ce faire, vous pouvez utiliser ces deux nouvelles propriétés :
- TEMSDataSetResource.PageSizeParamName - Définit le nom du paramètre dans une requête LIST, qui spécifie une taille de page dynamique. La valeur par défaut est psize". Si elle n'est pas spécifiée, TEMSDataSetResource.PageSize est utilisée.
- TEMSDataSetResourceOption.roEnablePageSizing - Lorsque cette propriété est incluse dans TEMSDataSetResource.Options, le système prend en compte le paramètre de taille de page dynamique dont le nom est défini par la propriété PageSizeParamName..
Sqids pour URL
Par défaut, lorsque vous naviguez dans une structure de données (par exemple, une table de base de données), RAD Server expose les URL susceptibles de contenir des informations spécifiques sur les enregistrements. Cette situation n’est pas idéale pour plusieurs raisons, allant de la nécessité de ne pas partager des détails internes aux problèmes de sécurité associés à la révélation d’un identifiant d’enregistrement.
Pour cette raison, RAD Server introduit Sqids, une version améliorée de Hashids, pour coder les données sensibles. Vous trouverez de plus amples informations ici.
Pour ce faire, RAD Studio 12.0 introduit une nouvelle classe appelée System.NetEncoding.TSqidsEncoding. Cliquez ici pour suivre le tutoriel.
Amélioration relative à l’authentification de session RAD Server
Le composant TBackendAuth permet aux utilisateurs de spécifier un nom d’utilisateur et un mot de passe. Une fois connectés à RAD Server, les utilisateurs disposent d’un token de session, qui est difficile à gérer. RAD Studio 12.0 améliore la procédure de gestion de ce token avec les nouvelles méthodes suivantes :
- TCustomBackendAuth.ExportLogin - Exporte les informations de connexion (par exemple, token et détails associés) sous forme de chaîne facultativement cryptée.
- TCustomBackendAuth.ImportLogin - Importe les informations de connexion préalablement exportées à partir d’une chaîne. Lorsqu’un argument chaîne est spécifié, ces informations sont décryptées.
Qualité de RAD Server
- La console RAD Server a été ajoutée au menu Outils de l’EDI RAD Studio.
- TBackendAuth.LoggedInValue.ExpiresAt renvoie maintenant une heure locale lorsque le token d'authentification va expirer.
- Offre maintenant un événement OnNeedClientCertificate côté client, le même que l’événement OnValidateCertificate.
Améliorations générales relatives à Internet
- FormatXMLData inclut maintenant un paramètre pour indiquer le nombre d’espaces à utiliser pour l’indentation. La valeur par défaut est 2 espaces.
- La méthode TWinHTTPClient.DoExecuteRequest supporte les transferts de données supérieurs à 4 Go.
- Le support de la méthode HTTP DELETE a été ajouté avec le contenu :
- Méthodes de surcharge THttpClient.Delete/BeginDelete avec argument AStream.
- Méthode de surcharge TNetHTTPClient.Delete avec argument AStream.
- Les améliorations relatives à la bibliothèque client REST incluent :
- RESTClient reconnaît une réponse comme étant au format JSON lorsque Content-Type a la valeur application/vnd.retailer.v8+json (déjà disponible dans les correctifs 1 de la release 11.3).
- Un nouvel événement OnBeforeExecute a été ajouté dans TCustomRESTRequest.
- Pour améliorer la redirection et la gestion des cookies, RAD Studio 12.0 a ajouté les événements suivants :
- Pour améliorer la prise en charge des fichiers volumineux dans la classe TMultipartFormData (dans l’unité System.Net.Mime), RAD Studio 12.0 a ajouté :
- Une méthode de surcharge TMultipartFormData.AddStream.
- Un nouvel argument AHeaders: TStrings = nil dans les méthodes TMultipartFormData.
- Une nouvelle classe TProxyAggregateStream dans System.Classes.
- La bibliothèque client HTTP utilise les API sous-jacentes du système d'exploitation pour exécuter les requêtes HTTP(S) par défaut. Elle utilise libcurl, une bibliothèque HTTP multiplate-forme et non spécifique à Linux sur Linux. Pour cette raison, RAD Studio 12.0 ajoute le support de Curl sur les autres plates-formes. Cela permet de contourner certaines limites de la plate-forme. Pour que THTTPClient puisse utiliser libcurl sur Windows, les utilisateurs doivent ajouter System.Net.HttpClient.Linux à la clause uses.
- La possibilité d’accéder aux données pendant la réception dans une requête HTTP (ou REST) a été ajoutée, car certains serveurs renvoient les données dans des blocs logiques dans une seule requête HTTP (par exemple, API REST centrées sur l’IA). RAD Studio 12.0 ajoute les événements suivants pour répondre à des scénarios similaires.
- Dans System.Net.HttpClient :
- Dans System.Net.HttpClientComponents :
- Dans REST.Client :
FireDAC
QBE
RAD Studio 12.0 introduit le support FireDAC pour QBE (requête par exemple) grâce à un nouveau composant appelé TFDQBE, qui représente un composant query-by-example :
- Après l’utilisation de FDQBE.Edit, le composant crée un ensemble de données en mémoire contenant le même ensemble de champs que l’ensemble de données principal, à l’exception du fait que tous les champs ont la valeur ftString. Cet ensemble de données en mémoire remplace TDataSource.DataSet.
- L’utilisateur peut saisir des critères de filtre sous la forme de contrôles ou grilles orientés BD. Le langage des critères n’exige pas un nom de champ et introduit d’autres simplifications. Par exemple, pour filtrer par
"OrderID < 10255"
, tapez"< 10255"
, pour l’égalité, il suffit de taper "10255", pour « like », tapez "1025%", etc. - Lorsque la méthode FDQBE.Post est appelée, le composant modifie la requête FDQuery ou propriété Filter d’origine (selon la propriété FDQBF.Language) et crée une nouvelle requête basée sur les valeurs saisies.
Cela fonctionnera avec un ensemble de données actif ou inactif avec champs persistants. Cette approche permet également de filtrer par champs de référence et d’autres paramètres.
Mises à jour des versions FireDAC SQLite
RAD Studio 12.0 ajoute le support de SQLite 3.42 tout en conservant l’option d’utiliser SQLite 3.31.1 avec le cryptage FireDAC (FDE). Depuis la version 3.42, SQLite a abandonné le mécanisme employé par FireDAC pour la prise en charge du cryptage. Il ne peut donc plus être utilisé. Par conséquent, il existe trois moyens différents d’utiliser SQLite avec FireDAC :
- Utilisez la version la plus récente sans cryptage FireDAC.
- Utilisez la version payante SQLite EE (avec prise en charge native du cryptage SQLite), que FireDAC prend en charge depuis RAD Studio 11.0.
- Continuez à utiliser SQLite 3.31.1 ou les versions précédentes avec cryptage FireDAC (FDE).
FireDAC et sécurité
RAD Studio 12.0 ajoute des fonctionnalités de sécurité pour FireDAC qui, avec de bonnes pratiques globales de sécurité, contribuent à développer des applications de base de données plus sûres. Les propriétés suivantes sont disponibles sous TFDSecurityOptions :
- AllowedCommandKinds - Limite l'exécution des commandes SQL, empêchant un pirate de modifier une requête et d’apporter des modifications non désirées à la base de données.
- AllowMultiCommands - Active ou désactive l'exécution de plusieurs commandes SQL. Cette propriété activée par défaut fonctionne uniquement avec la base de données offrant la fonctionnalité de correspondance : SQLite, PostgreSQL et MySQL.
- AllowSQLChange - Lorsqu’il est activé, ce paramètre évite les modifications apportées au texte d’une requête SQL FireDAC à l'exécution. Une méthode comme DoSQLChanging appellerait CheckCanChangeSQL, maintenant pour vérifier le paramètre spécifique (entre autres conditions).
- ExactUpdatedRecsNum - Il s’agit d’un entier avec une valeur par défaut de -1. Lorsqu’il est défini sur > 0, avec
FDQuery.FetchOptions.Mode := fmExactRecsMax;
FDQuery.FetchOptions.RecsMax := 1;
FireDAC encapsule les commandes SQL UPDATE avec des vérifications supplémentaires.
Améliorations relatives à FireDAC
- Il y a une nouvelle propriété dans l'objet connexion FireDAC : TFDCustomConnectionCommandsExecuted. Il s’agit d’une valeur UInt64 qui permet aux utilisateurs de déterminer si une connexion est nouvelle (par exemple, en cas de pool de connexions) ou si elle est recyclée et a déjà été utilisée pour interagir avec la base de données. Dans l’idéal, quand cette propriété a la valeur 0, aucune commande n’a été exécutée sur cette connexion.
- L’unité FireDAC.Phys.SQLiteWrapper.Stat.pas utilise maintenant SQLite 3.42, sa version la plus récente.
- La nouvelle unité FireDAC.Phys.SQLiteWrapper.FDEStat.pas utilise SQLite version 3.31.1, avec cryptage FireDAC (FDE) toujours disponible.
- FireDAC ajoute le support de Decimal128 dans MongoDB.
- FireDAC ajoute le support du protocole HTTP pour Datasnap.
- FireDAC ajoute le support de la séquence d'échappement
{INTO }
pour SQL Server (voir Support unifié de RETURNING (FireDAC)). - Un type TSQLiteEngineLinkage mis à jour :
- slFDEStatic - FireDAC.Phys.SQLiteWrapper.FDEStat.pas. ajouté.
- slStatic - FireDAC.Phys.SQLiteWrapper.Stat.pas.
- Le mode de liaison par défaut est statique avec SQLite version 3.31.1 avec FDE.
Pour les plates-formes Android, Linux, et iOS, une seule unité de liaison statique peut être incluse dans un projet simultanément. Vous pouvez donc utiliser FireDAC.Phys.SQLiteWrapper.Stat ou FireDAC.Phys.SQLiteWrapper.FDEStat, mais pas les deux dans le même projet. Sinon, le lieur génèrera des erreurs à cause des symboles en double.
En passant à une version plus récente de SQLite, FireDAC peut maintenant utiliser les commandes DDL ajoutées aux versions récentes de la base de données, comme ALTER TABLE et DROP pour les colonnes.
Modifications relatives à FireMonkey et à la VCL
VCL
RAD Studio version 12.0 offre de nombreuses améliorations importantes dans la bibliothèque VCL.
MDI remaniée pour HighDPI et Styles
RAD Studio 12.0 a remanié de façon importante la prise en charge de la VCL MDI (Multi Document Interface) et mis à jour le code généré par l’expert MDI, introduisant une nouvelle architecture de fiches à onglets MDI, disponible via le nouveau contrôle TFormTabsBar.
Cette section répertorie certaines améliorations spécifiques et certaines réserves toujours d’actualité.
Bordure personnalisée pour fenêtre enfant MDI
Les fiches enfant MDI peuvent maintenant avoir une nouvelle bordure plate moderne sur les systèmes sous Windows 10 et 11. Plus précisément :
- La bordure a une taille système et une zone système avec des barres de défilement (comme dans notre concepteur VCL).
- La bordure utilise les couleurs système par défaut, compatibles avec les couleurs clBtnFace et les couleurs gris clair/foncé similaires, généralement utilisées pour la zone client MDI.
- La bordure est identique et fonctionne de la même façon pour les systèmes Windows 10 et 11.
- L’état réduit utilise la résolution de la fiche pour dessiner un cadre personnalisé, car le cadre système utilise uniquement les valeurs de résolution du moniteur principal.
- Les icônes de bordures désactivées ne sont pas dessinées (même solution utilisée avec le styles VCL). Par exemple, le bouton Réduire sera invisible si la valeur biMinimize n’est pas dans BorderIcons.
- Un nouveau paramètre global a été ajouté pour désactiver la gestion des bordures des fenêtres enfant : TStyleManager.ChangeChildFormSystemBorder. Il désactive les modifications ci-dessus en termes de bordure enfant.
- Cette solution prend en charge le PerMonitorV2 haute résolution.
Bordure personnalisée des fiches avec propriété Parent assignée
Les fiches avec bordures doivent obtenir et traiter le message WM_NCActivate, mais le système d'exploitation ne l’envoie pas à Windows avec une parent fiche. Pour que ce scénario fonctionne, nous devons émuler l’activation de la fiche dans le contrôle parent, corriger tous les problèmes relatifs au support High-DPI et PerMonitorV2, et ajouter des modifications aux styles VCL.
Détails :
- Une nouvelle classe TWinControlHandler a été introduite pour la classe TWinControl ainsi qu'une classe TChildMessageHandler à utiliser avec TCustomForm. Cela permet d’avoir une bordure personnalisée pour les fiches enfant MDI et les fiches ayant une propriété Parent assignée.
- L’état réduit a les mêmes limites que les enfants MDI, et les utilisateurs peuvent se servir du nouveau contrôle TFormTabsBar pour masquer et gérer les fiches réduites.
- Les fiches fonctionnent comme un contrôle à l’intérieur d’un contrôle parent. La focalisation sur leurs contrôles ne se trouve pas dans la fiche individuelle mais dans la fiche parent supérieure.
- La création et l’initialisation de ces fiches sont spécifiques (la propriété Visible doit avoir la valeur
False
par défaut ; la définition du parent et de la mise à l’échelle initiale est manuelle pour différents scénarios). - La fiche a une bordure moderne en tant qu’enfant MDI.
- La fiche peut être agrandie à l’intérieur du contrôle parent et sa taille peut être modifiée avec ce dernier.
- L’émulation intégrale de l’activation/désactivation des fiches sur le parent a été ajoutée.
L’interface IFormVisualManager et la propriété VisualManager de la classe TCustomForm
Pour ajouter un nouveau contrôle permettant de gérer les fiches, Athens 12.0 introduit une nouvelle interface IFormVisualManager. Elle inclut des méthodes de base, qui sont intégrées à la classe TCustomForm pour obtenir les messages et actions provenant des fiches pour les gérer.
La version 12.0 inclut aussi la nouvelle propriété TCustomForm.VisualManager du type IFormVisualManager et les méthodes nécessaires pour implémenter l'interface.
L’objectif général est que les développeurs puissent créer leurs contrôles visuels en implémentant l’interface IFormVisualManager dans un contrôle ou un composant classe dérivé comme implémenté dans le contrôle TFormTabsBar.
Contrôle TFormTabsBar
RAD Studio Athens 12.0 a ajouté un nouveau contrôle FormTabsBar comme solution universelle et prête à l’emploi pour héberger plusieurs fiches enfant dans une interface utilisateur moderne à onglets, comme chemin de modernisation possible pour les applications MDI existantes, mais également comme moyen de créer de toutes nouvelles applications VCL.
Le nouveau contrôle FormTabsBar est hérité de IFormVisualManager et fonctionne avec les classes TForm et TScreen. Il peut refléter toutes les fiches provenant de Screen.Forms (à la place de la fiche principale et de la fiche parent du contrôle). Les nouveaux contrôles fonctionnent avec les fiches MDI mais également avec les fiches SDI ayant un parent assigné, avec et sans bordure. Les contrôles peuvent être définis pour une fiche principale/parent pour qu’elle soit automatiquement utilisée par les fiches enfant. De même, TFormTabsBar dispose de la propriété AcceptMode et de l’événement OnAcceptForm pour permettre l’acceptation des fiches.
Détails supplémentaires :
- Chaque fiche TForm peut être ajoutée sous forme d’onglet à TFormTabsBar lorsque son handle est créé. Lorsque le handle est détruit, l’onglet est supprimé.
- Le contrôle affiche les fiches visibles et invisibles. Lorsque vous cliquez sur l’onglet, la fiche est affichée et activée.
- TFormTabsBar peut masquer les fiches réduites (MDI et SDI), les restaurer et les activer en cliquant sur l’onglet. Cette fonctionnalité évite le comportement incorrect du système et la taille incorrecte des fiches réduites.
- Les fiches invisibles ou réduites peuvent être marquées dans le contrôle pour indiquer qu’elles ne sont pas visibles pour l’instant.
- Appelez le menu système en faisant un clic droit sur l’onglet ou la zone des icônes.
- Les onglets peuvent être déplacés, et les utilisateurs peuvent changer la position de n’importe quel onglet du contrôle.
- La largeur de l’onglet peut être modifiée avec une valeur fixe ou avec un calcul automatique de la largeur en fonction du libellé de la fiche (dans ce cas, définissez la largeur Min et Max). Il existe en outre une propriété permettant d’activer les conseils pour les libellés longs tronqués.
- Les onglets peuvent avoir un bouton Fermer, qui appelle la méthode TForm.Close
- Le contrôle peut afficher un bouton spécial pour appeler le menu avec tous les onglets pour sélectionner une fiche rapidement.
- Le contrôle prend également en charge la focalisation et le clavier, mais seulement s’il obtient la focalisation avec la touche Tabulation (c’est-à-dire si TabStop a la valeur
True
). Dans ce cas, les utilisateurs peuvent sélectionner, faire défiler et activer les onglets avec les touches Entrée ou Espace. - Le contrôle prend en charge le PerMonitorV2 haute résolution et fonctionne correctement dans toutes les résolutions.
- Les styles VCL sont bien pris en charge. Certains éléments utilisent les couleurs de style pour dessiner des éléments spécifiques (comme le bouton Fermer ou le séparateur).
Mise à niveau de l'expert MDI
RAD Studio 12.0 a également mis à niveau l'expert MDI pour Delphi et C++Builder. Le code généré par l'expert utilise les éléments suivants :
- Le composant TActionMainMenuBar à la place du composant TMainMenu.
- La combinaison TImageCollection plus TVirtualImageList à la place du composant TImageList.
- Un contrôle TFormTabsBar.
Fontes et écrans
La mise à l’échelle dans la bibliothèque VCL est désormais indépendante de la mise à l’échelle DPI. Les modifications sont principalement apportées à la classe TFont de la bibliothèque VCL.
Dans RAD Studio Athens, la classe TFont ajoute les nouvelles méthodes et propriétés suivantes :
- TFont.IsDPIRelated - permet d’utiliser la propriété TFont.PixelsPerInch et de la modifier en fonction de la valeur CurrentPPI du contrôle hôte.
- TFont.IsScreenFont - pour nos fontes globales dans la classe TScreen.
- TFont.ChangeScale - appelée dans la méthode TControl.ChangeScale pour initialiser et mettre à l'échelle n’importe quelle fonte associée à la DPI.
- TFont.ScaleForDPI - utilisée dans le code pour adapter une fonte à n’importe quelle DPI. Vérifie la propriété IsDPIRelated et met la hauteur de fonte à l’échelle.
Le principal changement réside dans l’utilisation de Size et la façon dont la valeur de résolution et IsScreenFont est prise en compte quand TFont.Assign est appelée. Cette modification affecte le code existant, et la bibliothèque VCL a été adaptée pour prendre en charge la nouvelle mise à l’échelle de la fonte. Par exemple, le code tel que :
Font.Height := MulDiv(Font.Height, M, D)
doit être remplacé par
Font.ChangeScale(M, D, isDpiChanged)
En outre, la nouvelle approche doit empêcher la double mise à l’échelle de la fonte car la propriété TFont.PixelsPerInch est vérifiée.
Intégration de la plate-forme
RAD Studio 12.0 a nettoyé les mappages d’API Windows et d’API WinRT en actualisant les API WinRT et les contrôles WebView 2 avec les versions les plus récentes.
En-têtes WinAPI Delphi à partir des métadonnées WinMD
RAD Studio 12.0 dispose d’un outil d'importation interne capable de générer des définitions Delphi pour les API Windows classiques en utilisant les métadonnées de Microsoft au format WinMD. La première version de ces unités générées est disponible dans GetIt.
Ouvrez le Gestionnaire de packages GetIt et cherchez le package “API Windows de WinMD”.
Cela installe 311 fichiers en-tête avec 41 Mo de code Delphi dans un dossier comme :
C:\Users<name>\Documents\Embarcadero\Studio\23.0\CatalogRepository\WindowsAPIfromWinMD-1.0
.
Ces nouveaux en-têtes sont beaucoup plus étendus, couvrant toutes les API récentes par rapport à l’ensemble disponible dans la RTL principale.
Edge Browser
RAD Studio 12.0 a actualisé l’API de contrôle WebView 2 avec une version récente, WebView2 SDK 1.0.1774.30. Cela permet de prendre en charge de nombreuses nouvelles fonctionnalités du contrôle WebView 2 sous-jacent, y compris :
- UserAgent est disponible dans ICoreWebView2Settings.
- ICoreWebView2Profile2 contient les méthodes ClearBrowsingData, ClearBrowsingDataAll et ClearBrowsingDataInTimeRange.
De plus, TEdgeBrowser dispose d’une nouvelle méthode qui fournit des données post ou des en-têtes de requête supplémentaires pendant la navigation. Les en-têtes dans ARequest remplacent les en-têtes ajoutés par le runtime WebView2 à l’exception des en-têtes Cookie. La méthode de requête d’une ressource web doit avoir la valeur GET ou POST.
function NavigateWithWebResourceRequest(const ARequest:
ICoreWebView2WebResourceRequest): Boolean;
Prise en charge de la vue Mosaïque pour TListView
La bibliothèque VCL ajoute le support de cette option disponible dans le contrôle de plate-forme sous-jacent. Elle est disponible avec :
- La valeur vsTile ajoutée à l’énumération TViewStyle.
- L’événement OnCancelEdit ajouté au contrôle TListView.
- Une nouvelle propriété TileOptions ajoutée au contrôle pour ajuster les éléments de la mosaïque. Cette propriété inclut :
- SizeType : définit le type de taille de l’élément (auto ou variations de taille fixe).lib_fr:Vcl.ComCtrls.TTileOptions.Width
- Les propriétés Width et Height de la mosaïque, si un type de taille fixe est défini.
- LabelMargins : marges du libellé (toutes les lignes de texte) à l’intérieur d’un élément.
- SubLineCount : nombre de lignes qui peuvent se trouver sous le libellé (Caption) de l’élément.
- Une nouvelle propriété TileColumns a été ajoutée pour ajuster des lignes supplémentaires à l’intérieur de l’élément de façon à afficher le texte des sous-éléments à partir des colonnes. La propriété TileColumns du contrôle ajuste automatiquement les informations des mosaïques pour tous les éléments existants dans la liste.
Enumérateur TControl
RAD Studio Athens ajoute un énumérateur TControl à la bibliothèque VCL et l’énumérateur TComponent. Pour TComponent, la logique consiste à analyser les composants possédés par un composant donné. Pour l’énumérateur TControl, la logique consiste à analyser les contrôles enfant. Vous pouvez consulter un exemple sur la page GetControls.
Découvrez les divers filtres de l’énumérateur du contrôle sur la page TControlEnumeratorFilterType.
Nouvelle propriété de fiche ShowInTaskbar
La classe TForm a une nouvelle propriété ShowInTaskbar qui contrôle si une fiche doit avoir une entrée correspondante dans la barre des tâches Windows, même s’il ne s’agit pas de la fiche principale.
Améliorations relatives aux gestionnaires de plates-formes de bureau Windows
RAD Studio Athens ajoute le support de certaines fonctionnalités de gestion avancée des plates-formes de bureau dans Windows 11. Ces fonctionnalités ne fonctionnent pas sur les anciennes versions du système d'exploitation.
Dans l’unité Winapi.DwmApi.pas, la version 12.0 ajoute plusieurs nouvelles constantes DWMWA_xxx utilisées pour activer certaines des nouvelles fonctionnalités de la plate-forme. Activez ces fonctionnalités en appelant l’API DwmSetWindowAttribute dans la même unité.
De plus, les fiches VCL prennent maintenant en charge le mode sombre immersif de Windows 11. Appelez la nouvelle méthode EnableImmersiveDarkMode de la classe TForm pour l’activer.
Nouveau mode Double tampon
RAD Studio 12.0 introduit a nouveau type énuméré TDoubleBufferedMode pour tous les contrôles, une nouvelle propriété DoubleBufferedMode de ce type et une nouvelle méthode CanUseDoubleBuffering.
Le fait d’activer DoubleBuffering dans les contrôles avec thème, comme TButton, TCheckBox et TRadioButton, coupe l’animation système native lorsque le contrôle change d’état. Pour cette raison, nous avons introduit la méthode CanUseDoubleBuffering et l’avons redéfinie pour la classe des contrôles TButtonControl afin de désactiver le double tampon.
FireMonkey
Pour la bibliothèque FireMonkey, RAD Studio propose la nouvelle fonctionnalité Intégration de la bibliothèque Skia. Toutefois RAD Studio version 12.0 introduit d’autres nouvelles fonctionnalités et améliorations.
API Android cible niveau 33
RAD Studio version 12.0 met à jour le support Delphi Android pour cibler l’API niveau 33, comme exigé par Google pour stocker les soumissions. Cela inclut des améliorations et extensions des bibliothèques Android, y compris :
- Améliorations apportées aux implémentations de la plate-forme Android des services de plate-forme IFMXCameraService et IFMXTakenImageService. L’implémentation est maintenant asynchrone et compatible avec le modèle Android Scoped Storage. De plus, elle ne bloque plus le thread principal. La même chose s’applique à l’implémentation du service de plate-forme IFMXPhotoLibrary.
- Les classes JManifest_permissionClass et JManifest_permission_groupClass ont été mises à jour pour lister les champs statiques disponibles dans les niveaux d’API Android les plus récents.
- Le service d’interface/plate-forme IFMXExtendedClipboardService a été mis à jour pour autoriser les applications d’empêcher l’affichage du contenu sensible dans l’overlay de l’éditeur du Presse-papiers introduit dans Android 13.
- La page d’options{Menu| Projet > Options > Application > Permissions d’utilisation}} a été mise à jour pour retirer les permissions uniquement accordées aux applications système.
- Le nouvel écran d'accueil Android est pris en charge depuis Android 12 ici.
- La prise en charge des achats In-App FireMonkey Android a été mise à jour pour dépendre de la version la plus récente de la bibliothèque de facturation Google Play Billing (6.0.1). Elle est obligatoire depuis le 1er novembre 2023.
Prise en charge de l’écran divisé
A compter d’Athens 12.0, RAD Studio a ajouté une prise en charge pour créer des applications FireMonkey pour plates-formes mobiles qui utilisent uniquement une partie de l’écran disponible, une fonctionnalité particulièrement utile sur les tablettes avec une grande surface d’écran.
Cette version inclut un code interne vers la bibliothèque FireMonkey pour iOS et Android afin de gérer complètement ce scénario. Notez que ces modifications ayant été apportées au manifeste Android, les utilisateurs devront peut-être actualiser le manifeste d’une application ou celui dans la configuration de l’utilisateur. Les entrées nouvelles et modifiées du manifeste Android incluent :
android:resizeableActivity="true"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout"
(ici l’ajout concerne la valeur screenLayout).
Améliorations relatives à TEdit et TMemo
A compter d’Athens 12.0, RAD Studio a nettement amélioré les contrôles TEdit/TMemo, en commençant par les plates-formes de bureau (Windows et macOS). L’inclusion des plates-formes mobiles est également prévue.
L’amélioration est basée sur un vaste refactoring des éléments internes des contrôles stylés. La présentation du contrôle d’édition stylé (TEdit) a fait l'objet d'un refactoring en exploitant l’implémentation TMemo récemment ajoutée (déjà dans RAD Studio 11.3).
Mises à jour importantes de FireMonkey
Modifications générales apportées à FireMonkey
- Nouvelle propriété TEdit AutoSelect et CharCase.
- TEdit prend maintenant en charge la fonctionnalité d'annulation (Undo). Le TUndoManager récemment ajouté est partagé entre TEdit et TMemo.
- TMemo implémente un mode de saisie de texte (IME) comme dans un TEdit natif.
- TEdit prend en compte la ressource Brosse (Brush) de premier plan.
- La sélection à l’aide du Maj-clic a été améliorée.
Pour la plate-forme iOS
- Refactoring du clavier virtuel pour iOS : l’implémentation FMX du clavier virtuel iOS utilisé pour aligner la barre d’outils du clavier virtuel avec les boutons personnalisés a déplacé la logique d'alignement/animation de la barre d'outils du côté iOS, supprimé le code complexe inutile et facilité le support en déplaçant la plus grande partie de la logique vers la plate-forme iOS.
Pour la plate-forme Android
- La sélection interactive de texte a été améliorée.
- La position du point de sélection a été ajustée et placée à gauche sous la sélection de texte.
- Le point de sélection du curseur de position a été intégré à TMemo et TEdit.
- La façon dont PointInObjectLocal gère la zone a été améliorée lorsqu’un style est utilisé avec un offset d’objets.
- Les styles de plate-forme et les styles premium ont été mis à jour pour prendre en charge la sélection de texte améliorée.
- La génération de styles FireMonkey pour TEdit/TMemo/etc. a été mise à jour. CaretPoint a été ajouté pour les contrôles de saisie de texte d’Android.
- Le curseur peut maintenant être déplacé avec le doigt sur les TMemo sur Android.
Icône unique pour toutes les plates-formes et icône adaptative Android
L’expert Icône unique est un outil complet intégré à l’EDI RAD Studio, conçu pour rationaliser le processus de génération d’icônes et d’écrans d’accueil pour les applications utilisateur sur plusieurs plates-formes. L’une de ses principales fonctionnalités est la prise en charge du format Vector Drawable Android, qui permet la création d’icônes et d’écrans d’accueil évolutifs et réactifs spécifiquement pour les périphériques Android.
Utilisez cette fonctionnalité pour générer des icônes adaptatives avec un outil spécialisé appelé "SVG2VectorDrawable". Cela permet la création d’icônes polyvalentes et réactives qui s’adaptent à divers affichages d'appareils, améliorant ainsi l'expérience globale de l’utilisateur.
De plus, RAD Studio implémente le support d’un écran d'accueil vectorisé. L’implémentation est connectée à la fonctionnalité de l'expert Icône unique. Cette fonctionnalité permet aux développeurs de créer des écrans d’accueil de qualité pour plusieurs plates-formes à l’aide d’un seul fichier Scalable Vector Graphics (SVG).
Dans le cas d’Android, l'expert Icône unique fournit également le support du format Vector Drawable pour les écrans d’accueil générés (en interne) à l’aide d’un outil spécialisé appelé "SVG2VectorDrawable", améliorant encore la compatibilité et l’adaptabilité au sein de l’écosystème Android. Découvrez comment utiliser le Générateur d’artwork et tout un tas d’informations utiles dans la page Icône d’application.
Améliorations supplémentaires de la FMX
Les améliorations suivantes ont été introduites dans RAD Studio 12.0.
- Nouveau TFontManager pour Windows et macOS permettant de charger dynamiquement une fonte dans une application.
- Support multitouch FMX étendu en ajoutant ces nouveaux champs au type de données TTouch :
- Nouveau TWinFormPositionerService qui aide FMX à gérer la disposition et les positions des écrans, à déterminer le centre du bureau et à résoudre certains problèmes liés aux coordonnées.
- ssDouble peut maintenant être transmis dans des événements Mouse en cas de double clic ou de double appui sur les plates-formes mobiles. La séquence des opérations de souris (en cas de double clic) pour toutes les plates-formes est désormais :
- OnMouseDown
- OnClick
- OnMouseUp
- OnMouseDown (State = ssDouble)
- OnDoubleClick
- [OnMouseMove] (State = ssDouble)
- OnMouseUp (State = ssDouble)
- Le paramètre TLocationSensor ErrorRadius a été implémenté pour les plates-formes mobiles.
- FireMonkey inclut un nouveau style Windows 11.
- Une nouvelle propriété FirstWeekMode a été ajoutée pour le contrôle FireMonkey Calendar, choisissez entre les modes ISO8601 et FirstDayOfYear.
- FireMonkey peut désormais retirer le verrou global TCanvas s’il utilise une implémentation de backend (comme Skia) avec support du multi-threading. Cela peut être effectué en utilisant le nouvel indicateur TCanvasStyle DisableGlobalLock.
- Une nouvelle propriété HeaderSettings pour la classe TColumn a été ajoutée pour que les utilisateurs puissent spécifier le style de l'en-tête de colonne. Cela inclut aussi une nouvelle propriété HeaderStyleLookup.
ToolsAPI
L’éditeur de code a plusieurs façons de lire et d’écrire du contenu. Dans cette release, nous étendons les interfaces existantes ou en ajoutons de nouvelles pour ajouter des API hautes performances.
Des projets exemples spécifiques sont disponibles dans le cadre des démos du produit :
- Editor Raw Read Demo.
- Editor Write Demo.
Pour en savoir plus sur ces fonctionnalités, reportez-vous aux pages Reading from the Editor Buffer et Writing from the Editor Buffer.
RAD Studio 12.0 a également apporté des améliorations au dessin par défaut pour chaque cellule de texte (zone de caractères) dans l’éditeur et d’autres informations essentielles pour l’état des lignes. Pour en savoir davantage sur ces mises à jour, lisez la page Prise en charge ToolsAPI pour l'éditeur de code.