Section courante

A propos

Section administrative du site

La bibliothèque d'exécution

Le langage de programmation Delphi utilise Object Pascal comme langage de programmation et privilégie une approche orientée objet, liée à un style de développement visuel. Ainsi Delphi propose que de nombreuses fonctionnalités prêtes à l'emploi dans sa bibliothèque d'exécution, ou le RTL (Run-Time Library) en abrégé. Il s'agit d'un vaste ensemble de fonctions que vous pouvez utiliser pour effectuer des tâches simples, ainsi que des tâches complexes, dans votre code Delphi.

Les unités du RTL

Au fil des versions Delphi, le RTL ou bibliothèque d'exécution a changé sa structure et plusieurs nouvelles unités se sont ajoutés. La raison de l'ajout de nouvelles unités est que de nombreuses nouvelles fonctions ont été ajoutées. Dans la plupart des cas, vous trouverez les fonctions existantes dans les unités où elles se trouvaient, mais les nouvelles fonctions apparaîtront dans des unités spécifiques. Par exemple, les nouvelles fonctions liées aux dates sont désormais dans l'unité DateUtils, mais les fonctions de date existantes n'ont pas été déplacées de SysUtils afin d'éviter des incompatibilités avec le code existant.

L'exception à cette règle concerne certaines des fonctions de prise en charge des variantes, ayant été déplacées hors de l'unité System pour éviter les liaisons indésirables de bibliothèques Windows spécifiques, même dans les programmes n'utilisaient pas ces fonctionnalités. Ces fonctions de variante font désormais partie de la nouvelle unité Variants.

Une partie de votre code Delphi existant peut avoir besoin d'utiliser cette nouvelle unité Variants pour se recompiler. Le Delphi est suffisamment intelligent pour reconnaître cela et inclure automatiquement l'unité Variants dans les projets utilisant le type Variant, en émettant uniquement un avertissement.

Un peu de réglage fin a également été appliqué pour réduire la taille minimale d'un fichier exécutable, parfois agrandi par l'inclusion indésirable de variables globales ou de code d'initialisation.

Les unités System et SysInit

