Templates dynamiques
Remonter à Introduction à RAD Studio
Les templates dynamiques sont des instructions de code squelette réutilisables. Un jeu de templates dynamiques pour Delphi et C++ sont accessibles dans l'éditeur de code.
Vous pouvez insérer l'un de ces squelettes de code prédéfinis dans votre code en double-cliquant sur le nom du template dans la fenêtre Templates. Vous pouvez aussi taper le nom du template et appuyer sur la touche Tab pour insérer le template. Les fichiers XML des templates dynamiques de RAD Studio sont situés dans C:\Program Files (x86)\Embarcadero\Studio\19.0\ObjRepos\en\Code_Templates
.
Vous pouvez ajouter vos propres templates de code dans la fenêtre Templates. Le nom d'un template dynamique peut représenter le code du template (tel que class) ou le premier mot du code (tel que try), et certains noms de templates sont des versions proches (mais pas exactes) de mots que vous pouvez taper (tels que forr). Les templates que vous créez (et les templates fournis par les add-ins tiers) sont enregistrés par défaut dans le répertoire C:\Utilisateurs\<utilisateur>\Documents\Embarcadero\Studio\code_templates
.
Sommaire
Points de saut
Les points de saut sont des espaces réservés pour les champs d'entrée de touches qui vous permettent de naviguer entre les éléments d'un template, à l'aide des touches Tab
et Maj+Tab
.
Si un template a un ou plusieurs points de saut éditables, le template entre automatiquement en mode SyncEdit après son insertion dans votre code. L'appui sur la touche Echap
, Entrée
ou Tab
depuis le dernier point de saut quitte le mode SyncEdit et ramène l'éditeur de code au mode d'édition classique.
Par exemple, dans le template arrayd (tableau Delphi), il existe quatre points de saut, avec les noms name (TMyArray), min (0), max (10) et type (Integer). Le premier point de saut est en surbrillance et actif :
Pour comparer le code XML arrayd au template dynamique arrayd lui-même, ouvrez la fenêtre Templates, sélectionnez le template arrayd et cliquez sur Modifier le template de code.
Exemples : Les templates try pour Delphi et C++
Cette section vous présente les templates try pour Delphi et C++ :
Langage | Nom du template | Description du template |
---|---|---|
Delphi |
try |
try finally (avec Create/Free) |
C++ |
try |
try catch |
Template try Delphi
Vous pouvez voir ci-dessous la fenêtre Templates et le résumé de code contextuel qui s'affiche quand vous déplacez la souris au-dessus du template try Delphi. Les barres verticales ("|") sont des caractères spéciaux, utilisés ici pour délimiter les points de saut du template ($ peut aussi être utilisé pour délimiter les points de saut) :
Voici le template qui est inséré dans l'éditeur de code quand vous activez le template try pour Delphi. Les points de saut entourés ou en surbrillance sont actifs dans la synchronisation des modifications, afin de vous permettre d'éditer toutes les occurrences d'un point de saut en même temps :
Voici le fichier XML du template de code Delphi try.xml, qui affiche la description try finally (avec Create/Free). Dans ce template, vous pouvoir voir :
- Les définitions des trois points de saut (variable, control et createparms)
- La commande script qui associe l'achèvement du code au point de saut control
<?xml version="1.0" encoding="utf-8" ?>
<codetemplate xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
version="1.0.0">
<template name="'''try'''" surround="'''true'''" invoke="'''auto'''">
<point name="'''variable'''">
<text>
'''MyClass'''
</text>
<hint>
'''Variable name'''
</hint>
</point>
<point name="control">
<script language="'''Delphi'''">
'''InvokeCodeCompletion;'''
</script>
<text>
'''Component'''
</text>
<hint>
'''Class name'''
</hint>
</point>
<point name="createparms">
<hint>
'''constructor parameters'''
</hint>
<text>
'''(Self)'''
</text>
</point>
<description>
'''try finally (with Create/Free)'''
</description>
<author>
'''Embarcadero'''
</author>
<script language="'''Delphi'''" onenter="'''false'''" onleave="'''true'''">
'''DeclareVariable(|variable|);'''
</script>
<code language="'''Delphi'''" context="'''methodbody'''" delimiter="|"><![CDATA['''|variable| := T|control|.Create|createparms|;
'''try
'''|selected||*||end|
'''finally
'''|*||variable|.Free;
'''end;'''
''']]>
</code>
</template>
</codetemplate>
Le code du template est situé à l'intérieur de <![CDATA[ ... ]]>
dans l'élément <code>. Dans le template ci-dessus, le premier élément est un point de saut nommé variable :
|variable|
Vous pouvez aussi voir les caractères spéciaux qui indentent une ligne dans le code :
|*|
Pour une double indentation, utilisez :
|*||*|
Template try C++
Voici le résumé de code contextuel qui s'affiche dans la fenêtre Templates quand vous déplacez la souris au-dessus du template try C++. Les signes dollar ($) sont des caractères spéciaux utilisés pour délimiter des points de saut définis et intégrés (| peut aussi être utilisé) :
Voici le template dynamique qui est inséré dans l'éditeur de code quand vous activez le template try C++ (avec Description = 'try catch') :
Et voici le XML réel du template try C++ :
<?xml version="1.0" encoding="utf-8" ?>
<codetemplate xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
version="1.0.0">
<template name="'''try'''" surround="'''true'''" invoke="'''auto'''">
<point name="'''except'''">
<text>
...
</text>
<hint>
'''exception class to catch'''
</hint>
</point>
<description>
'''try catch'''
</description>
<author>
'''Embarcadero'''
</author>
<code language="'''C'''" context="'''methodbody'''"><![CDATA['''try {
'''$selected$$*$$end$
'''} catch ($except$) {
'''}'''
]]>
</code>
</template>
</codetemplate>
Le code réel du template est situé à l'intérieur de <![CDATA[ ... ]]>
dans l'élément <code>.
Ce template utilise le signe dollar ($) comme caractère de délimitation, alors que le template try Delphi utilise la barre verticale (|) comme caractère de délimitation. Les caractères spéciaux suivants indentent une ligne dans le code :
$*$
Pour une double indentation, utilisez :
$*$$*$
Description XML pour les templates dynamiques
Les templates dynamiques sont des fichiers XML qui peuvent contenir l'élément parent suivant :
<codetemplate xmlns="http: ... //schemas.borland.com/Delphi/2005/codetemplates" version="1.0.0"> ...
</codetemplate>
L'élément <codetemplate> contient les éléments enfants suivants :
- <template> </template> a quatre attributs (name, invoke, inplace, surround) :
<template name="class" invoke="manual/auto">
- name (nom du template, obligatoire)
- invoke (comment invoquer le template). Les valeurs possibles sont {auto|manual|none} :
- auto = appuyer sur la touche Espace ou Tab
- manual = appuyer sur la touche Tab
- none = appuyer sur Ctrl+J, Ctrl+Espace ou utiliser la fenêtre Templates
- inplace - (booléen) indique un template d'expansion
- surround - (booléen) active le template pour entourer le texte sélectionné
- <description>
texte
</description> – un élément du template - contient le texte qui apparaît avec le nom du template dans la fenêtre Templates - <author>
nom_auteur
</author> – un élément du template - <point> </point> – un élément du template (comme la description et l'auteur), décrit un espace réservé pour un champ d'entrée, a un nom (obligatoire), et contient trois attributs (text|hint|script) :
- text – attribut du point, contient le texte qui apparaît dans un point de saut
- hint – attribut du point, contient un conseil contextuel
- script – attribut d'un point ou d'un template, contient le plus souvent
invoke_code_completion()
, a un attribut de langage :- language='Delphi' ou language='C'
- D'autres langages et les appels de fonctions sont supportés. Pour de plus amples informations, voir Live Templates Technical Info.
- language='Delphi' ou language='C'
- <code> </code> – un élément du template ; a trois attributs :
- language – peut être 'C' ou 'Delphi' (obligatoire)
- context - détermine quand le template est disponible ; des exemples sont
typedecl - type |
' ou'methodbody - begin | end
- delimiter='|' ou '$' (indique le point de saut dans le code)
- Contient :
<![CDATA[
Le code réel vient ici.
]]>
Appels de fonctions dans les scripts
Vous pouvez utiliser un grand nombre d'appels de fonctions dans un élément script qui est associé à un point ou au template lui-même.
La liste suivante inclut des templates existants qui contiennent un appel de script :
- language="Delphi" :
- InvokeClassCompletion
- InvokeCodeCompletion (voir delphi\trycf.xml)
- PopulateCase(|expression|) (voir delphi\case.xml)
- DeclareVariable(|variable|) (voir delphi\trycf.xml)
- RemoveTemplate (voir delphi\inlinevar.xml)
- ValidateForTemplate (voir delphi\fors.xml)
- language="C" :
- invoke_code_completion (voir c\whiles.xml)
- populate_case($expr$); (voir c\switch.xml)