L'unité System est l'unité centrale du RTL et est automatiquement inclus dans toute compilation (en considérant une instruction d'utilisation automatique et implicite y faisant référence). En fait, si vous essayez d'ajouter l'unité à l'instruction Uses d'un programme, vous obtiendrez l'erreur de compilation :

[Error] Identifier redeclared: System

L'unité System comprend, entre autres :

L'unité compagnon de System, appelée SysInit, comprend le code d'initialisation du système, avec des fonctions que vous utiliserez rarement directement. Il s'agit d'une autre unité étant toujours implicitement incluse, car elle est utilisée par l'unité System.

Nouveau dans l'unité System

Les nouveaux changements concernent le fait de rendre le noyau RTL de Delphi plus portable multiplateforme, en remplaçant les fonctionnalités spécifiques à Windows par des mises en oeuvres génériques. Il y a de nouveaux noms pour les types d'interface, une prise en charge totalement révisée des variantes, de nouveaux types de pointeurs, une prise en charge de tableaux dynamiques et des fonctions pour personnaliser la gestion des objets d'exception.

Un autre ajout pour la compatibilité avec Linux concerne les sauts de ligne dans les fichiers texte. Il existe une nouvelle variable DefaultTextLineBreakStyle, pouvant être définie sur tlbsLF ou tlbsCRLF, et une nouvelle constante de chaîne de caractères sLineBreak, ayant la valeur #13#10 dans la version Windows de Delphi et la valeur #10 dans la version Linux. Le style de saut de ligne peut également être défini fichier par fichier avec la fonction SetTextLineBreakStyle.

Enfin, l'unité System inclut désormais les structures TFileRec et TTextRec, étant définies dans l'unité SysUtils dans les versions antérieures de Delphi.

Les unités SysUtils et SysConst

L'unité SysConst définit quelques chaînes de caractères constantes utilisées par les autres unités RTL pour afficher les messages. Ces chaînes de caractères sont déclarées avec le mot clef resourcestring et enregistrées dans les ressources du programme. Comme d'autres ressources, elles peuvent être converties au moyen du gestionnaire de conversion intégré ou du gestionnaire de conversion externe.

L'unité SysUtils est un ensemble de fonctions utilitaires système de différents types. Différente des autres unités RTL, c'est en grande partie une unité dépendante du système d'exploitation. L'unité SysUtils n'a pas de focus spécifique, mais elle inclut un peu de tout, de la gestion des chaînes de caractèrse à la prise en charge des paramètres régionaux et des caractères multi-octets, de la classe Exception et de plusieurs autres classes d'exceptions dérivées à une pléthore de constantes et de routines de formatage de chaîne de caractères.

Certaines des fonctionnalités de SysUtils sont utilisées chaque jour par chaque programmeur en tant que fonctions de formatage de chaîne de caractères IntToStr ou Format; les autres fonctionnalités sont moins connues, car ce sont les variables globales des informations de version de Windows. Ceux-ci indiquent la plate-forme Windows (Windows 9x ou Windows NT, Windows 2000, Windows XP,...), la version et le numéro de construction du système d'exploitation et l'éventuel Service Pack installé sur Windows NT. Ils peuvent être utilisés de la manière suivante :

  1. Unit SysUtils;
  2.  
  3. BEGIN
  4.  Case Win32Platform of
  5.   VER_PLATFORM_WIN32s: ShowMessage('Noyau Win32s');
  6.   VER_PLATFORM_WIN32_WINDOWS: ShowMessage('Noyau Windows 9x : Windows 95, Windows 98, Windows Me');
  7.   VER_PLATFORM_WIN32_NT: ShowMessage('Noyau Windows NT : Windows 2000, Windows XP, Windows Vista, Windows 7,...');
  8.  End;
  9.  ShowMessage('Exécute Windows : ' + IntToStr (Win32MajorVersion) + '.' + IntToStr (Win32MinorVersion) + ' (Construction ' + IntToStr (Win32BuildNumber) + ') ' + #10#13 + 'Mise à jour : ' + Win32CSDVersion);
  10. End;

Une autre fonctionnalité peu connue, mais avec un nom assez long, est une classe prenant en charge le multi-processus léger : TMultiReadExclusiveWriteSynchronizer. Cette classe vous permet de travailler avec des ressources pouvant être utilisées par plusieurs processus léger en même temps pour la lecture (lecture multiple) mais doivent être utilisées par un seul processus léger lors de l'écriture (écriture exclusive). Cela signifie que l'écriture ne peut pas démarrer tant que tous les processus légers de lecture ne sont pas terminés.

Le synchroniseur multi-lecture est unique en ce qu'il prend en charge les verrous récursifs et la promotion des verrous de lecture en verrous d'écriture. L'objectif principal de la classe est de permettre à plusieurs processus légers d'accéder facilement et rapidement à la lecture à partir d'une ressource partagée, tout en permettant à un processus léger d'obtenir le contrôle exclusif de la ressource pour des mises à jour relativement peu fréquentes. Il existe d'autres classes de synchronisation dans Delphi, déclarées dans l'unité SyncObjs et étroitement associées aux objets de synchronisation du système d'exploitation (tels que les événements et les sections critiques de Windows).

A partir de Delphi 6, quelques nouvelles fonctions font leurs apparition dans l'unité SysUtils. L'un des nouveaux domaines concerne la conversion booléenne en chaîne de caractères. La fonction BoolToStr renvoie généralement «-1» et «0» pour les valeurs True et False. Si le deuxième paramètre facultatif est spécifié, la fonction renvoie la première chaîne de caractères dans les tableaux TrueBoolStrs et FalseBoolStrs (par défaut 'TRUE' et 'FALSE') :

  1. BoolToStr(True) { retourne '-1' }
  2. BoolToStr(False, True) { retournes 'FALSE' par défaut }

La fonction inverse est StrToBool, pouvant convertir une chaîne de caractères contenant l'une des valeurs de deux tableaux booléens mentionnés ci-dessus ou une valeur numérique. Dans ce dernier cas, le résultat sera True sauf si la valeur numérique est zéro. D'autres nouvelles fonctions de SysUtils concernent les conversions à virgule flottante en types de devises et de date et d'heure: FloatToCurr et FloatToDateTime peuvent être utilisés pour éviter une conversion de type explicite. Les fonctions TryStrToFloat et TryStrToCurr tentent de convertir une chaîne de caractères en une valeur à virgule flottante ou monétaire et renverront False en cas d'erreur au lieu de générer une exception (comme le font les fonctions classiques StrToFloat et StrToCurr).

Il existe une fonction AnsiDequotedStr, supprimant les guillemets d'une chaîne de caractères, correspondant à la fonction AnsiQuoteStr ajoutée dans Delphi 5. A partir de Delphi 6, il offre une prise en charge nettement améliorée des chaînes de caractères Unicode, avec une série de nouvelles routines, notamment WideUpperCase, WideLowerCase, WideCompareStr, WideSameStr, WideCompareText, WideSameText et WideFormat. Toutes ces fonctions fonctionnent comme leurs homologues AnsiString. Trois fonctions (TryStrToDate, TryEncodeDate et TryEncodeTime) tentent de convertir une chaîne de caractères en une date ou d'encoder une date ou une heure, sans lever d'exception, de la même manière que les fonctions Try précédemment mentionnées. En outre, la fonction DecodeDateFully renvoie des informations plus détaillées, telles que le jour de la semaine, et la fonction CurrentYear renvoie l'année de la date du jour. Il existe une version portable, conviviale et surchargée de la fonction GetEnvironmentVariable. Cette nouvelle version utilise des paramètres de chaîne de caractères au lieu de paramètres PChar et est nettement plus facile à utiliser :

  1. Function GetEnvironmentVariable(Name:String):String;

D'autres nouvelles fonctions concernent la prise en charge des interfaces. Deux nouvelles versions surchargées de la fonction Support peu connue vous permettent de vérifier si un objet ou une classe prend en charge une interface donnée. La fonction correspond au comportement de l'opérateur is pour les classes et est cartographiée à la méthode QueryInterface.

Il existe également une fonction IsEqualGUID et deux fonctions pour convertir des chaînes de caractères en GUID et vice versa. La fonction CreateGUID a également été déplacée vers SysUtils pour la rendre également disponible sous Linux (avec une mise en oeuvre personnalisée, bien sûr).

Enfin, à partir de Delphi 6, d'autres fonctions de compatibilité Linux ont été ajoutés. La fonction AdjustLineBreaks peut désormais effectuer différents types d'ajustements des séquences de retour chariot et de saut de ligne, ainsi que l'introduction de nouvelles variables globales pour les fichiers texte dans l'unité System. La fonction FileCreate a une version surchargée dans laquelle vous pouvez spécifier les droits d'accès aux fichiers à la manière Unix. La fonction ExpandFileName peut localiser des fichiers (sur des systèmes de fichiers sensibles à la casse) même lorsque leurs cas ne correspondent pas exactement. Les fonctions liées aux délimiteurs de chemin (barre oblique inverse ou barre oblique) ont été rendues plus génériques et renommées en conséquence. (Par exemple, la fonction IncludeTralingBackslash est désormais mieux connue sous le nom d'IncludingTrailingPathDelimiter.)



Dernière mise à jour : Dimanche, le 3 janvier 2021