<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>RAD Studio  - Modifications récentes [fr]</title>
		<link>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Sp%C3%A9cial:Modifications_r%C3%A9centes</link>
		<description>Suivez les dernières modifications du wiki dans ce flux.</description>
		<language>fr</language>
		<generator>MediaWiki 1.43.0</generator>
		<lastBuildDate>Sat, 10 Oct 2026 13:55:59 GMT</lastBuildDate>
		<item>
			<title>Pragma alias</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Pragma_alias&amp;diff=223491&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Pragma_alias&amp;diff=223491&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Pragma_alias&quot; title=&quot;Pragma alias&quot;&gt;Pragma alias&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{DISPLAYTITLE:#pragma alias}}&lt;br /&gt;
{{Parent|Présentation des directives pragma - Index}}&lt;br /&gt;
&lt;br /&gt;
==Syntaxe &amp;lt;span style=&amp;quot;font-size: 60%&amp;quot;&amp;gt;(voir [[Pseudo-grammaire|Pseudo-grammaire]])&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Chaîne d&amp;#039;outils classique&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&lt;br /&gt;
 #pragma alias &amp;quot;aliasName&amp;quot; = &amp;quot;substituteName&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Chaîne d&amp;#039;outils Clang&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&lt;br /&gt;
la directive &amp;lt;code&amp;gt;#pragma alias&amp;lt;/code&amp;gt; n&amp;#039;est pas supportée par les compilateurs [[BCC64X|BCC64X]] et [[Compilateurs Win32 améliorés par Clang|BCC32C]]. A la place, vous pouvez laisser un commentaire pour le lieur en procédant comme suit :&lt;br /&gt;
&lt;br /&gt;
 #pragma comment(linker, &amp;quot;/alternatename:&amp;amp;lt;name1&amp;amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;amp;lt;name2&amp;amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;#pragma alias&amp;lt;/code&amp;gt; indique au lieur que deux noms d&amp;#039;identificateurs sont équivalents. Les deux identificateurs doivent être saisis entre guillemets. Sinon, un avertissement [[W8086 Utilisation incorrecte de l&amp;#039;alias pragma &amp;quot;NomAlias&amp;quot;=&amp;quot;NomSubstitué&amp;quot; (C++)|W8086 Utilisation incorrecte de l&amp;#039;alias pragma &amp;quot;aliasName&amp;quot;=&amp;quot;substituteName&amp;quot; (C++)]] est émis.&lt;br /&gt;
&lt;br /&gt;
Les alias sont à présent gérés dans des unités distinctes, par deux fichiers .obj, un pour Unicode et un pour non-Unicode. Ces deux fichiers .obj font partie de la bibliothèque VCL.&lt;br /&gt;
&lt;br /&gt;
Le &amp;lt;code&amp;gt;NomAlias&amp;lt;/code&amp;gt; et le &amp;lt;code&amp;gt;NomSubstitué&amp;lt;/code&amp;gt; sont injectés dans leur fichier .obj correspondant, exactement comme ils sont écrits à l&amp;#039;intérieur des guillemets. Le lieur recherche toutes les références à &amp;lt;code&amp;gt;NomAlias&amp;lt;/code&amp;gt; et les lie au &amp;lt;code&amp;gt;NomSubstitué&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Note| Les [[Fichier d&amp;#039;en-tête C++ (*.h, *.hpp)|fichiers .hpp]] générés depuis le code {{Delphi}} utilisent l&amp;#039;alias &amp;lt;code&amp;gt;#pragma&amp;lt;/code&amp;gt; pour la gestion des identificateurs qui sont substantypés différemment dans {{Delphi}} et {{CBuilder}}.}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Référence C++]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 19:17:51 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Pragma_alias</comments>
		</item>
		<item>
			<title>Fractionnement de l&#039;éditeur</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Fractionnement_de_l%27%C3%A9diteur&amp;diff=223489&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Fractionnement_de_l%27%C3%A9diteur&amp;diff=223489&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Fractionnement_de_l%27%C3%A9diteur&quot; title=&quot;Fractionnement de l&amp;#039;éditeur&quot;&gt;Fractionnement de l&amp;#039;éditeur&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;La vue [[Fractionnement de l&amp;#039;éditeur|Fractionnement de l&amp;#039;éditeur]] permet d’utiliser plusieurs éditeurs côte à côte, les uns au-dessus des autres, ou de façon combinée, le tout dans une même fenêtre. Cela inclut la possibilité de faire glisser des ensembles d&amp;#039;onglets vers des fenêtres flottantes, puis de les replacer dans l&amp;#039;EDI. &lt;br /&gt;
Elle permet aussi d&amp;#039;avoir plusieurs dispositions personnalisées et offre diverses possibilités de manipulation : disposition simple en deux colonnes, disposition sur plusieurs lignes, ou une configuration particulièrement adaptée à votre flux de travail.&lt;br /&gt;
Vous pouvez travailler en ayant plusieurs onglets ouverts, et ouvrir la même unité dans chacun de ces onglets. Vous pouvez aussi avoir plusieurs onglets ouverts : l&amp;#039;un avec le concepteur de fiche et plusieurs autres avec le code de l&amp;#039;unité correspondante. L&amp;#039;onglet contenant le concepteur de fiche peut aussi être déplacé. &lt;br /&gt;
Il n&amp;#039;y a &amp;#039;&amp;#039;&amp;#039;aucune limite&amp;#039;&amp;#039;&amp;#039; quant au nombre de vues fractionnées, que ce soit horizontalement ou verticalement.&lt;br /&gt;
&lt;br /&gt;
===Utilisation du fractionnement de l&amp;#039;éditeur===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez accéder à la vue Fractionnement de l&amp;#039;éditeur en cliquant avec le bouton droit sur un onglet et en choisissant &amp;#039;&amp;#039;&amp;#039;Fractionner    &amp;amp;gt;&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;Déplacer &amp;amp;gt;&amp;#039;&amp;#039;&amp;#039;. Le fractionnement crée une nouvelle version de l&amp;#039;onglet sélectionné, et le déplacement provoque son ouverture à l&amp;#039;endroit sélectionné dans l&amp;#039;EDI.&lt;br /&gt;
&lt;br /&gt;
[[File:Using-spliteditor.png|=link|400px|border]]&lt;br /&gt;
&lt;br /&gt;
Les raccourcis suivants peuvent être utilisés pour les deux options :&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fractionner en haut :&amp;#039;&amp;#039;&amp;#039; Alt+Maj+T&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fractionner en bas :&amp;#039;&amp;#039;&amp;#039; Alt+Maj+B&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fractionner à droite :&amp;#039;&amp;#039;&amp;#039; Alt+Maj+R&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fractionner à gauche :&amp;#039;&amp;#039;&amp;#039; Alt+Maj+L&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Déplacer en haut :&amp;#039;&amp;#039;&amp;#039; Ctrl+Alt+Maj+T&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Déplacer à gauche :&amp;#039;&amp;#039;&amp;#039; Ctrl+Alt+Maj+L&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Déplacer à droite :&amp;#039;&amp;#039;&amp;#039; Ctrl+Alt+Maj+R&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Déplacer en bas :&amp;#039;&amp;#039;&amp;#039; Ctrl+Alt+Maj+B&lt;br /&gt;
&lt;br /&gt;
Alternativement, vous pouvez utiliser [[Fractionnement de l&amp;#039;éditeur|Fractionnement de l&amp;#039;éditeur]] en faisant glisser un fichier de la vue Projets dans un onglet de l&amp;#039;éditeur. Vous pouvez aussi effectuer un clic droit sur le fichier du projet, puis sélectionner l&amp;#039;option &amp;#039;&amp;#039;&amp;#039;Ouvrir dans&amp;#039;&amp;#039;&amp;#039; et choisir l&amp;#039;onglet de l&amp;#039;éditeur dans lequel vous souhaitez ouvrir le fichier.&lt;br /&gt;
&lt;br /&gt;
Lorsque deux onglets sont dans une fenêtre, chacun a une barre de titre.&lt;br /&gt;
&lt;br /&gt;
Le fractionnement de l&amp;#039;éditeur vous permet de :&lt;br /&gt;
&lt;br /&gt;
*Faire glisser un onglet de l&amp;#039;éditeur, ou un ensemble d&amp;#039;onglets, en faisant glisser la barre de titre et en l&amp;#039;ancrant sur n&amp;#039;importe quel côté de la fenêtre de l&amp;#039;EDI.&lt;br /&gt;
*Le faire glisser et l&amp;#039;ancrer sur n&amp;#039;importe côté de l&amp;#039;éditeur (gauche, droit, haut, bas).&lt;br /&gt;
*Le fusionner avec un ensemble d&amp;#039;onglets en le faisant glisser au centre d&amp;#039;un éditeur existant, y compris une fenêtre flottante d&amp;#039;onglets.&lt;br /&gt;
*Le faire glisser en dehors de sa propre fenêtre (soit un seul onglet ou un ensemble d&amp;#039;onglets).&lt;br /&gt;
&lt;br /&gt;
La plupart des opérations peuvent être réalisées sur des onglets individuels. Il peut s&amp;#039;agir par exemple de déplacer un onglet entre des ensembles d&amp;#039;onglets ancrés en faisant glisser l&amp;#039;onglet individuel d&amp;#039;un emplacement à un autre.&lt;br /&gt;
&lt;br /&gt;
Chaque ensemble d&amp;#039;onglets peut être déplacé à l&amp;#039;extérieur de sa propre fenêtre. Faites glisser la barre de titre pour le déplacer.&lt;br /&gt;
 {{Tip| Vous pouvez appuyer sur Ctrl tout en faisant glisser l&amp;#039;ensemble d&amp;#039;onglets pour vous assurer qu&amp;#039;il ne s&amp;#039;ancre pas.}}&lt;br /&gt;
&lt;br /&gt;
De la même façon, chaque fenêtre peut être ancrée à côté d&amp;#039;un autre ensemble d&amp;#039;onglets. Pour cela, vous devez faire glisser la barre de titre.&lt;br /&gt;
&lt;br /&gt;
{{Note|La plupart des éditeurs/groupes disparaissent de la vue lorsqu&amp;#039;ils sont fermés. Toutefois, la fermeture du premier éditeur (celui qui était auparavant l&amp;#039;éditeur de la fenêtre principale) avec le bouton ‘X’ provoque la fermeture de tous les onglets qu&amp;#039;il contient. L&amp;#039;espace qu&amp;#039;il occupait reste ouvert, car l&amp;#039;éditeur original ne peut pas être fermé. Cela n&amp;#039;a aucune incidence tant que les groupes d&amp;#039;onglets ne sont pas fermés. Il n&amp;#039;y a aucun impact visible lorsque vous créez, déplacez ou ancrez les onglets dans vos tâches.}}&lt;br /&gt;
&lt;br /&gt;
[[File:Split Editor Example.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;C&amp;#039;est l&amp;#039;une des nombreuses façons de configurer la vue Fractionnement de l&amp;#039;éditeur. Elle comporte une fenêtre d&amp;#039;édition sur la gauche, deux à droite, et les volets sont masqués mais apparaissent lorsqu&amp;#039;ils sont survolés par la souris.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===Concepteur et code===&lt;br /&gt;
&lt;br /&gt;
Les vues Fractionnement de l&amp;#039;éditeur permettent de modifier un même fichier dans deux fenêtres d&amp;#039;édition affichées côte à côte, chacune affichant le même contenu de fichier. Lorsque vous tapez dans l&amp;#039;une et que vous faites défiler le texte jusqu&amp;#039;à un emplacement, le texte apparaît dans l&amp;#039;autre fenêtre. Vous pouvez faire défiler les deux fenêtres indépendamment l&amp;#039;une de l&amp;#039;autre, ce qui permet de modifier le fichier à plusieurs endroits. &lt;br /&gt;
Vous pouvez ainsi ouvrir un même fichier dans autant d&amp;#039;onglets que vous le souhaitez.&lt;br /&gt;
{{Note|Gardez toujours à l&amp;#039;esprit qu&amp;#039;il n&amp;#039;y a qu&amp;#039;un seul fichier (module ou tampon de fichier en termes internes) affiché dans plusieurs vues. Ainsi, toute modification effectuée dans l&amp;#039;une de ces vues sera répercutée dans les autres vues (il ne s&amp;#039;agit pas de copier ou de dupliquer une modification). &lt;br /&gt;
&lt;br /&gt;
Autrement dit, toute modification de fichier depuis une fenêtre d&amp;#039;édition concerne le fichier lui-même et pas la fenêtre. Cette modification sera répercutée dans les autres vues. }}&lt;br /&gt;
&lt;br /&gt;
===Conseils et astuces===&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Enregistrez&amp;#039;&amp;#039;&amp;#039; la configuration des éditeurs en tant que disposition du bureau. Sinon, vous risquez de passer beaucoup de temps à définir une présentation qui ne sera pas sauvegardée.&lt;br /&gt;
&lt;br /&gt;
{{Notes|&lt;br /&gt;
&lt;br /&gt;
*Lorsque la disposition de bureau est modifiée, la configuration change également (par ex. lorsque l&amp;#039;EDI commence le débogage et passe en &amp;#039;&amp;#039;&amp;#039;Disposition de débogage&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Lorsque vous changez de disposition, tout groupe d&amp;#039;onglets qui ne trouve pas sa place dans la disposition est détaché et devient une fenêtre flottante.}}&lt;br /&gt;
*Activez &amp;#039;&amp;#039;&amp;#039;Options&amp;#039;&amp;#039;&amp;#039; &amp;amp;gt; &amp;#039;&amp;#039;&amp;#039;Enregistrement et récupération&amp;#039;&amp;#039;&amp;#039; &amp;amp;gt; &amp;#039;&amp;#039;&amp;#039;Enregistrer le bureau du projet lors de la fermeture&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;Enregistrer l&amp;#039;état de l&amp;#039;éditeur à la fermeture d&amp;#039;un onglet&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Lorsque vous enregistrez l&amp;#039;état de l&amp;#039;éditeur, vous enregistrez également la position de défilement, les zones réduites ou développées, etc. C&amp;#039;est très pratique lorsque plusieurs fenêtres d&amp;#039;édition du même fichier sont ouvertes. Ainsi, lorsque vous rouvrez votre bureau et rouvrez le projet (ou tout simplement, lorsque vous rouvrez un éditeur précédemment fermé), la nouvelle fenêtre d&amp;#039;édition s&amp;#039;affiche telle qu&amp;#039;elle était au moment de la fermeture.&lt;br /&gt;
*Pensez à désancrer les volets ancrables d&amp;#039;ancienne génération. Ils sont réduits sous forme de petit onglet sur un côté de la fenêtre principale. Vous pouvez les rendre visibles à nouveau en cliquant dessus, et ils restent affichés tant qu’ils ont la focalisation. Pour cela, vous devez cliquer sur le bouton d&amp;#039;épinglage dans la barre de titre du volet, à côté du bouton X. Cette fonctionnalité existe depuis de nombreuses années, mais elle n’était vraiment utile que lorsque l’espace à l&amp;#039;écran était limité. Maintenant que plusieurs fenêtres d&amp;#039;édition peuvent être fractionnées et ancrées ensemble, il devient très pratique de pouvoir désépingler les volets latéraux pour libérer de l’espace horizontal.&lt;br /&gt;
*Pensez à faire un clic droit sur un onglet &amp;#039;&amp;#039;&amp;#039;&amp;amp;gt; Fractionner &amp;amp;gt; A droite&amp;#039;&amp;#039;&amp;#039; (ou &amp;#039;&amp;#039;&amp;#039;A gauche&amp;#039;&amp;#039;&amp;#039;). L&amp;#039;utilisation de plusieurs colonnes est certainement la configuration la plus courante pour les vues fractionnées. Plus vous utiliserez cette fonctionnalité, plus vous constaterez son utilité.&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Présentation de l&amp;#039;EDI|Présentation de l&amp;#039;EDI]]&lt;br /&gt;
*[[Aperçu et page d&amp;#039;accueil|Aperçu et page d&amp;#039;accueil]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 19:17:51 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Fractionnement_de_l%27%C3%A9diteur</comments>
		</item>
		<item>
			<title>WebStencils</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=WebStencils&amp;diff=223487&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=WebStencils&amp;diff=223487&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/WebStencils&quot; title=&quot;WebStencils&quot;&gt;WebStencils&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;WebStencils, un système d&amp;#039;intégration et de traitement des fichiers HTML côté serveur, a été introduit dans {{Product}} version 12.2 pour les technologies WebBroker et RAD Server. Cette fonctionnalité flexible permet aux développeurs de concevoir des sites web modernes basés sur n&amp;#039;importe quelle bibliothèque JavaScript tout en exploitant les données extraites et traitées par une application serveur RAD Studio. Cette technologie offre une grande flexibilité pour créer des sites web adaptés à vos besoins spécifiques.&lt;br /&gt;
&lt;br /&gt;
WebStencils a pour objectif de faciliter la création de sites de navigation par l&amp;#039;adoption des technologies Web (WebBroker, DataSnap, RAD Server) en fournissant des scripts côté serveur. Il est ainsi possible de générer des pages HTML avec des outils standard et d&amp;#039;utiliser n&amp;#039;importe quelle bibliothèque CSS et JavaScript tout en ajoutant des données à partir des pages générées depuis l&amp;#039;application (il peut s&amp;#039;agir par exemple du résultat d&amp;#039;une requête de base de données).&lt;br /&gt;
&lt;br /&gt;
De plus, WebStencils constitue une excellente base pour le développement Web avec HTMX. Les pages HTMX bénéficient de la génération de code côté serveur et peuvent se connecter à des serveurs REST pour la mise à jour du contenu. Les technologies Web de Delphi offrent des fonctionnalités de génération de page et d&amp;#039;API REST de très haut niveau.&lt;br /&gt;
&lt;br /&gt;
==Syntaxe de WebStencil==&lt;br /&gt;
&lt;br /&gt;
Le langage de script de WebStencils repose sur deux éléments et est relativement simple :&lt;br /&gt;
&lt;br /&gt;
* Le {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039; }}&lt;br /&gt;
* Les accolades {{code| &amp;#039;&amp;#039;&amp;#039;{ }&amp;#039;&amp;#039;&amp;#039; }}&lt;br /&gt;
&lt;br /&gt;
===Utilisation du symbole {{code|@}}===&lt;br /&gt;
&lt;br /&gt;
WebStencils utilise le symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}} comme marqueur spécial plutôt que des balises HTML/XML ou d&amp;#039;autres notations. Le symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}} est suivi par :&lt;br /&gt;
&lt;br /&gt;
* Le nom d&amp;#039;un objet ou d&amp;#039;un champ.&lt;br /&gt;
* Un [[WebStencils#Mots clé de WebStencils|mot clé spécial]].&lt;br /&gt;
* Un autre symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}}. {{Tip|  L&amp;#039;utilisation du symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}} est plus souple. Ainsi, vous n&amp;#039;aurez pas besoin de le doubler dans certaines situations, comme dans les en-têtes.}}&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;accès général à une valeur est basé sur une notation par point, sous la forme object.value. C&amp;#039;est pourquoi vous observerez des balises comme :&lt;br /&gt;
&lt;br /&gt;
 @object.value&lt;br /&gt;
&lt;br /&gt;
Le nom de &amp;#039;&amp;#039;&amp;#039;l&amp;#039;objet&amp;#039;&amp;#039;&amp;#039; est un nom symbolique local qui peut correspondre à un objet réel d&amp;#039;une application serveur, assigné à l&amp;#039;exécution du script via un processus de recensement. Il peut aussi être résolu dans le code lors du traitement d&amp;#039;un gestionnaire d&amp;#039;événement OnGetValue.&lt;br /&gt;
&lt;br /&gt;
La valeur est composée du nom de la propriété (pour un objet générique), du nom d&amp;#039;un champ (si l&amp;#039;objet hérite de TDataSet), et d&amp;#039;une chaîne qui est transmise dans le gestionnaire d&amp;#039;événement OnGetValue associé au processeur.&lt;br /&gt;
&lt;br /&gt;
{{Note|La sortie des valeurs traitées par WebStencils est chiffrée avec la méthode TNetEncoding.HTML.Encode. Vous pouvez supprimer le chiffrement en utilisant la syntaxe {{code|@\value}}.}}&lt;br /&gt;
&lt;br /&gt;
====Accès aux ensembles de données et objets imbriqués====&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi utiliser le symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}} pour accéder à des ensembles de données et des objets imbriqués en utilisant la syntaxe suggérée dans les scénarios suivants :&lt;br /&gt;
&lt;br /&gt;
* Objets et classes imbriqués :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@MyObject.SubObject.ProperyName&amp;lt;/source&amp;gt;&lt;br /&gt;
* Tables dans les ensembles de données imbriqués :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@MyDataSet.DataSetField.SubField&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Utilisation des accolades pour les blocs {{code|{}}}===&lt;br /&gt;
&lt;br /&gt;
La seconde notation utilise des accolades, {{code|{}} et {{code|}}}, pour indiquer les blocs conditionnels ou répétés.&lt;br /&gt;
&lt;br /&gt;
Toute autre utilisation des accolades dans le fichier de code source (le fichier HTML) est ignorée. En d&amp;#039;autres termes, les accolades ne sont traitées que si elles sont utilisées après une instruction conditionnelle WebStencils spécifique.&lt;br /&gt;
&lt;br /&gt;
===Accès à des valeurs avec la notation par point===&lt;br /&gt;
&lt;br /&gt;
Prenons en exemple l&amp;#039;extrait de code HTML WebStencils ci-dessous :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;GetValue&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Value obtained from data: @data.name&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Value obtained with request @@data.value: @data.value&amp;lt;/p&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les symboles {{code|@@}} sont ignorés (nous attendons un seul {{code|@}} en sortie). Il suffit d&amp;#039;un seul pour déclencher le traitement. &lt;br /&gt;
Notez également que les deux symboles, le nom d&amp;#039;objet et le nom de valeur, doivent être des identificateurs Delphi valides et ne peuvent pas contenir d&amp;#039;espaces ni commencer par un chiffre. Un nom peut contenir des caractères de soulignement et des chiffres.&lt;br /&gt;
&lt;br /&gt;
===Gestionnaire d&amp;#039;événement OnValue===&lt;br /&gt;
&lt;br /&gt;
Il est possible de fournir des données en utilisant un composant avec le gestionnaire d&amp;#039;événement OnValue. Par exemple :&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Delphi :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TWebModule13.WebStencilsValueFromEventValue(Sender: TObject;&lt;br /&gt;
  const ObjectName, FieldName: string; var ReplaceText: string; &lt;br /&gt;
  var Handled: Boolean)&lt;br /&gt;
begin&lt;br /&gt;
  if SameText (ObjectName, &amp;#039;data&amp;#039;) then&lt;br /&gt;
  begin&lt;br /&gt;
    Handled := True;&lt;br /&gt;
    ReplaceText := &amp;#039;You requested &amp;#039; + FieldName;&lt;br /&gt;
  end;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans le code exemple ci-dessus, le code vérifie uniquement le nom d&amp;#039;objet (la première partie du symbole avant le point), mais il est recommandé de vérifier également la propriété FieldName (le symbole après le point).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++ :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TWebModule13::WebStencilsValueFromEventValue(TObject *Sender,&lt;br /&gt;
  const String ObjectName, const String FieldName, String &amp;amp;ReplaceText, bool &amp;amp;Handled)&lt;br /&gt;
{&lt;br /&gt;
  if (SameText(ObjectName, &amp;quot;data&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    Handled = true;&lt;br /&gt;
    ReplaceText = &amp;quot;You requested &amp;quot; + FieldName;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, {{code|String}} est une chaîne {{code|UnicodeString}} compatible Delphi dans C++ Builder. {{code|SameText}} est une fonction de comparaison de chaînes insensible à la casse fournie par SysUtils. Enfin, {{code|&amp;amp;amp;ReplaceText}} et {{code|&amp;amp;amp;Handled}} sont transmis par référence pour permettre la modification et reproduire le comportement {{code|var}} de Delphi.&lt;br /&gt;
&lt;br /&gt;
===Utilisation d&amp;#039;un objet dans le dictionnaire de variables de script===&lt;br /&gt;
&lt;br /&gt;
Une autre approche consiste à fournir les valeurs en utilisant un objet. Dans ce cas, l&amp;#039;objet doit être configuré et associé à l&amp;#039;action du producteur.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple complet, supposant une classe TMyObject et sa propriété Name :&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Delphi :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TWebModule1.WebModule1WebActionItem2Action(Sender: TObject;&lt;br /&gt;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);&lt;br /&gt;
begin&lt;br /&gt;
  WebStencilsProcessor1.InputLines.Text := &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    &amp;lt;h2&amp;gt;GetValue&amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Value obtained from data: @world.Name&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
  var MyObj := TMyObject.Create();&lt;br /&gt;
  MyObj.Name := &amp;#039;Hello hello&amp;#039;;&lt;br /&gt;
  WebStencilsProcessor1.AddVar(&amp;#039;world&amp;#039;, MyObj, True);&lt;br /&gt;
  Response.Content := WebStencilsProcessor1.Content;&lt;br /&gt;
  Handled := True;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cet exemple donne le résultat suivant :&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;Value obtained from data: Hello Hello&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Notez que l&amp;#039;objet est recensé avec le nom &amp;#039;world&amp;#039;, qui sera ensuite utilisé dans le script WebStencils.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++ :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TWebModule1::WebModule1WebActionItem2Action(TObject *Sender,&lt;br /&gt;
  TWebRequest *Request, TWebResponse *Response, bool &amp;amp;Handled)&lt;br /&gt;
{&lt;br /&gt;
  WebStencilsProcessor1-&amp;gt;InputLines-&amp;gt;Text =&lt;br /&gt;
    &amp;quot;&amp;lt;h2&amp;gt;GetValue&amp;lt;/h2&amp;gt;\n&amp;quot;&lt;br /&gt;
    &amp;quot;&amp;lt;p&amp;gt;Value obtained from data: @world.Name&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  TMyObject *MyObj = new TMyObject();&lt;br /&gt;
  MyObj-&amp;gt;Name = &amp;quot;Hello hello&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  WebStencilsProcessor1-&amp;gt;AddVar(&amp;quot;world&amp;quot;, MyObj, true);&lt;br /&gt;
&lt;br /&gt;
  Response-&amp;gt;Content = WebStencilsProcessor1-&amp;gt;Content;&lt;br /&gt;
  Handled = true;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Expressions===&lt;br /&gt;
&lt;br /&gt;
Voici la liste des expressions prises en charge :&lt;br /&gt;
&lt;br /&gt;
*{{code|&amp;#039;&amp;#039;&amp;#039;@ (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}} - marqueurs de variable. L&amp;#039;expression doit être écrite entre parenthèses.&lt;br /&gt;
*{{code|&amp;#039;&amp;#039;&amp;#039;@if (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}} - commande &amp;quot;if&amp;quot;. L&amp;#039;expression doit être écrite entre parenthèses.&lt;br /&gt;
*{{code|&amp;#039;&amp;#039;&amp;#039;@Import (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}}, {{code|&amp;#039;&amp;#039;&amp;#039;@LayoutPage (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}}, {{code|&amp;#039;&amp;#039;&amp;#039;@AddPage (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}} - &amp;#039;&amp;#039;commandes de fichier. L&amp;#039;expression doit être écrite entre accolades.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple suivant montre uniquement les différences entre les options ci-dessus :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
WebStencilsProcessor1.InputLines.Text := &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    &amp;lt;h2&amp;gt;GetExpression&amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Value obtained from data: @(world.value*2)&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
  MyObj.Value := 2;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous obtenez alors la sortie suivante :&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;Value obtained from data: 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
En plus des expressions simples, vous pouvez étendre le système en utilisant des appels de fonction personnalisés. Voici un exemple de code qui recense une fonction “&amp;#039;&amp;#039;&amp;#039;Concat&amp;#039;&amp;#039;&amp;#039;” recevant deux paramètres chaîne :&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Delphi :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
uses&lt;br /&gt;
  System.Bindings.EvalProtocol, System.Bindings.Methods;&lt;br /&gt;
&lt;br /&gt;
  TBindingMethodsFactory.RegisterMethod(&lt;br /&gt;
   TMethodDescription.Create(&lt;br /&gt;
    MakeInvokable(function(Args: TArray&amp;lt;IValue&amp;gt;): IValue&lt;br /&gt;
    begin&lt;br /&gt;
     Result := TValueWrapper.Create(&lt;br /&gt;
      Args[0].GetValue.AsString + Args[1].GetValue.AsString);&lt;br /&gt;
    end),&lt;br /&gt;
    &amp;#039;Concat&amp;#039;, &amp;#039;Concat&amp;#039;, &amp;#039;&amp;#039;, True, &amp;#039;&amp;#039;, nil));&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un script WebStencils, vous pouvez l&amp;#039;utiliser dans une expression comme :&lt;br /&gt;
&lt;br /&gt;
 @(Concat(&amp;#039;aaa&amp;#039;, &amp;#039;bbb&amp;#039;]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++ :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;System.Bindings.EvalProtocol.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;System.Bindings.Methods.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;System.Rtti.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;System.SysUtils.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace System::Bindings::EvalProtocol;&lt;br /&gt;
using namespace System::Bindings::Methods;&lt;br /&gt;
using namespace System::Rtti;&lt;br /&gt;
&lt;br /&gt;
class TValueWrapper : public TInterfacedObject, public IValue&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
    TValue FValue;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
    __fastcall TValueWrapper(const TValue &amp;amp;AValue) : FValue(AValue) {}&lt;br /&gt;
&lt;br /&gt;
    virtual TValue __fastcall GetValue() { return FValue; }&lt;br /&gt;
&lt;br /&gt;
    // Implement other IValue methods as needed...&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void RegisterCustomBindingMethod()&lt;br /&gt;
{&lt;br /&gt;
    TBindingMethodsFactory::RegisterMethod(&lt;br /&gt;
        new TMethodDescription(&lt;br /&gt;
            MakeInvokable([](const TArray&amp;lt;IValue*&amp;gt; &amp;amp;Args) -&amp;gt; IValue*&lt;br /&gt;
            {&lt;br /&gt;
                String s1 = Args[0]-&amp;gt;GetValue().ToString();&lt;br /&gt;
                String s2 = Args[1]-&amp;gt;GetValue().ToString();&lt;br /&gt;
                return new TValueWrapper(TValue::From&amp;lt;String&amp;gt;(s1 + s2));&lt;br /&gt;
            }),&lt;br /&gt;
            &amp;quot;Concat&amp;quot;, &amp;quot;Concat&amp;quot;, &amp;quot;&amp;quot;, true, &amp;quot;&amp;quot;, nullptr));&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Instruction Switch====&lt;br /&gt;
&lt;br /&gt;
En plus de l&amp;#039;instruction {{code|@if}}, les utilisateurs peuvent choisir d&amp;#039;utiliser les instructions {{code|@switch}} ou {{code|@case}}.&lt;br /&gt;
 &lt;br /&gt;
Voici un exemple de syntaxe :&amp;lt;source&amp;gt;&lt;br /&gt;
@switch(@user.role) {&lt;br /&gt;
  @case &amp;quot;admin&amp;quot; { &lt;br /&gt;
    &amp;lt;div&amp;gt;Admin Panel&amp;lt;/div&amp;gt;&lt;br /&gt;
  } @case &amp;quot;moderator&amp;quot; { &lt;br /&gt;
    &amp;lt;div&amp;gt;Moderator Tools&amp;lt;/div&amp;gt;&lt;br /&gt;
  } @default { &lt;br /&gt;
    &amp;lt;div&amp;gt;Regular User View&amp;lt;/div&amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A partir de l&amp;#039;exemple ci-dessus, notez que :&lt;br /&gt;
&lt;br /&gt;
*Les valeurs des &amp;quot;case&amp;quot; peuvent être des littéraux ou des expressions utilisant {{code|@}}(expression).&lt;br /&gt;
*Seul le premier &amp;quot;case&amp;quot; correspondant est exécuté.&lt;br /&gt;
*L&amp;#039;utilisation de {{code|@default}} est facultative et s&amp;#039;exécute s&amp;#039;il n&amp;#039;y a pas de correspondance avec &amp;quot;case&amp;quot;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
===Utilisation d&amp;#039;un ensemble de données===&lt;br /&gt;
&lt;br /&gt;
Une alternative consiste à utiliser l&amp;#039;enregistrement en cours d&amp;#039;un ensemble de données plutôt qu&amp;#039;un objet. Dans ce cas, votre code sera comme suit :&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Delphi :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TWebModule13.WebModule13waCompanyAction(Sender: TObject;&lt;br /&gt;
    Request: TWebRequest; Response: TWebResponse;&lt;br /&gt;
    var Handled: Boolean];&lt;br /&gt;
  begin  &lt;br /&gt;
   ClientDataSet1.Open;&lt;br /&gt;
   if not WebStencilsValueFromObject.InVars  (&amp;#039;dataset&amp;#039;] then&lt;br /&gt;
    WebStencilsValueFromObject.AddVar(&lt;br /&gt;
      &amp;#039;dataset&amp;#039;, ClientDataSet1, False]; // False = do not destroy&lt;br /&gt;
  Response.Content := WebStencilsValueFromObject.Content;&lt;br /&gt;
  ClientDataSet1.Close;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++ :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TWebModule13::WebModule13waCompanyAction(TObject *Sender,&lt;br /&gt;
  TWebRequest *Request, TWebResponse *Response, bool &amp;amp;Handled)&lt;br /&gt;
{&lt;br /&gt;
  ClientDataSet1-&amp;gt;Open();&lt;br /&gt;
&lt;br /&gt;
  if (!WebStencilsValueFromObject-&amp;gt;InVars(&amp;quot;dataset&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    WebStencilsValueFromObject-&amp;gt;AddVar(&amp;quot;dataset&amp;quot;, ClientDataSet1, false); // false = do not destroy&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Response-&amp;gt;Content = WebStencilsValueFromObject-&amp;gt;Content;&lt;br /&gt;
&lt;br /&gt;
  ClientDataSet1-&amp;gt;Close();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code HTML correspondant peut contenir des références à certains champs de l&amp;#039;enregistrement. Voici un exemple de résultat :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;list-group w-50&amp;quot;&amp;gt;&lt;br /&gt;
  @foreach dataset {&lt;br /&gt;
    &amp;lt;a href=&amp;quot;/company?id=@loop.custno&amp;quot; class=&amp;quot;list-group-item  &lt;br /&gt;
        list-group-item-action&amp;quot; aria-current=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;d-flex w-100 justify-content-between&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h5 class=&amp;quot;mb-1&amp;quot;&amp;gt;@loop.company&amp;lt;/h5&amp;gt;&lt;br /&gt;
      &amp;lt;small&amp;gt;@loop.country&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;mb-1&amp;quot;&amp;gt;@loop.city&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;@loop.state&amp;lt;/small&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Accès aux propriétés de l&amp;#039;ensemble de données====&lt;br /&gt;
&lt;br /&gt;
La notation WebStencils {{code|@}} relative à un ensemble de données permet d&amp;#039;accéder aux propriétés de l&amp;#039;ensemble de données, en plus de ses champs. Les utilisateurs peuvent utiliser {{code|@data.RecordCount}} pour accéder à la propriété RecordCount. En cas de conflit, les champs de l&amp;#039;ensemble de données ont priorité sur les propriétés portant le même nom.&lt;br /&gt;
&lt;br /&gt;
Cela inclut l&amp;#039;accès aux informations des champs, comme suit :&lt;br /&gt;
&lt;br /&gt;
 @foreach field in customers.fields&lt;br /&gt;
&lt;br /&gt;
Ainsi que l&amp;#039;accès aux propriétés des champs :&amp;lt;source&amp;gt;&lt;br /&gt;
@foreach customer in customers {&lt;br /&gt;
    @customer.address.visible&lt;br /&gt;
    @customer.phone.displaylabel&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Utilisation de variables de modules==&lt;br /&gt;
&lt;br /&gt;
Alternativement, pour recenser un objet spécifique pour un WebStencilsProcessor, vous pouvez ajouter un “&amp;#039;&amp;#039;&amp;#039;module&amp;#039;&amp;#039;&amp;#039;” avec plusieurs objets. Dans ce contexte, un &amp;#039;module&amp;#039; est une collection d&amp;#039;objets ou de fonctions liés entre eux. N&amp;#039;importe quel champ ou n&amp;#039;importe quelle propriété du module peut être décoré avec l&amp;#039;attribut {{code|&amp;#039;&amp;#039;&amp;#039;[WebStencilsVar]&amp;#039;&amp;#039;&amp;#039;}}, qui vous permet de spécifier comment le WebStencilsProcessor doit traiter les données.&lt;br /&gt;
&lt;br /&gt;
Par exemple, supposons que votre module de données a un composant FDMemTable1 de type TFDMemTable marqué comme {{code|&amp;#039;&amp;#039;&amp;#039;[WebStencilsVar]&amp;#039;&amp;#039;&amp;#039;}}, et un champ LastName, vous pouvez écrire :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  WebStencilsProcessor1.InputLines.Text := &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    &amp;lt;h2&amp;gt;GetTableData&amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Value obtained from table: @(FDMemTable1.LastName)&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
  WebStencilsProcessor1.AddModule(self);&amp;lt;/source&amp;gt;L&amp;#039;exemple ci-dessous renvoie la valeur de LastName dans le premier enregistrement. Utilisez une boucle {{code|&amp;#039;&amp;#039;&amp;#039;@for&amp;#039;&amp;#039;&amp;#039;}} pour afficher tous les enregistrements.&lt;br /&gt;
&lt;br /&gt;
===Utilisation de variables supplémentaires===&lt;br /&gt;
&lt;br /&gt;
Ajoutez des variables supplémentaires au moteur de script à l&amp;#039;extérieur des modèles d&amp;#039;objet et d&amp;#039;ensemble de données. Plutôt que d&amp;#039;ajouter une structure de données spécifique, ce mécanisme propose une méthode anonyme qui permet d&amp;#039;implémenter une recherche personnalisée dans une structure de données personnalisée. Il s&amp;#039;agit des méthodes suivantes :&lt;br /&gt;
&lt;br /&gt;
 TWebStencilsDataVars.Add(LookupFunc), AddInitFunc(LookupFunc)&lt;br /&gt;
 TWebStencilsProcessor.AddVar(LookupFunc), AddInitFunc(LookupFunc)&lt;br /&gt;
 TWebStencilsEngine.AddVar(LookupFunc), AddInitFunc(LookupFunc)&lt;br /&gt;
&lt;br /&gt;
Voici un exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
  TMap = TDictionary&amp;lt;string, string&amp;gt;;&lt;br /&gt;
var&lt;br /&gt;
  LDict: TMap;&lt;br /&gt;
begin&lt;br /&gt;
  LDict := TMap.Create;&lt;br /&gt;
  LDict.Add(&amp;#039;APP_VERSION&amp;#039;, &amp;#039;1.0.0&amp;#039;);&lt;br /&gt;
  LDict.Add(&amp;#039;APP_NAME&amp;#039;, &amp;#039;WebStencils demo&amp;#039;);&lt;br /&gt;
  LDict.Add(&amp;#039;COMPANY_NAME&amp;#039;, &amp;#039;Embarcadero Inc.&amp;#039;);&lt;br /&gt;
  LDict.Add(&amp;#039;DEBUG_MODE&amp;#039;, &amp;#039;True&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
  FWebStencilsProcessor.AddVar(&amp;#039;env&amp;#039;, LDict, True,&lt;br /&gt;
    function(AVar: TWebStencilsDataVar; const APropName: string; &lt;br /&gt;
      var AValue: string): Boolean&lt;br /&gt;
    begin&lt;br /&gt;
      Result := TMap(AVar.TheObject).TryGetValue(APropName.ToUpper, AValue);&lt;br /&gt;
    end);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi l&amp;#039;utiliser dans un modèle, comme suit :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 @env.APP_NAME - @env.APP_VERSION&lt;br /&gt;
 @if env.DEBUG_MODE {&lt;br /&gt;
   &amp;lt;div&amp;gt;Debug mode active&amp;lt;/div&amp;gt;&lt;br /&gt;
 }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mots clés de WebStencil==&lt;br /&gt;
&lt;br /&gt;
Le moteur WebStencils utilise les balises suivantes sous forme de mots clés (notez que ces noms ne peuvent pas être utilisés pour des variables de script).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Mot clé&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@query&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisé pour lire des paramètres de requête HTTP.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@page&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Fournit l&amp;#039;accès au nom de la page et aux arguments de l&amp;#039;URL (voir la propriété [[WebStencils#Utilisation de WebStencils avec RAD Server|PathTemplate]] pour plus d&amp;#039;informations). Il est possible d&amp;#039;accéder au chemin de l&amp;#039;URL en utilisant l&amp;#039;une de ces valeurs :&lt;br /&gt;
*{{code|@page.request_path}}&lt;br /&gt;
*{{code|@page.request_segment}}&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@lang&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisé pour la prise en charge de la traduction, déclenche un événement OnLang distinct plutôt que l&amp;#039;événement OnValue.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@* .. *@&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisé pour ajouter des commentaires dans le script, qui seront omis dans le HTML résultant.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@if&amp;#039;&amp;#039;&amp;#039;}} object.value { … } [&amp;#039;&amp;#039;&amp;#039;@else&amp;#039;&amp;#039;&amp;#039; { … }]&lt;br /&gt;
|Exécute le bloc suivant entre accolades uniquement si la valeur vaut {{code|true}}.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@if (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisé pour restituer du contenu de façon conditionnelle. Si l&amp;#039;expression est évaluée à {{code|true}}, le contenu associé est inclus dans la sortie ; sinon il est omis.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@if not&amp;#039;&amp;#039;&amp;#039; object.value { ... } [&amp;#039;&amp;#039;&amp;#039;@else&amp;#039;&amp;#039;&amp;#039; { … }]}}&lt;br /&gt;
|Exécute le bloc suivant entre accolades uniquement si la valeur ne vaut pas {{code|true}}. &amp;lt;br /&amp;gt;Par exemple :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 @if obj1.ValueBelowTen {&lt;br /&gt;
	  &amp;lt;p&amp;gt;@obj1.name &amp;lt;span&amp;gt; has a value of &amp;lt;/span&amp;gt; @obj1.value&amp;lt;/p&amp;gt;&lt;br /&gt;
	}&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@ForEach&amp;#039;&amp;#039;&amp;#039; (var object in list) { … }}}&lt;br /&gt;
|Exécute le bloc entre accolades suivant aussi souvent qu&amp;#039;il y a d&amp;#039;éléments dans l&amp;#039;énumérateur. &amp;lt;br /&amp;gt;Supporte actuellement :&lt;br /&gt;
*Les ensembles de données&lt;br /&gt;
*TObjectList, doit être ajouté au dictionnaire de processeur.&lt;br /&gt;
*Tout objet possédant la méthode GetEnumerator, où l&amp;#039;énumérateur renvoie une valeur d&amp;#039;objet.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@ForEach&amp;#039;&amp;#039;&amp;#039; object { … }}}&lt;br /&gt;
|Exécute le bloc entre accolades suivant aussi souvent qu&amp;#039;il y a d&amp;#039;éléments dans l&amp;#039;énumérateur. &amp;lt;br /&amp;gt;Supporte actuellement les ensembles de données et TObjectList, qui doivent être ajoutés en tant que variables de script.&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@loop&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisez à l&amp;#039;intérieur d&amp;#039;un bloc pour faire référence à l&amp;#039;élément en cours de l&amp;#039;énumération (liste ou ensemble de données). Il doit être suivi du nom d&amp;#039;une propriété ou d&amp;#039;un champ sans utiliser de nom d&amp;#039;objet.&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@Import&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Permet de fusionner un fichier externe à un emplacement spécifique du fichier externe. Suppose toutefois que le nom de fichier ait l&amp;#039;extension .HTML. &amp;lt;br /&amp;gt;Le format doit être comme suit :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@import filename [ {&amp;lt;alias1&amp;gt; = &amp;lt;var1&amp;gt; [..., &amp;lt;aliasN&amp;gt; = &amp;lt;varN&amp;gt;]} ]&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@Scaffolding&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Espace réservé pour le scaffolding. Ce mécanisme permet de générer dynamiquement du code HTML à partir de la structure de données d&amp;#039;une application (les propriétés d&amp;#039;un objet et les champs d&amp;#039;une base de données). Le code HTML généré côté serveur peut inclure d&amp;#039;autres balises pour accéder aux données. &amp;lt;br /&amp;gt;Le code suivant est un exemple de disposition HTML simple générée dans le gestionnaire d&amp;#039;événement OnScaffolding pour chacun des champs de la base de données.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TWebModule1.ProcessorCompanyScaffolding(Sender: TObject;&lt;br /&gt;
  const AQualifClassName: string; var AReplaceText: string);&lt;br /&gt;
begin&lt;br /&gt;
  if SameText (AQualifClassName, &amp;#039;Company&amp;#039;) then&lt;br /&gt;
  begin&lt;br /&gt;
    AReplaceText := &amp;#039;&amp;#039;;&lt;br /&gt;
    for var I := 0 to ClientDataSet1.Fields.Count -1 do&lt;br /&gt;
      AReplaceText := AReplaceText + &amp;#039;&amp;lt;p&amp;gt;&amp;#039;+ &lt;br /&gt;
        ClientDataSet1.Fields[I].FieldName +&lt;br /&gt;
        &amp;#039;: @dataset.&amp;#039; + ClientDataSet1.Fields[I].FieldName + &amp;#039;&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
  end;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@switch&amp;#039;&amp;#039;&amp;#039;}}, {{code|&amp;#039;&amp;#039;&amp;#039;@case&amp;#039;&amp;#039;&amp;#039;}}, {{code|&amp;#039;&amp;#039;&amp;#039;@default&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Effectue un rendu conditionnel à branches multiples. Après avoir évalué une expression, la met en correspondance avec les valeurs définies avec @case, en restituant le bloc correspondant. La directive @default est utilisée si aucune correspondance n&amp;#039;est trouvée pour @case.&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@LoginRequired&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Arrête l&amp;#039;exécution si une connexion est requise alors que l&amp;#039;utilisateur n&amp;#039;est pas connecté.&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@LoginRequired (&amp;amp;lt;role&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Le moteur vérifie que l&amp;#039;utilisateur est connecté, mais aussi qu&amp;#039;il dispose du rôle spécifique actif, ce qui restreint l&amp;#039;accès à la page selon la permission.&amp;lt;br /&amp;gt; Par exemple : &amp;#039;&amp;#039;&amp;#039;@LoginRequired (admin)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Alias d&amp;#039;importation===&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple ci-dessous illustre comment utiliser des alias d&amp;#039;importation.&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@import one {@o1 = @object, @d1 = @data} Hello&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans ce code, &amp;#039;&amp;#039;&amp;#039;@object&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;@data&amp;#039;&amp;#039;&amp;#039; sont les véritables variables dans le script exécuté. Les alias &amp;#039;&amp;#039;&amp;#039;@o1&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;@d1&amp;#039;&amp;#039;&amp;#039; sont des variables de script pour le script &amp;quot;one&amp;quot; et sont accessibles dans ce script comme des variables normales. Ainsi, vous pouvez transmettre au script QA des variables portant des noms différents, en fournissant comme alias le nom attendu par le script.&lt;br /&gt;
&lt;br /&gt;
==Modèles WebStencils : disposition et corps==&lt;br /&gt;
&lt;br /&gt;
La capacité à fusionner un modèle HTML partagé avec le contenu d&amp;#039;une page compte parmi les fonctionnalités indispensables d&amp;#039;un moteur de modèle. Cette opération s&amp;#039;effectue (comme dans la version .NET) en utilisant quatre symboles spéciaux :&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;@LayoutPage filename&amp;#039;&amp;#039;&amp;#039; : cette commande est utilisée dans une page HTML spécifique (généralement en haut de page) pour indiquer le fichier de modèle à utiliser comme structure de la page. Plusieurs pages peuvent partager un même modèle, mais toutes les pages d&amp;#039;un projet (même en utilisant TWebStencilsEngine) ou d&amp;#039;un dossier virtuel n&amp;#039;ont pas nécessairement besoin d&amp;#039;utiliser le même modèle.&lt;br /&gt;
&lt;br /&gt;
:{{Note| Cette commande ne doit être utilisée qu&amp;#039;une seule fois par page. Si vous tentez d&amp;#039;utiliser plusieurs fois &amp;#039;&amp;#039;&amp;#039;@LayoutPage&amp;#039;&amp;#039;&amp;#039;, une exception se déclenche et bloque la commande.}}&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;@RenderBody&amp;#039;&amp;#039;&amp;#039; : cette commande sans paramètre est une marque de réservation dans un fichier de modèle qui indique où placer le contenu d&amp;#039;une page spécifique.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple d&amp;#039;utilisation de &amp;#039;&amp;#039;&amp;#039;@LayoutPage&amp;#039;&amp;#039;&amp;#039; et de &amp;#039;&amp;#039;&amp;#039;@RenderBody&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Test.html&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@LayoutPage BaseTemplate&lt;br /&gt;
   &amp;lt;h2&amp;gt;Page Test3&amp;lt;/h2&amp;gt;&lt;br /&gt;
   &amp;lt;p&amp;gt;Local data param one is @page.name (the page name)&amp;lt;/p&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;BaseTemplate.html&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Bootstrap CSS →&lt;br /&gt;
    &amp;lt;link href=&amp;quot;https://.../bootstrap.min.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;nav class=&amp;quot;navbar navbar-expand-md bg-dark mb-4&amp;quot;&amp;gt;...&lt;br /&gt;
    &amp;lt;main class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;bg-light p-5 rounded&amp;quot;&amp;gt;&lt;br /&gt;
      @RenderBody&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/main&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
De plus, vous pouvez injecter des en-têtes supplémentaires du document spécifié vers le modèle (par exemple, un fichier JavaScript requis à inclure dans la page ou le CSS supplémentaire d&amp;#039;une page spécifique). Dans ce cas, le mécanisme est inversé :&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;@ExtraHeader&amp;#039;&amp;#039;&amp;#039; { ... } : utilisé dans la page HTML spécifique pour indiquer un bloc de code à ajouter en tant qu&amp;#039;information d&amp;#039;en-tête supplémentaire.&lt;br /&gt;
Il supporte aussi la propagation de contenu sur l&amp;#039;ensemble des hiérarchies de disposition imbriquées :&lt;br /&gt;
** Les blocs {{code|@ExtraHeader}} définis dans les pages se propagent automatiquement à travers plusieurs niveaux de disposition.&lt;br /&gt;
** Le contenu est injecté dans la sortie finale quelles que soient les dispositions intermédiaires.&lt;br /&gt;
** Permet une composition de disposition flexible, avec des dispositions de base, intermédiaires et spécifiques à la page.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;@RenderHeader&amp;#039;&amp;#039;&amp;#039; : indique à quel emplacement du fichier de modèle (généralement dans la section d&amp;#039;en-tête HTML) ajouter l&amp;#039;en-tête supplémentaire de la page, si disponible.&lt;br /&gt;
&lt;br /&gt;
{{Note|Les deux options sont facultatives.}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exemple&amp;#039;&amp;#039;&amp;#039;:&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- page.html --&amp;gt;&lt;br /&gt;
@extends layouts/intermediate&lt;br /&gt;
@ExtraHeader {&lt;br /&gt;
  &amp;lt;style&amp;gt;.highlight { color: green; }&amp;lt;/style&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- layouts/intermediate.html --&amp;gt;&lt;br /&gt;
@extends layouts/base&lt;br /&gt;
@ExtraHeader {&lt;br /&gt;
  &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- layouts/base.html --&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
  @RenderHeader&lt;br /&gt;
&amp;lt;/head&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, le CSS de {{code|page.html}} et la balise meta de {{code|intermediate.html}} sont injectés dans la sortie finale de {{code|@RenderHeader}}.&lt;br /&gt;
&lt;br /&gt;
==Composants de WebStencils==&lt;br /&gt;
&lt;br /&gt;
Le package WebStencils installe deux composants différents : un processeur de fichier unique et un moteur qui instancie des processeurs individuels et fournit une configuration globale pour les processeurs autonomes ou ceux auxquels ils sont manuellement connectés.&lt;br /&gt;
&lt;br /&gt;
Le composant principal prend un fichier HTML, incorpore la notation WebStencils et le convertit en HTML brut après avoir traité les balises {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}}.&lt;br /&gt;
&lt;br /&gt;
La classe &amp;#039;&amp;#039;&amp;#039;TWebStencilsProcessor&amp;#039;&amp;#039;&amp;#039; traite un fichier individuel (généralement ayant une extension HTML) et son modèle associé, le cas échéant. Le processeur peut être utilisé de façon autonome et assigné au &amp;#039;&amp;#039;&amp;#039;TWebActionItem.Producer&amp;#039;&amp;#039;&amp;#039;, ou être créé et appelé par TWebStencilsEngine en tant que post-processeur de fichiers texte renvoyés par un répartiteur de fichiers.&lt;br /&gt;
&lt;br /&gt;
===Composant WebStencilsEngine===&lt;br /&gt;
&lt;br /&gt;
Le composant &amp;#039;&amp;#039;&amp;#039;Engine&amp;#039;&amp;#039;&amp;#039; peut être utilisé dans les deux scénarios suivants :&lt;br /&gt;
&lt;br /&gt;
*Pour le connecter à un ou plusieurs composants &amp;#039;&amp;#039;&amp;#039;WebStencilsProcessor&amp;#039;&amp;#039;&amp;#039; et fournir des comportements et des paramètres partagés.&lt;br /&gt;
*Pour créer des composants &amp;#039;&amp;#039;&amp;#039;WebStencilsProcessor&amp;#039;&amp;#039;&amp;#039; lorsque cela est nécessaire, et placer uniquement ce composant sur vos modules web.&lt;br /&gt;
&lt;br /&gt;
==Intégration automatique de sessions==&lt;br /&gt;
&lt;br /&gt;
Lorsqu&amp;#039;elles sont disponibles, [[WebStencils|WebStencils]] peut automatiquement s&amp;#039;intégrer à des sessions web. Aucune configuration supplémentaire n&amp;#039;est nécessaire. Tout se fait automatiquement dès lors que {{code|WebRequest.Sessions}} existe.&lt;br /&gt;
&lt;br /&gt;
Les données des sessions sont accessibles via {{code|@session.property}}. Tous les objets dans {{code|WebRequest.Session.DataVars}} sont automatiquement recensés en tant que variables de modèles. De même, {{code|UserLoggedIn}} et {{code|UserRoles}} sont automatiquement remplis à partir de {{code|WebRequest.Session.User}}.&lt;br /&gt;
&lt;br /&gt;
En voici un exemple :&amp;lt;source&amp;gt;&lt;br /&gt;
@if session.Authenticated { &lt;br /&gt;
  &amp;lt;div&amp;gt;User authenticated&amp;lt;/div&amp;gt;&lt;br /&gt;
  @session.sessionid&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@if session.UserHasRole(‘admin’) { &lt;br /&gt;
  &amp;lt;div&amp;gt;User is an Admin&amp;lt;/div&amp;gt;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Liste blanche de sécurité==&lt;br /&gt;
&lt;br /&gt;
Pour des raisons de sécurité, WebStencils implémente un mécanisme de liste blanche de propriétés pour éviter l&amp;#039;exposition d&amp;#039;informations sensibles comme les chaînes de connexion aux bases de données. Par défaut, seules les propriétés sécurisées sont accessibles. Voici la liste des propriétés sécurisées :&lt;br /&gt;
&lt;br /&gt;
*Pour les &amp;#039;&amp;#039;&amp;#039;TDataSet&amp;#039;&amp;#039;&amp;#039; : Active, FieldByName, First, Last, Next, Prior, Bof, Eof, FieldCount, Fields, Found, RecordCount, RecNo.&lt;br /&gt;
*Pour les &amp;#039;&amp;#039;&amp;#039;TStrings&amp;#039;&amp;#039;&amp;#039; : Contains, ContainsName, IndexOf, IndexOfName, CommaText, Count, IsEmpty, DelimitedText, Names, KeyNames, Values, ValueFromIndex, Strings, Text.&lt;br /&gt;
&lt;br /&gt;
===Personnalisation de la liste blanche===&lt;br /&gt;
&lt;br /&gt;
La liste blanche peut être personnalisée en utilisant la propriété [[lib_fr:Web.Stencils.TWebStencilsProcessor.Whitelist|TWebStencilsProcessor.Whitelist]]. La méthode de configuration permet aux utilisateurs de spécifier les membres autorisés et ceux bloqués. Voir l&amp;#039;exemple ci-dessous :&amp;lt;source&amp;gt;&lt;br /&gt;
procedure Configure(const AClass: &amp;lt;PTypeInfo, TClass, TObject&amp;gt;; &lt;br /&gt;
                    const AAllowedMembers: TArray&amp;lt;string&amp;gt;;&lt;br /&gt;
                    const ABlockedMembers: TArray&amp;lt;string&amp;gt;; &lt;br /&gt;
                    AReset: Boolean);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AClass&amp;#039;&amp;#039;&amp;#039; : le type PTypeInfo/TClass/TObject pour configurer des éléments tels que des TDataSet, TStrings.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AAllowedMembers&amp;#039;&amp;#039;&amp;#039; : un tableau de propriétés ou de noms de méthodes que l&amp;#039;utilisateur souhaite autoriser.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ABlockedMembers&amp;#039;&amp;#039;&amp;#039; : un tableau de propriétés ou de noms de méthodes que l&amp;#039;utilisateur souhaite bloquer.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AReset&amp;#039;&amp;#039;&amp;#039; : {{code|True}} lorsqu&amp;#039;utilisé pour remplacer une liste blanche existante, ou {{code|False}} pour ajouter des éléments à la liste.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple qui illustre comment ajouter des membres autorisés supplémentaires à une liste blanche existante :&amp;lt;source&amp;gt;&lt;br /&gt;
TWebStencilsProcessor.Whitelist.Configure(TMyClass, &lt;br /&gt;
  [&amp;#039;CustomProp&amp;#039;], nil, False);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici un exemple qui illustre comment remplacer la totalité d&amp;#039;une liste blanche (AReset = True) :&amp;lt;source&amp;gt;&lt;br /&gt;
TWebStencilsProcessor.Whitelist.Configure(TDataSet, &lt;br /&gt;
  [&amp;#039;RecordCount&amp;#039;, &amp;#039;RecNo&amp;#039;], nil, True);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici un exemple qui illustre comment bloquer certains membres :&amp;lt;source&amp;gt;&lt;br /&gt;
TWebStencilsProcessor.Whitelist.Configure(MyObject, &lt;br /&gt;
  nil, [&amp;#039;CustomProp&amp;#039;], False);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La liste blanche s&amp;#039;applique à l&amp;#039;ensemble de l&amp;#039;application et à tous les WebStencils.&lt;br /&gt;
&lt;br /&gt;
==Utilisation de WebStencils avec RAD Server==&lt;br /&gt;
&lt;br /&gt;
La bibliothèque de modèles WebStencils peut aussi être utilisée dans une application RAD Server. Il est recommandé de combiner le composant &amp;#039;&amp;#039;TEMSFileResource&amp;#039;&amp;#039;&amp;#039; existant avec un composant &amp;#039;&amp;#039;&amp;#039;TWebStencilsEngine&amp;#039;&amp;#039;&amp;#039;. Le premier permet de mapper le système de fichiers, alors que le second gère le mappage HTTP et le traitement des modèles. Les composants sont connectés en utilisant la propriété Dispatcher du moteur WebStencil.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple ci-dessous illustre la configuration nécessaire pour ajouter deux composants à un module web RAD Server :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 object html: TEMSFileResource&lt;br /&gt;
    PathTemplate = &amp;#039;..\..\html\{filename}&amp;#039;&lt;br /&gt;
  end&lt;br /&gt;
  object WebStencilsEngine1: TWebStencilsEngine&lt;br /&gt;
    Dispatcher = html&lt;br /&gt;
    PathTemplates = &amp;lt;&lt;br /&gt;
      item&lt;br /&gt;
        Template = &amp;#039;/&amp;#039;&lt;br /&gt;
        Redirect = &amp;#039;/test1.html&amp;#039;&lt;br /&gt;
      end&lt;br /&gt;
      item&lt;br /&gt;
        Template = &amp;#039;/list&amp;#039;&lt;br /&gt;
        Redirect = &amp;#039;/companylist.html&amp;#039;&lt;br /&gt;
      end&lt;br /&gt;
      item&lt;br /&gt;
        Template = &amp;#039;/company&amp;#039;&lt;br /&gt;
        OnPathInit = WebStencilsEngine1PathTemplates2PathInit&lt;br /&gt;
      end&lt;br /&gt;
      ...&amp;gt;&lt;br /&gt;
  end&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les PathTemplates sont utilisés pour mapper les URL entrantes à des fichiers. En mode conception, la configuration se présente comme suit :&lt;br /&gt;
&lt;br /&gt;
[[File:PathTemplates WebStencils.png|350px|=link]]&lt;br /&gt;
&lt;br /&gt;
De plus, il est nécessaire de configurer le mappage de plus haut niveau dans le module de données :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
  [ResourceName(&amp;#039;testfile&amp;#039;)]&lt;br /&gt;
  TTestfileResource1 = class(TDataModule)&lt;br /&gt;
    [ResourceSuffix(&amp;#039;./&amp;#039;)]&lt;br /&gt;
    [ResourceSuffix(&amp;#039;get&amp;#039;, &amp;#039;./&amp;#039;)]&lt;br /&gt;
    [EndpointProduce(&amp;#039;get&amp;#039;, &amp;#039;text/html&amp;#039;)]&lt;br /&gt;
    html: TEMSFileResource;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour mapper plusieurs chemins différents (à la différence de l&amp;#039;exemple ci-dessus), ajoutez des composants &amp;#039;&amp;#039;&amp;#039;TEMSFileResource&amp;#039;&amp;#039;&amp;#039;. Le composant &amp;#039;&amp;#039;&amp;#039;TWebStencilsEngine&amp;#039;&amp;#039;&amp;#039; peut comporter un seul dispatcher dans la propriété correspondante. Pour associer davantage de dispatchers, utilisez le code suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
AddProcessor(html2, WebStencilsEngine1);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Présentation de RAD Server|Présentation de RAD Server]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 19:17:51 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:WebStencils</comments>
		</item>
		<item>
			<title>Pragma alias</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Pragma_alias&amp;diff=223485&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Pragma_alias&amp;diff=223485&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Pragma_alias&quot; title=&quot;Pragma alias&quot;&gt;Pragma alias&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{DISPLAYTITLE:#pragma alias}}&lt;br /&gt;
{{Parent|Présentation des directives pragma - Index}}&lt;br /&gt;
&lt;br /&gt;
==Syntaxe &amp;lt;span style=&amp;quot;font-size: 60%&amp;quot;&amp;gt;(voir [[Pseudo-grammaire|Pseudo-grammaire]])&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Chaîne d&amp;#039;outils classique&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&lt;br /&gt;
 #pragma alias &amp;quot;aliasName&amp;quot; = &amp;quot;substituteName&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Chaîne d&amp;#039;outils Clang&amp;#039;&amp;#039;&amp;#039; :&amp;amp;lt;br /&amp;amp;gt;&lt;br /&gt;
la directive &amp;lt;code&amp;gt;#pragma alias&amp;lt;/code&amp;gt; n&amp;#039;est pas supportée par les compilateurs [[BCC64X|BCC64X]] et [[Compilateurs Win32 améliorés par Clang|BCC32C]]. A la place, vous pouvez laisser un commentaire pour le lieur en procédant comme suit :&amp;amp;lt;br /&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #pragma comment(linker, &amp;quot;/alternatename:&amp;amp;lt;name1&amp;amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;amp;lt;name2&amp;amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;#pragma alias&amp;lt;/code&amp;gt; indique au lieur que deux noms d&amp;#039;identificateurs sont équivalents. Les deux identificateurs doivent être saisis entre guillemets. Sinon, un avertissement [[W8086 Utilisation incorrecte de l&amp;#039;alias pragma &amp;quot;NomAlias&amp;quot;=&amp;quot;NomSubstitué&amp;quot; (C++)|W8086 Utilisation incorrecte de l&amp;#039;alias pragma &amp;quot;aliasName&amp;quot;=&amp;quot;substituteName&amp;quot; (C++)]] est émis.&lt;br /&gt;
&lt;br /&gt;
Les alias sont à présent gérés dans des unités distinctes, par deux fichiers .obj, un pour Unicode et un pour non-Unicode. Ces deux fichiers .obj font partie de la bibliothèque VCL.&lt;br /&gt;
&lt;br /&gt;
Le &amp;lt;code&amp;gt;NomAlias&amp;lt;/code&amp;gt; et le &amp;lt;code&amp;gt;NomSubstitué&amp;lt;/code&amp;gt; sont injectés dans leur fichier .obj correspondant, exactement comme ils sont écrits à l&amp;#039;intérieur des guillemets. Le lieur recherche toutes les références à &amp;lt;code&amp;gt;NomAlias&amp;lt;/code&amp;gt; et les lie au &amp;lt;code&amp;gt;NomSubstitué&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Note| Les [[Fichier d&amp;#039;en-tête C++ (*.h, *.hpp)|fichiers .hpp]] générés depuis le code {{Delphi}} utilisent l&amp;#039;alias &amp;lt;code&amp;gt;#pragma&amp;lt;/code&amp;gt; pour la gestion des identificateurs qui sont substantypés différemment dans {{Delphi}} et {{CBuilder}}.}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Référence C++]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:47:07 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Pragma_alias</comments>
		</item>
		<item>
			<title>WebStencils</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=WebStencils&amp;diff=223483&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=WebStencils&amp;diff=223483&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/WebStencils&quot; title=&quot;WebStencils&quot;&gt;WebStencils&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;WebStencils, un système d&amp;#039;intégration et de traitement des fichiers HTML côté serveur, a été introduit dans {{Product}} version 12.2 pour les technologies WebBroker et RAD Server. Cette fonctionnalité flexible permet aux développeurs de concevoir des sites web modernes basés sur n&amp;#039;importe quelle bibliothèque JavaScript tout en exploitant les données extraites et traitées par une application serveur RAD Studio. Cette technologie offre une grande flexibilité pour créer des sites web adaptés à vos besoins spécifiques.&lt;br /&gt;
&lt;br /&gt;
WebStencils a pour objectif de faciliter la création de sites de navigation par l&amp;#039;adoption des technologies Web (WebBroker, DataSnap, RAD Server) en fournissant des scripts côté serveur. Il est ainsi possible de générer des pages HTML avec des outils standard et d&amp;#039;utiliser n&amp;#039;importe quelle bibliothèque CSS et JavaScript tout en ajoutant des données à partir des pages générées depuis l&amp;#039;application (il peut s&amp;#039;agir par exemple du résultat d&amp;#039;une requête de base de données).&lt;br /&gt;
&lt;br /&gt;
De plus, WebStencils constitue une excellente base pour le développement Web avec HTMX. Les pages HTMX bénéficient de la génération de code côté serveur et peuvent se connecter à des serveurs REST pour la mise à jour du contenu. Les technologies Web de Delphi offrent des fonctionnalités de génération de page et d&amp;#039;API REST de très haut niveau.&lt;br /&gt;
&lt;br /&gt;
==Syntaxe de WebStencil==&lt;br /&gt;
&lt;br /&gt;
Le langage de script de WebStencils repose sur deux éléments et est relativement simple :&lt;br /&gt;
&lt;br /&gt;
* Le {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039; }}&lt;br /&gt;
* Les accolades {{code| &amp;#039;&amp;#039;&amp;#039;{ }&amp;#039;&amp;#039;&amp;#039; }}&lt;br /&gt;
&lt;br /&gt;
===Utilisation du symbole {{code|@}}===&lt;br /&gt;
&lt;br /&gt;
WebStencils utilise le symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}} comme marqueur spécial plutôt que des balises HTML/XML ou d&amp;#039;autres notations. Le symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}} est suivi par :&lt;br /&gt;
&lt;br /&gt;
* Le nom d&amp;#039;un objet ou d&amp;#039;un champ.&lt;br /&gt;
* Un [[WebStencils#Mots clé de WebStencils|mot clé spécial]].&lt;br /&gt;
* Un autre symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}}. {{Tip|  L&amp;#039;utilisation du symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}} est plus souple. Ainsi, vous n&amp;#039;aurez pas besoin de le doubler dans certaines situations, comme dans les en-têtes.}}&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;accès général à une valeur est basé sur une notation par point, sous la forme object.value. C&amp;#039;est pourquoi vous observerez des balises comme :&lt;br /&gt;
&lt;br /&gt;
 @object.value&lt;br /&gt;
&lt;br /&gt;
Le nom de &amp;#039;&amp;#039;&amp;#039;l&amp;#039;objet&amp;#039;&amp;#039;&amp;#039; est un nom symbolique local qui peut correspondre à un objet réel d&amp;#039;une application serveur, assigné à l&amp;#039;exécution du script via un processus de recensement. Il peut aussi être résolu dans le code lors du traitement d&amp;#039;un gestionnaire d&amp;#039;événement OnGetValue.&lt;br /&gt;
&lt;br /&gt;
La valeur est composée du nom de la propriété (pour un objet générique), du nom d&amp;#039;un champ (si l&amp;#039;objet hérite de TDataSet), et d&amp;#039;une chaîne qui est transmise dans le gestionnaire d&amp;#039;événement OnGetValue associé au processeur.&lt;br /&gt;
&lt;br /&gt;
{{Note|La sortie des valeurs traitées par WebStencils est chiffrée avec la méthode TNetEncoding.HTML.Encode. Vous pouvez supprimer le chiffrement en utilisant la syntaxe {{code|@\value}}.}}&lt;br /&gt;
&lt;br /&gt;
====Accès aux ensembles de données et objets imbriqués====&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi utiliser le symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}} pour accéder à des ensembles de données et des objets imbriqués en utilisant la syntaxe suggérée dans les scénarios suivants :&lt;br /&gt;
&lt;br /&gt;
* Objets et classes imbriqués :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@MyObject.SubObject.ProperyName&amp;lt;/source&amp;gt;&lt;br /&gt;
* Tables dans les ensembles de données imbriqués :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@MyDataSet.DataSetField.SubField&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Utilisation des accolades pour les blocs {{code|{}}}===&lt;br /&gt;
&lt;br /&gt;
La seconde notation utilise des accolades, {{code|{}} et {{code|}}}, pour indiquer les blocs conditionnels ou répétés.&lt;br /&gt;
&lt;br /&gt;
Toute autre utilisation des accolades dans le fichier de code source (le fichier HTML) est ignorée. En d&amp;#039;autres termes, les accolades ne sont traitées que si elles sont utilisées après une instruction conditionnelle WebStencils spécifique.&lt;br /&gt;
&lt;br /&gt;
===Accès à des valeurs avec la notation par point===&lt;br /&gt;
&lt;br /&gt;
Prenons en exemple l&amp;#039;extrait de code HTML WebStencils ci-dessous :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;GetValue&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Value obtained from data: @data.name&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Value obtained with request @@data.value: @data.value&amp;lt;/p&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les symboles {{code|@@}} sont ignorés (nous attendons un seul {{code|@}} en sortie). Il suffit d&amp;#039;un seul pour déclencher le traitement. &lt;br /&gt;
Notez également que les deux symboles, le nom d&amp;#039;objet et le nom de valeur, doivent être des identificateurs Delphi valides et ne peuvent pas contenir d&amp;#039;espaces ni commencer par un chiffre. Un nom peut contenir des caractères de soulignement et des chiffres.&lt;br /&gt;
&lt;br /&gt;
===Gestionnaire d&amp;#039;événement OnValue===&lt;br /&gt;
&lt;br /&gt;
Il est possible de fournir des données en utilisant un composant avec le gestionnaire d&amp;#039;événement OnValue. Par exemple :&amp;amp;lt;br /&amp;amp;gt;&amp;#039;&amp;#039;&amp;#039;Delphi :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TWebModule13.WebStencilsValueFromEventValue(Sender: TObject;&lt;br /&gt;
  const ObjectName, FieldName: string; var ReplaceText: string; &lt;br /&gt;
  var Handled: Boolean)&lt;br /&gt;
begin&lt;br /&gt;
  if SameText (ObjectName, &amp;#039;data&amp;#039;) then&lt;br /&gt;
  begin&lt;br /&gt;
    Handled := True;&lt;br /&gt;
    ReplaceText := &amp;#039;You requested &amp;#039; + FieldName;&lt;br /&gt;
  end;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans le code exemple ci-dessus, le code vérifie uniquement le nom d&amp;#039;objet (la première partie du symbole avant le point), mais il est recommandé de vérifier également la propriété FieldName (le symbole après le point).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++ :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TWebModule13::WebStencilsValueFromEventValue(TObject *Sender,&lt;br /&gt;
  const String ObjectName, const String FieldName, String &amp;amp;ReplaceText, bool &amp;amp;Handled)&lt;br /&gt;
{&lt;br /&gt;
  if (SameText(ObjectName, &amp;quot;data&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    Handled = true;&lt;br /&gt;
    ReplaceText = &amp;quot;You requested &amp;quot; + FieldName;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, {{code|String}} est une chaîne {{code|UnicodeString}} compatible Delphi dans C++ Builder. {{code|SameText}} est une fonction de comparaison de chaînes insensible à la casse fournie par SysUtils. Enfin, {{code|&amp;amp;amp;ReplaceText}} et {{code|&amp;amp;amp;Handled}} sont transmis par référence pour permettre la modification et reproduire le comportement {{code|var}} de Delphi.&lt;br /&gt;
&lt;br /&gt;
===Utilisation d&amp;#039;un objet dans le dictionnaire de variables de script===&lt;br /&gt;
&lt;br /&gt;
Une autre approche consiste à fournir les valeurs en utilisant un objet. Dans ce cas, l&amp;#039;objet doit être configuré et associé à l&amp;#039;action du producteur.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple complet, supposant une classe TMyObject et sa propriété Name :&amp;amp;lt;br /&amp;amp;gt;&amp;#039;&amp;#039;&amp;#039;Delphi :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TWebModule1.WebModule1WebActionItem2Action(Sender: TObject;&lt;br /&gt;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);&lt;br /&gt;
begin&lt;br /&gt;
  WebStencilsProcessor1.InputLines.Text := &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    &amp;lt;h2&amp;gt;GetValue&amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Value obtained from data: @world.Name&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
  var MyObj := TMyObject.Create();&lt;br /&gt;
  MyObj.Name := &amp;#039;Hello hello&amp;#039;;&lt;br /&gt;
  WebStencilsProcessor1.AddVar(&amp;#039;world&amp;#039;, MyObj, True);&lt;br /&gt;
  Response.Content := WebStencilsProcessor1.Content;&lt;br /&gt;
  Handled := True;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cet exemple donne le résultat suivant :&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;Value obtained from data: Hello Hello&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Notez que l&amp;#039;objet est recensé avec le nom &amp;#039;world&amp;#039;, qui sera ensuite utilisé dans le script WebStencils.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++ :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TWebModule1::WebModule1WebActionItem2Action(TObject *Sender,&lt;br /&gt;
  TWebRequest *Request, TWebResponse *Response, bool &amp;amp;Handled)&lt;br /&gt;
{&lt;br /&gt;
  WebStencilsProcessor1-&amp;gt;InputLines-&amp;gt;Text =&lt;br /&gt;
    &amp;quot;&amp;lt;h2&amp;gt;GetValue&amp;lt;/h2&amp;gt;\n&amp;quot;&lt;br /&gt;
    &amp;quot;&amp;lt;p&amp;gt;Value obtained from data: @world.Name&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  TMyObject *MyObj = new TMyObject();&lt;br /&gt;
  MyObj-&amp;gt;Name = &amp;quot;Hello hello&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  WebStencilsProcessor1-&amp;gt;AddVar(&amp;quot;world&amp;quot;, MyObj, true);&lt;br /&gt;
&lt;br /&gt;
  Response-&amp;gt;Content = WebStencilsProcessor1-&amp;gt;Content;&lt;br /&gt;
  Handled = true;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Expressions===&lt;br /&gt;
&lt;br /&gt;
Voici la liste des expressions prises en charge :&lt;br /&gt;
&lt;br /&gt;
*{{code|&amp;#039;&amp;#039;&amp;#039;@ (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}} - marqueurs de variable. L&amp;#039;expression doit être écrite entre parenthèses.&lt;br /&gt;
*{{code|&amp;#039;&amp;#039;&amp;#039;@if (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}} - commande &amp;quot;if&amp;quot;. L&amp;#039;expression doit être écrite entre parenthèses.&lt;br /&gt;
*{{code|&amp;#039;&amp;#039;&amp;#039;@Import (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}}, {{code|&amp;#039;&amp;#039;&amp;#039;@LayoutPage (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}}, {{code|&amp;#039;&amp;#039;&amp;#039;@AddPage (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}} - &amp;#039;&amp;#039;commandes de fichier. L&amp;#039;expression doit être écrite entre accolades.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple suivant montre uniquement les différences entre les options ci-dessus :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
WebStencilsProcessor1.InputLines.Text := &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    &amp;lt;h2&amp;gt;GetExpression&amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Value obtained from data: @(world.value*2)&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
  MyObj.Value := 2;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous obtenez alors la sortie suivante :&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;Value obtained from data: 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
En plus des expressions simples, vous pouvez étendre le système en utilisant des appels de fonction personnalisés. Voici un exemple de code qui recense une fonction “&amp;#039;&amp;#039;&amp;#039;Concat&amp;#039;&amp;#039;&amp;#039;” recevant deux paramètres chaîne :&amp;amp;lt;br /&amp;amp;gt;&amp;#039;&amp;#039;&amp;#039;Delphi :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
uses&lt;br /&gt;
  System.Bindings.EvalProtocol, System.Bindings.Methods;&lt;br /&gt;
&lt;br /&gt;
  TBindingMethodsFactory.RegisterMethod(&lt;br /&gt;
   TMethodDescription.Create(&lt;br /&gt;
    MakeInvokable(function(Args: TArray&amp;lt;IValue&amp;gt;): IValue&lt;br /&gt;
    begin&lt;br /&gt;
     Result := TValueWrapper.Create(&lt;br /&gt;
      Args[0].GetValue.AsString + Args[1].GetValue.AsString);&lt;br /&gt;
    end),&lt;br /&gt;
    &amp;#039;Concat&amp;#039;, &amp;#039;Concat&amp;#039;, &amp;#039;&amp;#039;, True, &amp;#039;&amp;#039;, nil));&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un script WebStencils, vous pouvez l&amp;#039;utiliser dans une expression comme :&lt;br /&gt;
&lt;br /&gt;
 @(Concat(&amp;#039;aaa&amp;#039;, &amp;#039;bbb&amp;#039;]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++ :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;System.Bindings.EvalProtocol.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;System.Bindings.Methods.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;System.Rtti.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;System.SysUtils.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace System::Bindings::EvalProtocol;&lt;br /&gt;
using namespace System::Bindings::Methods;&lt;br /&gt;
using namespace System::Rtti;&lt;br /&gt;
&lt;br /&gt;
class TValueWrapper : public TInterfacedObject, public IValue&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
    TValue FValue;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
    __fastcall TValueWrapper(const TValue &amp;amp;AValue) : FValue(AValue) {}&lt;br /&gt;
&lt;br /&gt;
    virtual TValue __fastcall GetValue() { return FValue; }&lt;br /&gt;
&lt;br /&gt;
    // Implement other IValue methods as needed...&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void RegisterCustomBindingMethod()&lt;br /&gt;
{&lt;br /&gt;
    TBindingMethodsFactory::RegisterMethod(&lt;br /&gt;
        new TMethodDescription(&lt;br /&gt;
            MakeInvokable([](const TArray&amp;lt;IValue*&amp;gt; &amp;amp;Args) -&amp;gt; IValue*&lt;br /&gt;
            {&lt;br /&gt;
                String s1 = Args[0]-&amp;gt;GetValue().ToString();&lt;br /&gt;
                String s2 = Args[1]-&amp;gt;GetValue().ToString();&lt;br /&gt;
                return new TValueWrapper(TValue::From&amp;lt;String&amp;gt;(s1 + s2));&lt;br /&gt;
            }),&lt;br /&gt;
            &amp;quot;Concat&amp;quot;, &amp;quot;Concat&amp;quot;, &amp;quot;&amp;quot;, true, &amp;quot;&amp;quot;, nullptr));&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Instruction Switch====&lt;br /&gt;
&lt;br /&gt;
En plus de l&amp;#039;instruction {{code|@if}}, les utilisateurs peuvent choisir d&amp;#039;utiliser les instructions {{code|@switch}} ou {{code|@case}}.&amp;amp;lt;br /&amp;amp;gt; &lt;br /&gt;
Voici un exemple de syntaxe :&amp;lt;source&amp;gt;&lt;br /&gt;
@switch(@user.role) {&lt;br /&gt;
  @case &amp;quot;admin&amp;quot; { &lt;br /&gt;
    &amp;lt;div&amp;gt;Admin Panel&amp;lt;/div&amp;gt;&lt;br /&gt;
  } @case &amp;quot;moderator&amp;quot; { &lt;br /&gt;
    &amp;lt;div&amp;gt;Moderator Tools&amp;lt;/div&amp;gt;&lt;br /&gt;
  } @default { &lt;br /&gt;
    &amp;lt;div&amp;gt;Regular User View&amp;lt;/div&amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A partir de l&amp;#039;exemple ci-dessus, notez que :&lt;br /&gt;
&lt;br /&gt;
*Les valeurs des &amp;quot;case&amp;quot; peuvent être des littéraux ou des expressions utilisant {{code|@}}(expression).&lt;br /&gt;
*Seul le premier &amp;quot;case&amp;quot; correspondant est exécuté.&lt;br /&gt;
*L&amp;#039;utilisation de {{code|@default}} est facultative et s&amp;#039;exécute s&amp;#039;il n&amp;#039;y a pas de correspondance avec &amp;quot;case&amp;quot;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
===Utilisation d&amp;#039;un ensemble de données===&lt;br /&gt;
&lt;br /&gt;
Une alternative consiste à utiliser l&amp;#039;enregistrement en cours d&amp;#039;un ensemble de données plutôt qu&amp;#039;un objet. Dans ce cas, votre code sera comme suit :&amp;amp;lt;br /&amp;amp;gt;&amp;#039;&amp;#039;&amp;#039;Delphi :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TWebModule13.WebModule13waCompanyAction(Sender: TObject;&lt;br /&gt;
    Request: TWebRequest; Response: TWebResponse;&lt;br /&gt;
    var Handled: Boolean];&lt;br /&gt;
  begin  &lt;br /&gt;
   ClientDataSet1.Open;&lt;br /&gt;
   if not WebStencilsValueFromObject.InVars  (&amp;#039;dataset&amp;#039;] then&lt;br /&gt;
    WebStencilsValueFromObject.AddVar(&lt;br /&gt;
      &amp;#039;dataset&amp;#039;, ClientDataSet1, False]; // False = do not destroy&lt;br /&gt;
  Response.Content := WebStencilsValueFromObject.Content;&lt;br /&gt;
  ClientDataSet1.Close;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++ :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TWebModule13::WebModule13waCompanyAction(TObject *Sender,&lt;br /&gt;
  TWebRequest *Request, TWebResponse *Response, bool &amp;amp;Handled)&lt;br /&gt;
{&lt;br /&gt;
  ClientDataSet1-&amp;gt;Open();&lt;br /&gt;
&lt;br /&gt;
  if (!WebStencilsValueFromObject-&amp;gt;InVars(&amp;quot;dataset&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    WebStencilsValueFromObject-&amp;gt;AddVar(&amp;quot;dataset&amp;quot;, ClientDataSet1, false); // false = do not destroy&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Response-&amp;gt;Content = WebStencilsValueFromObject-&amp;gt;Content;&lt;br /&gt;
&lt;br /&gt;
  ClientDataSet1-&amp;gt;Close();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code HTML correspondant peut contenir des références à certains champs de l&amp;#039;enregistrement. Voici un exemple de résultat :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;list-group w-50&amp;quot;&amp;gt;&lt;br /&gt;
  @foreach dataset {&lt;br /&gt;
    &amp;lt;a href=&amp;quot;/company?id=@loop.custno&amp;quot; class=&amp;quot;list-group-item  &lt;br /&gt;
        list-group-item-action&amp;quot; aria-current=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;d-flex w-100 justify-content-between&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h5 class=&amp;quot;mb-1&amp;quot;&amp;gt;@loop.company&amp;lt;/h5&amp;gt;&lt;br /&gt;
      &amp;lt;small&amp;gt;@loop.country&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;mb-1&amp;quot;&amp;gt;@loop.city&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;@loop.state&amp;lt;/small&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Accès aux propriétés de l&amp;#039;ensemble de données====&lt;br /&gt;
&lt;br /&gt;
La notation WebStencils {{code|@}} relative à un ensemble de données permet d&amp;#039;accéder aux propriétés de l&amp;#039;ensemble de données, en plus de ses champs. Les utilisateurs peuvent utiliser {{code|@data.RecordCount}} pour accéder à la propriété RecordCount. En cas de conflit, les champs de l&amp;#039;ensemble de données ont priorité sur les propriétés portant le même nom.&lt;br /&gt;
&lt;br /&gt;
Cela inclut l&amp;#039;accès aux informations des champs, comme suit :&lt;br /&gt;
&lt;br /&gt;
 @foreach field in customers.fields&lt;br /&gt;
&lt;br /&gt;
Ainsi que l&amp;#039;accès aux propriétés des champs :&amp;lt;source&amp;gt;&lt;br /&gt;
@foreach customer in customers {&lt;br /&gt;
    @customer.address.visible&lt;br /&gt;
    @customer.phone.displaylabel&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Utilisation de variables de modules==&lt;br /&gt;
&lt;br /&gt;
Alternativement, pour recenser un objet spécifique pour un WebStencilsProcessor, vous pouvez ajouter un “&amp;#039;&amp;#039;&amp;#039;module&amp;#039;&amp;#039;&amp;#039;” avec plusieurs objets. Dans ce contexte, un &amp;#039;module&amp;#039; est une collection d&amp;#039;objets ou de fonctions liés entre eux. N&amp;#039;importe quel champ ou n&amp;#039;importe quelle propriété du module peut être décoré avec l&amp;#039;attribut {{code|&amp;#039;&amp;#039;&amp;#039;[WebStencilsVar]&amp;#039;&amp;#039;&amp;#039;}}, qui vous permet de spécifier comment le WebStencilsProcessor doit traiter les données.&lt;br /&gt;
&lt;br /&gt;
Par exemple, supposons que votre module de données a un composant FDMemTable1 de type TFDMemTable marqué comme {{code|&amp;#039;&amp;#039;&amp;#039;[WebStencilsVar]&amp;#039;&amp;#039;&amp;#039;}}, et un champ LastName, vous pouvez écrire :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  WebStencilsProcessor1.InputLines.Text := &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    &amp;lt;h2&amp;gt;GetTableData&amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Value obtained from table: @(FDMemTable1.LastName)&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
  WebStencilsProcessor1.AddModule(self);&amp;lt;/source&amp;gt;L&amp;#039;exemple ci-dessous renvoie la valeur de LastName dans le premier enregistrement. Utilisez une boucle {{code|&amp;#039;&amp;#039;&amp;#039;@for&amp;#039;&amp;#039;&amp;#039;}} pour afficher tous les enregistrements.&lt;br /&gt;
&lt;br /&gt;
===Utilisation de variables supplémentaires===&lt;br /&gt;
&lt;br /&gt;
Ajoutez des variables supplémentaires au moteur de script à l&amp;#039;extérieur des modèles d&amp;#039;objet et d&amp;#039;ensemble de données. Plutôt que d&amp;#039;ajouter une structure de données spécifique, ce mécanisme propose une méthode anonyme qui permet d&amp;#039;implémenter une recherche personnalisée dans une structure de données personnalisée. Il s&amp;#039;agit des méthodes suivantes :&lt;br /&gt;
&lt;br /&gt;
 TWebStencilsDataVars.Add(LookupFunc), AddInitFunc(LookupFunc)&lt;br /&gt;
 TWebStencilsProcessor.AddVar(LookupFunc), AddInitFunc(LookupFunc)&lt;br /&gt;
 TWebStencilsEngine.AddVar(LookupFunc), AddInitFunc(LookupFunc)&lt;br /&gt;
&lt;br /&gt;
Voici un exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
  TMap = TDictionary&amp;lt;string, string&amp;gt;;&lt;br /&gt;
var&lt;br /&gt;
  LDict: TMap;&lt;br /&gt;
begin&lt;br /&gt;
  LDict := TMap.Create;&lt;br /&gt;
  LDict.Add(&amp;#039;APP_VERSION&amp;#039;, &amp;#039;1.0.0&amp;#039;);&lt;br /&gt;
  LDict.Add(&amp;#039;APP_NAME&amp;#039;, &amp;#039;WebStencils demo&amp;#039;);&lt;br /&gt;
  LDict.Add(&amp;#039;COMPANY_NAME&amp;#039;, &amp;#039;Embarcadero Inc.&amp;#039;);&lt;br /&gt;
  LDict.Add(&amp;#039;DEBUG_MODE&amp;#039;, &amp;#039;True&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
  FWebStencilsProcessor.AddVar(&amp;#039;env&amp;#039;, LDict, True,&lt;br /&gt;
    function(AVar: TWebStencilsDataVar; const APropName: string; &lt;br /&gt;
      var AValue: string): Boolean&lt;br /&gt;
    begin&lt;br /&gt;
      Result := TMap(AVar.TheObject).TryGetValue(APropName.ToUpper, AValue);&lt;br /&gt;
    end);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi l&amp;#039;utiliser dans un modèle, comme suit :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 @env.APP_NAME - @env.APP_VERSION&lt;br /&gt;
 @if env.DEBUG_MODE {&lt;br /&gt;
   &amp;lt;div&amp;gt;Debug mode active&amp;lt;/div&amp;gt;&lt;br /&gt;
 }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mots clés de WebStencil==&lt;br /&gt;
&lt;br /&gt;
Le moteur WebStencils utilise les balises suivantes sous forme de mots clés (notez que ces noms ne peuvent pas être utilisés pour des variables de script).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Mot clé&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@query&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisé pour lire des paramètres de requête HTTP.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@page&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Fournit l&amp;#039;accès au nom de la page et aux arguments de l&amp;#039;URL (voir la propriété [[WebStencils#Utilisation de WebStencils avec RAD Server|PathTemplate]] pour plus d&amp;#039;informations). Il est possible d&amp;#039;accéder au chemin de l&amp;#039;URL en utilisant l&amp;#039;une de ces valeurs :&lt;br /&gt;
*{{code|@page.request_path}}&lt;br /&gt;
*{{code|@page.request_segment}}&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@lang&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisé pour la prise en charge de la traduction, déclenche un événement OnLang distinct plutôt que l&amp;#039;événement OnValue.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@* .. *@&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisé pour ajouter des commentaires dans le script, qui seront omis dans le HTML résultant.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@if&amp;#039;&amp;#039;&amp;#039;}} object.value { … } [&amp;#039;&amp;#039;&amp;#039;@else&amp;#039;&amp;#039;&amp;#039; { … }]&lt;br /&gt;
|Exécute le bloc suivant entre accolades uniquement si la valeur vaut {{code|true}}.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@if (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisé pour restituer du contenu de façon conditionnelle. Si l&amp;#039;expression est évaluée à {{code|true}}, le contenu associé est inclus dans la sortie ; sinon il est omis.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@if not&amp;#039;&amp;#039;&amp;#039; object.value { ... } [&amp;#039;&amp;#039;&amp;#039;@else&amp;#039;&amp;#039;&amp;#039; { … }]}}&lt;br /&gt;
|Exécute le bloc suivant entre accolades uniquement si la valeur ne vaut pas {{code|true}}. &amp;lt;br /&amp;gt;Par exemple :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 @if obj1.ValueBelowTen {&lt;br /&gt;
	  &amp;lt;p&amp;gt;@obj1.name &amp;lt;span&amp;gt; has a value of &amp;lt;/span&amp;gt; @obj1.value&amp;lt;/p&amp;gt;&lt;br /&gt;
	}&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@ForEach&amp;#039;&amp;#039;&amp;#039; (var object in list) { … }}}&lt;br /&gt;
|Exécute le bloc entre accolades suivant aussi souvent qu&amp;#039;il y a d&amp;#039;éléments dans l&amp;#039;énumérateur. &amp;lt;br /&amp;gt;Supporte actuellement :&lt;br /&gt;
*Les ensembles de données&lt;br /&gt;
*TObjectList, doit être ajouté au dictionnaire de processeur.&lt;br /&gt;
*Tout objet possédant la méthode GetEnumerator, où l&amp;#039;énumérateur renvoie une valeur d&amp;#039;objet.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@ForEach&amp;#039;&amp;#039;&amp;#039; object { … }}}&lt;br /&gt;
|Exécute le bloc entre accolades suivant aussi souvent qu&amp;#039;il y a d&amp;#039;éléments dans l&amp;#039;énumérateur. &amp;lt;br /&amp;gt;Supporte actuellement les ensembles de données et TObjectList, qui doivent être ajoutés en tant que variables de script.&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@loop&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisez à l&amp;#039;intérieur d&amp;#039;un bloc pour faire référence à l&amp;#039;élément en cours de l&amp;#039;énumération (liste ou ensemble de données). Il doit être suivi du nom d&amp;#039;une propriété ou d&amp;#039;un champ sans utiliser de nom d&amp;#039;objet.&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@Import&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Permet de fusionner un fichier externe à un emplacement spécifique du fichier externe. Suppose toutefois que le nom de fichier ait l&amp;#039;extension .HTML. &amp;lt;br /&amp;gt;Le format doit être comme suit :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@import filename [ {&amp;lt;alias1&amp;gt; = &amp;lt;var1&amp;gt; [..., &amp;lt;aliasN&amp;gt; = &amp;lt;varN&amp;gt;]} ]&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@Scaffolding&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Espace réservé pour le scaffolding. Ce mécanisme permet de générer dynamiquement du code HTML à partir de la structure de données d&amp;#039;une application (les propriétés d&amp;#039;un objet et les champs d&amp;#039;une base de données). Le code HTML généré côté serveur peut inclure d&amp;#039;autres balises pour accéder aux données. &amp;lt;br /&amp;gt;Le code suivant est un exemple de disposition HTML simple générée dans le gestionnaire d&amp;#039;événement OnScaffolding pour chacun des champs de la base de données.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TWebModule1.ProcessorCompanyScaffolding(Sender: TObject;&lt;br /&gt;
  const AQualifClassName: string; var AReplaceText: string);&lt;br /&gt;
begin&lt;br /&gt;
  if SameText (AQualifClassName, &amp;#039;Company&amp;#039;) then&lt;br /&gt;
  begin&lt;br /&gt;
    AReplaceText := &amp;#039;&amp;#039;;&lt;br /&gt;
    for var I := 0 to ClientDataSet1.Fields.Count -1 do&lt;br /&gt;
      AReplaceText := AReplaceText + &amp;#039;&amp;lt;p&amp;gt;&amp;#039;+ &lt;br /&gt;
        ClientDataSet1.Fields[I].FieldName +&lt;br /&gt;
        &amp;#039;: @dataset.&amp;#039; + ClientDataSet1.Fields[I].FieldName + &amp;#039;&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
  end;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@switch&amp;#039;&amp;#039;&amp;#039;}}, {{code|&amp;#039;&amp;#039;&amp;#039;@case&amp;#039;&amp;#039;&amp;#039;}}, {{code|&amp;#039;&amp;#039;&amp;#039;@default&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Effectue un rendu conditionnel à branches multiples. Après avoir évalué une expression, la met en correspondance avec les valeurs définies avec @case, en restituant le bloc correspondant. La directive @default est utilisée si aucune correspondance n&amp;#039;est trouvée pour @case.&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@LoginRequired&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Arrête l&amp;#039;exécution si une connexion est requise alors que l&amp;#039;utilisateur n&amp;#039;est pas connecté.&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@LoginRequired (&amp;amp;lt;role&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Le moteur vérifie que l&amp;#039;utilisateur est connecté, mais aussi qu&amp;#039;il dispose du rôle spécifique actif, ce qui restreint l&amp;#039;accès à la page selon la permission.&amp;lt;br /&amp;gt; Par exemple : &amp;#039;&amp;#039;&amp;#039;@LoginRequired (admin)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Alias d&amp;#039;importation===&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple ci-dessous illustre comment utiliser des alias d&amp;#039;importation.&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@import one {@o1 = @object, @d1 = @data} Hello&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans ce code, &amp;#039;&amp;#039;&amp;#039;@object&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;@data&amp;#039;&amp;#039;&amp;#039; sont les véritables variables dans le script exécuté. Les alias &amp;#039;&amp;#039;&amp;#039;@o1&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;@d1&amp;#039;&amp;#039;&amp;#039; sont des variables de script pour le script &amp;quot;one&amp;quot; et sont accessibles dans ce script comme des variables normales. Ainsi, vous pouvez transmettre au script QA des variables portant des noms différents, en fournissant comme alias le nom attendu par le script.&lt;br /&gt;
&lt;br /&gt;
==Modèles WebStencils : disposition et corps==&lt;br /&gt;
&lt;br /&gt;
La capacité à fusionner un modèle HTML partagé avec le contenu d&amp;#039;une page compte parmi les fonctionnalités indispensables d&amp;#039;un moteur de modèle. Cette opération s&amp;#039;effectue (comme dans la version .NET) en utilisant quatre symboles spéciaux :&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;@LayoutPage filename&amp;#039;&amp;#039;&amp;#039; : cette commande est utilisée dans une page HTML spécifique (généralement en haut de page) pour indiquer le fichier de modèle à utiliser comme structure de la page. Plusieurs pages peuvent partager un même modèle, mais toutes les pages d&amp;#039;un projet (même en utilisant TWebStencilsEngine) ou d&amp;#039;un dossier virtuel n&amp;#039;ont pas nécessairement besoin d&amp;#039;utiliser le même modèle.&lt;br /&gt;
&lt;br /&gt;
:{{Note| Cette commande ne doit être utilisée qu&amp;#039;une seule fois par page. Si vous tentez d&amp;#039;utiliser plusieurs fois &amp;#039;&amp;#039;&amp;#039;@LayoutPage&amp;#039;&amp;#039;&amp;#039;, une exception se déclenche et bloque la commande.}}&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;@RenderBody&amp;#039;&amp;#039;&amp;#039; : cette commande sans paramètre est une marque de réservation dans un fichier de modèle qui indique où placer le contenu d&amp;#039;une page spécifique.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple d&amp;#039;utilisation de &amp;#039;&amp;#039;&amp;#039;@LayoutPage&amp;#039;&amp;#039;&amp;#039; et de &amp;#039;&amp;#039;&amp;#039;@RenderBody&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Test.html&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@LayoutPage BaseTemplate&lt;br /&gt;
   &amp;lt;h2&amp;gt;Page Test3&amp;lt;/h2&amp;gt;&lt;br /&gt;
   &amp;lt;p&amp;gt;Local data param one is @page.name (the page name)&amp;lt;/p&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;BaseTemplate.html&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Bootstrap CSS →&lt;br /&gt;
    &amp;lt;link href=&amp;quot;https://.../bootstrap.min.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;nav class=&amp;quot;navbar navbar-expand-md bg-dark mb-4&amp;quot;&amp;gt;...&lt;br /&gt;
    &amp;lt;main class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;bg-light p-5 rounded&amp;quot;&amp;gt;&lt;br /&gt;
      @RenderBody&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/main&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
De plus, vous pouvez injecter des en-têtes supplémentaires du document spécifié vers le modèle (par exemple, un fichier JavaScript requis à inclure dans la page ou le CSS supplémentaire d&amp;#039;une page spécifique). Dans ce cas, le mécanisme est inversé :&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;@ExtraHeader&amp;#039;&amp;#039;&amp;#039; { ... } : utilisé dans la page HTML spécifique pour indiquer un bloc de code à ajouter en tant qu&amp;#039;information d&amp;#039;en-tête supplémentaire.&amp;amp;lt;br /&amp;amp;gt;Il supporte aussi la propagation de contenu sur l&amp;#039;ensemble des hiérarchies de disposition imbriquées :&lt;br /&gt;
** Les blocs {{code|@ExtraHeader}} définis dans les pages se propagent automatiquement à travers plusieurs niveaux de disposition.&lt;br /&gt;
** Le contenu est injecté dans la sortie finale quelles que soient les dispositions intermédiaires.&lt;br /&gt;
** Permet une composition de disposition flexible, avec des dispositions de base, intermédiaires et spécifiques à la page.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;@RenderHeader&amp;#039;&amp;#039;&amp;#039; : indique à quel emplacement du fichier de modèle (généralement dans la section d&amp;#039;en-tête HTML) ajouter l&amp;#039;en-tête supplémentaire de la page, si disponible.&lt;br /&gt;
&lt;br /&gt;
{{Note|Les deux options sont facultatives.}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exemple&amp;#039;&amp;#039;&amp;#039;:&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- page.html --&amp;gt;&lt;br /&gt;
@extends layouts/intermediate&lt;br /&gt;
@ExtraHeader {&lt;br /&gt;
  &amp;lt;style&amp;gt;.highlight { color: green; }&amp;lt;/style&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- layouts/intermediate.html --&amp;gt;&lt;br /&gt;
@extends layouts/base&lt;br /&gt;
@ExtraHeader {&lt;br /&gt;
  &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- layouts/base.html --&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
  @RenderHeader&lt;br /&gt;
&amp;lt;/head&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, le CSS de {{code|page.html}} et la balise meta de {{code|intermediate.html}} sont injectés dans la sortie finale de {{code|@RenderHeader}}.&lt;br /&gt;
&lt;br /&gt;
==Composants de WebStencils==&lt;br /&gt;
&lt;br /&gt;
Le package WebStencils installe deux composants différents : un processeur de fichier unique et un moteur qui instancie des processeurs individuels et fournit une configuration globale pour les processeurs autonomes ou ceux auxquels ils sont manuellement connectés.&lt;br /&gt;
&lt;br /&gt;
Le composant principal prend un fichier HTML, incorpore la notation WebStencils et le convertit en HTML brut après avoir traité les balises {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}}.&lt;br /&gt;
&lt;br /&gt;
La classe &amp;#039;&amp;#039;&amp;#039;TWebStencilsProcessor&amp;#039;&amp;#039;&amp;#039; traite un fichier individuel (généralement ayant une extension HTML) et son modèle associé, le cas échéant. Le processeur peut être utilisé de façon autonome et assigné au &amp;#039;&amp;#039;&amp;#039;TWebActionItem.Producer&amp;#039;&amp;#039;&amp;#039;, ou être créé et appelé par TWebStencilsEngine en tant que post-processeur de fichiers texte renvoyés par un répartiteur de fichiers.&lt;br /&gt;
&lt;br /&gt;
===Composant WebStencilsEngine===&lt;br /&gt;
&lt;br /&gt;
Le composant &amp;#039;&amp;#039;&amp;#039;Engine&amp;#039;&amp;#039;&amp;#039; peut être utilisé dans les deux scénarios suivants :&lt;br /&gt;
&lt;br /&gt;
*Pour le connecter à un ou plusieurs composants &amp;#039;&amp;#039;&amp;#039;WebStencilsProcessor&amp;#039;&amp;#039;&amp;#039; et fournir des comportements et des paramètres partagés.&lt;br /&gt;
*Pour créer des composants &amp;#039;&amp;#039;&amp;#039;WebStencilsProcessor&amp;#039;&amp;#039;&amp;#039; lorsque cela est nécessaire, et placer uniquement ce composant sur vos modules web.&lt;br /&gt;
&lt;br /&gt;
==Intégration automatique de sessions==&lt;br /&gt;
&lt;br /&gt;
Lorsqu&amp;#039;elles sont disponibles, [[WebStencils|WebStencils]] peut automatiquement s&amp;#039;intégrer à des sessions web. Aucune configuration supplémentaire n&amp;#039;est nécessaire. Tout se fait automatiquement dès lors que {{code|WebRequest.Sessions}} existe.&lt;br /&gt;
&lt;br /&gt;
Les données des sessions sont accessibles via {{code|@session.property}}. Tous les objets dans {{code|WebRequest.Session.DataVars}} sont automatiquement recensés en tant que variables de modèles. De même, {{code|UserLoggedIn}} et {{code|UserRoles}} sont automatiquement remplis à partir de {{code|WebRequest.Session.User}}.&lt;br /&gt;
&lt;br /&gt;
En voici un exemple :&amp;lt;source&amp;gt;&lt;br /&gt;
@if session.Authenticated { &lt;br /&gt;
  &amp;lt;div&amp;gt;User authenticated&amp;lt;/div&amp;gt;&lt;br /&gt;
  @session.sessionid&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@if session.UserHasRole(‘admin’) { &lt;br /&gt;
  &amp;lt;div&amp;gt;User is an Admin&amp;lt;/div&amp;gt;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Liste blanche de sécurité==&lt;br /&gt;
&lt;br /&gt;
Pour des raisons de sécurité, WebStencils implémente un mécanisme de liste blanche de propriétés pour éviter l&amp;#039;exposition d&amp;#039;informations sensibles comme les chaînes de connexion aux bases de données. Par défaut, seules les propriétés sécurisées sont accessibles. Voici la liste des propriétés sécurisées :&lt;br /&gt;
&lt;br /&gt;
*Pour les &amp;#039;&amp;#039;&amp;#039;TDataSet&amp;#039;&amp;#039;&amp;#039; : Active, FieldByName, First, Last, Next, Prior, Bof, Eof, FieldCount, Fields, Found, RecordCount, RecNo.&lt;br /&gt;
*Pour les &amp;#039;&amp;#039;&amp;#039;TStrings&amp;#039;&amp;#039;&amp;#039; : Contains, ContainsName, IndexOf, IndexOfName, CommaText, Count, IsEmpty, DelimitedText, Names, KeyNames, Values, ValueFromIndex, Strings, Text.&lt;br /&gt;
&lt;br /&gt;
===Personnalisation de la liste blanche===&lt;br /&gt;
&lt;br /&gt;
La liste blanche peut être personnalisée en utilisant la propriété [[lib_fr:Web.Stencils.TWebStencilsProcessor.Whitelist|TWebStencilsProcessor.Whitelist]]. La méthode de configuration permet aux utilisateurs de spécifier les membres autorisés et ceux bloqués. Voir l&amp;#039;exemple ci-dessous :&amp;lt;source&amp;gt;&lt;br /&gt;
procedure Configure(const AClass: &amp;lt;PTypeInfo, TClass, TObject&amp;gt;; &lt;br /&gt;
                    const AAllowedMembers: TArray&amp;lt;string&amp;gt;;&lt;br /&gt;
                    const ABlockedMembers: TArray&amp;lt;string&amp;gt;; &lt;br /&gt;
                    AReset: Boolean);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AClass&amp;#039;&amp;#039;&amp;#039; : le type PTypeInfo/TClass/TObject pour configurer des éléments tels que des TDataSet, TStrings.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AAllowedMembers&amp;#039;&amp;#039;&amp;#039; : un tableau de propriétés ou de noms de méthodes que l&amp;#039;utilisateur souhaite autoriser.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ABlockedMembers&amp;#039;&amp;#039;&amp;#039; : un tableau de propriétés ou de noms de méthodes que l&amp;#039;utilisateur souhaite bloquer.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AReset&amp;#039;&amp;#039;&amp;#039; : {{code|True}} lorsqu&amp;#039;utilisé pour remplacer une liste blanche existante, ou {{code|False}} pour ajouter des éléments à la liste.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple qui illustre comment ajouter des membres autorisés supplémentaires à une liste blanche existante :&amp;lt;source&amp;gt;&lt;br /&gt;
TWebStencilsProcessor.Whitelist.Configure(TMyClass, &lt;br /&gt;
  [&amp;#039;CustomProp&amp;#039;], nil, False);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici un exemple qui illustre comment remplacer la totalité d&amp;#039;une liste blanche (AReset = True) :&amp;lt;source&amp;gt;&lt;br /&gt;
TWebStencilsProcessor.Whitelist.Configure(TDataSet, &lt;br /&gt;
  [&amp;#039;RecordCount&amp;#039;, &amp;#039;RecNo&amp;#039;], nil, True);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici un exemple qui illustre comment bloquer certains membres :&amp;lt;source&amp;gt;&lt;br /&gt;
TWebStencilsProcessor.Whitelist.Configure(MyObject, &lt;br /&gt;
  nil, [&amp;#039;CustomProp&amp;#039;], False);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La liste blanche s&amp;#039;applique à l&amp;#039;ensemble de l&amp;#039;application et à tous les WebStencils.&lt;br /&gt;
&lt;br /&gt;
==Utilisation de WebStencils avec RAD Server==&lt;br /&gt;
&lt;br /&gt;
La bibliothèque de modèles WebStencils peut aussi être utilisée dans une application RAD Server. Il est recommandé de combiner le composant &amp;#039;&amp;#039;TEMSFileResource&amp;#039;&amp;#039;&amp;#039; existant avec un composant &amp;#039;&amp;#039;&amp;#039;TWebStencilsEngine&amp;#039;&amp;#039;&amp;#039;. Le premier permet de mapper le système de fichiers, alors que le second gère le mappage HTTP et le traitement des modèles. Les composants sont connectés en utilisant la propriété Dispatcher du moteur WebStencil.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple ci-dessous illustre la configuration nécessaire pour ajouter deux composants à un module web RAD Server :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 object html: TEMSFileResource&lt;br /&gt;
    PathTemplate = &amp;#039;..\..\html\{filename}&amp;#039;&lt;br /&gt;
  end&lt;br /&gt;
  object WebStencilsEngine1: TWebStencilsEngine&lt;br /&gt;
    Dispatcher = html&lt;br /&gt;
    PathTemplates = &amp;lt;&lt;br /&gt;
      item&lt;br /&gt;
        Template = &amp;#039;/&amp;#039;&lt;br /&gt;
        Redirect = &amp;#039;/test1.html&amp;#039;&lt;br /&gt;
      end&lt;br /&gt;
      item&lt;br /&gt;
        Template = &amp;#039;/list&amp;#039;&lt;br /&gt;
        Redirect = &amp;#039;/companylist.html&amp;#039;&lt;br /&gt;
      end&lt;br /&gt;
      item&lt;br /&gt;
        Template = &amp;#039;/company&amp;#039;&lt;br /&gt;
        OnPathInit = WebStencilsEngine1PathTemplates2PathInit&lt;br /&gt;
      end&lt;br /&gt;
      ...&amp;gt;&lt;br /&gt;
  end&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les PathTemplates sont utilisés pour mapper les URL entrantes à des fichiers. En mode conception, la configuration se présente comme suit :&lt;br /&gt;
&lt;br /&gt;
[[File:PathTemplates WebStencils.png|350px|=link]]&lt;br /&gt;
&lt;br /&gt;
De plus, il est nécessaire de configurer le mappage de plus haut niveau dans le module de données :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
  [ResourceName(&amp;#039;testfile&amp;#039;)]&lt;br /&gt;
  TTestfileResource1 = class(TDataModule)&lt;br /&gt;
    [ResourceSuffix(&amp;#039;./&amp;#039;)]&lt;br /&gt;
    [ResourceSuffix(&amp;#039;get&amp;#039;, &amp;#039;./&amp;#039;)]&lt;br /&gt;
    [EndpointProduce(&amp;#039;get&amp;#039;, &amp;#039;text/html&amp;#039;)]&lt;br /&gt;
    html: TEMSFileResource;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour mapper plusieurs chemins différents (à la différence de l&amp;#039;exemple ci-dessus), ajoutez des composants &amp;#039;&amp;#039;&amp;#039;TEMSFileResource&amp;#039;&amp;#039;&amp;#039;. Le composant &amp;#039;&amp;#039;&amp;#039;TWebStencilsEngine&amp;#039;&amp;#039;&amp;#039; peut comporter un seul dispatcher dans la propriété correspondante. Pour associer davantage de dispatchers, utilisez le code suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
AddProcessor(html2, WebStencilsEngine1);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Présentation de RAD Server|Présentation de RAD Server]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:47:07 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:WebStencils</comments>
		</item>
		<item>
			<title>Fractionnement de l&#039;éditeur</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Fractionnement_de_l%27%C3%A9diteur&amp;diff=223481&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Fractionnement_de_l%27%C3%A9diteur&amp;diff=223481&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Fractionnement_de_l%27%C3%A9diteur&quot; title=&quot;Fractionnement de l&amp;#039;éditeur&quot;&gt;Fractionnement de l&amp;#039;éditeur&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;La vue [[Fractionnement de l&amp;#039;éditeur|Fractionnement de l&amp;#039;éditeur]] permet d’utiliser plusieurs éditeurs côte à côte, les uns au-dessus des autres, ou de façon combinée, le tout dans une même fenêtre. Cela inclut la possibilité de faire glisser des ensembles d&amp;#039;onglets vers des fenêtres flottantes, puis de les replacer dans l&amp;#039;EDI. &lt;br /&gt;
Elle permet aussi d&amp;#039;avoir plusieurs dispositions personnalisées et offre diverses possibilités de manipulation : disposition simple en deux colonnes, disposition sur plusieurs lignes, ou une configuration particulièrement adaptée à votre flux de travail.&lt;br /&gt;
Vous pouvez travailler en ayant plusieurs onglets ouverts, et ouvrir la même unité dans chacun de ces onglets. Vous pouvez aussi avoir plusieurs onglets ouverts : l&amp;#039;un avec le concepteur de fiche et plusieurs autres avec le code de l&amp;#039;unité correspondante. L&amp;#039;onglet contenant le concepteur de fiche peut aussi être déplacé. &lt;br /&gt;
Il n&amp;#039;y a &amp;#039;&amp;#039;&amp;#039;aucune limite&amp;#039;&amp;#039;&amp;#039; quant au nombre de vues fractionnées, que ce soit horizontalement ou verticalement.&lt;br /&gt;
&lt;br /&gt;
===Utilisation du fractionnement de l&amp;#039;éditeur===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez accéder à la vue Fractionnement de l&amp;#039;éditeur en cliquant avec le bouton droit sur un onglet et en choisissant &amp;#039;&amp;#039;&amp;#039;Fractionner    &amp;amp;gt;&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;Déplacer &amp;amp;gt;&amp;#039;&amp;#039;&amp;#039;. Le fractionnement crée une nouvelle version de l&amp;#039;onglet sélectionné, et le déplacement provoque son ouverture à l&amp;#039;endroit sélectionné dans l&amp;#039;EDI.&lt;br /&gt;
&lt;br /&gt;
[[File:Using-spliteditor.png|=link|400px|border]]&lt;br /&gt;
&lt;br /&gt;
Les raccourcis suivants peuvent être utilisés pour les deux options :&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fractionner en haut :&amp;#039;&amp;#039;&amp;#039; Alt+Maj+T&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fractionner en bas :&amp;#039;&amp;#039;&amp;#039; Alt+Maj+B&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fractionner à droite :&amp;#039;&amp;#039;&amp;#039; Alt+Maj+R&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fractionner à gauche :&amp;#039;&amp;#039;&amp;#039; Alt+Maj+L&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Déplacer en haut :&amp;#039;&amp;#039;&amp;#039; Ctrl+Alt+Maj+T&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Déplacer à gauche :&amp;#039;&amp;#039;&amp;#039; Ctrl+Alt+Maj+L&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Déplacer à droite :&amp;#039;&amp;#039;&amp;#039; Ctrl+Alt+Maj+R&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Déplacer en bas :&amp;#039;&amp;#039;&amp;#039; Ctrl+Alt+Maj+B&lt;br /&gt;
&lt;br /&gt;
Alternativement, vous pouvez utiliser [[Fractionnement de l&amp;#039;éditeur|Fractionnement de l&amp;#039;éditeur]] en faisant glisser un fichier de la vue Projets dans un onglet de l&amp;#039;éditeur. Vous pouvez aussi effectuer un clic droit sur le fichier du projet, puis sélectionner l&amp;#039;option &amp;#039;&amp;#039;&amp;#039;Ouvrir dans&amp;#039;&amp;#039;&amp;#039; et choisir l&amp;#039;onglet de l&amp;#039;éditeur dans lequel vous souhaitez ouvrir le fichier.&lt;br /&gt;
&lt;br /&gt;
Lorsque deux onglets sont dans une fenêtre, chacun a une barre de titre.&lt;br /&gt;
&lt;br /&gt;
Le fractionnement de l&amp;#039;éditeur vous permet de :&lt;br /&gt;
&lt;br /&gt;
*Faire glisser un onglet de l&amp;#039;éditeur, ou un ensemble d&amp;#039;onglets, en faisant glisser la barre de titre et en l&amp;#039;ancrant sur n&amp;#039;importe quel côté de la fenêtre de l&amp;#039;EDI.&lt;br /&gt;
*Le faire glisser et l&amp;#039;ancrer sur n&amp;#039;importe côté de l&amp;#039;éditeur (gauche, droit, haut, bas).&lt;br /&gt;
*Le fusionner avec un ensemble d&amp;#039;onglets en le faisant glisser au centre d&amp;#039;un éditeur existant, y compris une fenêtre flottante d&amp;#039;onglets.&lt;br /&gt;
*Le faire glisser en dehors de sa propre fenêtre (soit un seul onglet ou un ensemble d&amp;#039;onglets).&lt;br /&gt;
&lt;br /&gt;
La plupart des opérations peuvent être réalisées sur des onglets individuels. Il peut s&amp;#039;agir par exemple de déplacer un onglet entre des ensembles d&amp;#039;onglets ancrés en faisant glisser l&amp;#039;onglet individuel d&amp;#039;un emplacement à un autre.&lt;br /&gt;
&lt;br /&gt;
Chaque ensemble d&amp;#039;onglets peut être déplacé à l&amp;#039;extérieur de sa propre fenêtre. Faites glisser la barre de titre pour le déplacer.&lt;br /&gt;
 {{Tip| Vous pouvez appuyer sur Ctrl tout en faisant glisser l&amp;#039;ensemble d&amp;#039;onglets pour vous assurer qu&amp;#039;il ne s&amp;#039;ancre pas.}}&lt;br /&gt;
&lt;br /&gt;
De la même façon, chaque fenêtre peut être ancrée à côté d&amp;#039;un autre ensemble d&amp;#039;onglets. Pour cela, vous devez faire glisser la barre de titre.&lt;br /&gt;
&lt;br /&gt;
{{Note|La plupart des éditeurs/groupes disparaissent de la vue lorsqu&amp;#039;ils sont fermés. Toutefois, la fermeture du premier éditeur (celui qui était auparavant l&amp;#039;éditeur de la fenêtre principale) avec le bouton ‘X’ provoque la fermeture de tous les onglets qu&amp;#039;il contient. L&amp;#039;espace qu&amp;#039;il occupait reste ouvert, car l&amp;#039;éditeur original ne peut pas être fermé. Cela n&amp;#039;a aucune incidence tant que les groupes d&amp;#039;onglets ne sont pas fermés. Il n&amp;#039;y a aucun impact visible lorsque vous créez, déplacez ou ancrez les onglets dans vos tâches.}}&lt;br /&gt;
&lt;br /&gt;
[[File:Split Editor Example.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;C&amp;#039;est l&amp;#039;une des nombreuses façons de configurer la vue Fractionnement de l&amp;#039;éditeur. Elle comporte une fenêtre d&amp;#039;édition sur la gauche, deux à droite, et les volets sont masqués mais apparaissent lorsqu&amp;#039;ils sont survolés par la souris.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===Concepteur et code===&lt;br /&gt;
&lt;br /&gt;
Les vues Fractionnement de l&amp;#039;éditeur permettent de modifier un même fichier dans deux fenêtres d&amp;#039;édition affichées côte à côte, chacune affichant le même contenu de fichier. Lorsque vous tapez dans l&amp;#039;une et que vous faites défiler le texte jusqu&amp;#039;à un emplacement, le texte apparaît dans l&amp;#039;autre fenêtre. Vous pouvez faire défiler les deux fenêtres indépendamment l&amp;#039;une de l&amp;#039;autre, ce qui permet de modifier le fichier à plusieurs endroits. &lt;br /&gt;
Vous pouvez ainsi ouvrir un même fichier dans autant d&amp;#039;onglets que vous le souhaitez.&lt;br /&gt;
{{Note|Gardez toujours à l&amp;#039;esprit qu&amp;#039;il n&amp;#039;y a qu&amp;#039;un seul fichier (module ou tampon de fichier en termes internes) affiché dans plusieurs vues. Ainsi, toute modification effectuée dans l&amp;#039;une de ces vues sera répercutée dans les autres vues (il ne s&amp;#039;agit pas de copier ou de dupliquer une modification). &amp;amp;lt;br /&amp;amp;gt;&lt;br /&gt;
Autrement dit, toute modification de fichier depuis une fenêtre d&amp;#039;édition concerne le fichier lui-même et pas la fenêtre. Cette modification sera répercutée dans les autres vues. }}&lt;br /&gt;
&lt;br /&gt;
===Conseils et astuces===&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Enregistrez&amp;#039;&amp;#039;&amp;#039; la configuration des éditeurs en tant que disposition du bureau. Sinon, vous risquez de passer beaucoup de temps à définir une présentation qui ne sera pas sauvegardée.&lt;br /&gt;
&lt;br /&gt;
{{Notes|&lt;br /&gt;
&lt;br /&gt;
*Lorsque la disposition de bureau est modifiée, la configuration change également (par ex. lorsque l&amp;#039;EDI commence le débogage et passe en &amp;#039;&amp;#039;&amp;#039;Disposition de débogage&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Lorsque vous changez de disposition, tout groupe d&amp;#039;onglets qui ne trouve pas sa place dans la disposition est détaché et devient une fenêtre flottante.}}&lt;br /&gt;
*Activez &amp;#039;&amp;#039;&amp;#039;Options&amp;#039;&amp;#039;&amp;#039; &amp;amp;gt; &amp;#039;&amp;#039;&amp;#039;Enregistrement et récupération&amp;#039;&amp;#039;&amp;#039; &amp;amp;gt; &amp;#039;&amp;#039;&amp;#039;Enregistrer le bureau du projet lors de la fermeture&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;Enregistrer l&amp;#039;état de l&amp;#039;éditeur à la fermeture d&amp;#039;un onglet&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Lorsque vous enregistrez l&amp;#039;état de l&amp;#039;éditeur, vous enregistrez également la position de défilement, les zones réduites ou développées, etc. C&amp;#039;est très pratique lorsque plusieurs fenêtres d&amp;#039;édition du même fichier sont ouvertes. Ainsi, lorsque vous rouvrez votre bureau et rouvrez le projet (ou tout simplement, lorsque vous rouvrez un éditeur précédemment fermé), la nouvelle fenêtre d&amp;#039;édition s&amp;#039;affiche telle qu&amp;#039;elle était au moment de la fermeture.&lt;br /&gt;
*Pensez à désancrer les volets ancrables d&amp;#039;ancienne génération. Ils sont réduits sous forme de petit onglet sur un côté de la fenêtre principale. Vous pouvez les rendre visibles à nouveau en cliquant dessus, et ils restent affichés tant qu’ils ont la focalisation. Pour cela, vous devez cliquer sur le bouton d&amp;#039;épinglage dans la barre de titre du volet, à côté du bouton X. Cette fonctionnalité existe depuis de nombreuses années, mais elle n’était vraiment utile que lorsque l’espace à l&amp;#039;écran était limité. Maintenant que plusieurs fenêtres d&amp;#039;édition peuvent être fractionnées et ancrées ensemble, il devient très pratique de pouvoir désépingler les volets latéraux pour libérer de l’espace horizontal.&lt;br /&gt;
*Pensez à faire un clic droit sur un onglet &amp;#039;&amp;#039;&amp;#039;&amp;amp;gt; Fractionner &amp;amp;gt; A droite&amp;#039;&amp;#039;&amp;#039; (ou &amp;#039;&amp;#039;&amp;#039;A gauche&amp;#039;&amp;#039;&amp;#039;). L&amp;#039;utilisation de plusieurs colonnes est certainement la configuration la plus courante pour les vues fractionnées. Plus vous utiliserez cette fonctionnalité, plus vous constaterez son utilité.&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Présentation de l&amp;#039;EDI|Présentation de l&amp;#039;EDI]]&lt;br /&gt;
*[[Aperçu et page d&amp;#039;accueil|Aperçu et page d&amp;#039;accueil]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:47:06 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Fractionnement_de_l%27%C3%A9diteur</comments>
		</item>
		<item>
			<title>Importation et exportation de package pour la nouvelle chaîne d&#039;outils C++</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Importation_et_exportation_de_package_pour_la_nouvelle_cha%C3%AEne_d%27outils_C%2B%2B&amp;diff=223479&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Importation_et_exportation_de_package_pour_la_nouvelle_cha%C3%AEne_d%27outils_C%2B%2B&amp;diff=223479&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Importation_et_exportation_de_package_pour_la_nouvelle_cha%C3%AEne_d%27outils_C%2B%2B&quot; title=&quot;Importation et exportation de package pour la nouvelle chaîne d&amp;#039;outils C++&quot;&gt;Importation et exportation de package pour la nouvelle chaîne d&amp;#039;outils C++&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Packages pour la nouvelle chaîne d&amp;#039;outils C++}}&lt;br /&gt;
&lt;br /&gt;
Lorsque le modificateur PACKAGE ou [[Declspec(package)|__declspec(package)]] est utilisé, il est difficile de comprendre quand les éléments sont importés ou exportés. {{Product}} applique des heuristiques et considère qu&amp;#039;une classe est traitée en tant que [[Declspec(dllexport)|__declspec(dllexport)]] lorsque les conditions suivantes sont réunies :&lt;br /&gt;
&lt;br /&gt;
* La classe est marquée comme &amp;lt;code&amp;gt;[[Declspec(package)|__declspec(package)]]&amp;lt;/code&amp;gt; et contient une déclaration de fonction non-inline.&lt;br /&gt;
* Le fichier qui contient la classe est compilé avec l&amp;#039;option &amp;lt;code&amp;gt;-tP&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Sinon, la classe est considérée comme [[Declspec(dllimport)|__declspec(dllimport)]].&lt;br /&gt;
&lt;br /&gt;
En résumé, il s&amp;#039;agit de &amp;#039;&amp;#039;&amp;#039;suppositions&amp;#039;&amp;#039;&amp;#039;. Il n&amp;#039;existe aucun moyen fiable de mapper une déclaration dans un fichier d&amp;#039;en-tête {{CBuilder}} pour savoir s&amp;#039;il doit être exporté ou importé, ce qui justifie l&amp;#039;application d&amp;#039;heuristiques. En règle générale, en présence d&amp;#039;une [[Declspec(package)|macro PACKAGE]] le compilateur suppose que le package essaie d&amp;#039;effectuer une exportation lors de la construction d&amp;#039;un projet de package. Il suppose sinon que c&amp;#039;est une importation.&lt;br /&gt;
&lt;br /&gt;
Notez que nous utilisons des méthodes inline dans nos fichiers HPP. Elles concernent généralement les constructeurs, en raison des différences de disponibilité dans les classes descendantes ({{Delphi}} hérite de tous les constructeurs). Toutefois, ces méthodes n&amp;#039;empêchent pas une classe d&amp;#039;être importée selon les heuristiques. En bref, on retiendra que des heuristiques sont appliquées si [[Declspec(package)|__declspec(package)]] est utilisé.&lt;br /&gt;
&lt;br /&gt;
La raison de ce comportement vient du fait que les packages tentent de transposer un concept {{Delphi}} en {{CBuilder}}, sans y parvenir parfaitement. En règle générale {{Product}} recommande d&amp;#039;utiliser les packages avec prudence. En privilégiant des usages qui correspondent à {{Delphi}} (comme c&amp;#039;est le cas avec les composants), vous aurez plus de chances de réussite que si vous utilisez un package de la même façon qu&amp;#039;une DLL, alors qu&amp;#039;il serait préférable d&amp;#039;utiliser une DLL ou une bibliothèque statique.&lt;br /&gt;
&lt;br /&gt;
===Exemple de code===&lt;br /&gt;
&lt;br /&gt;
{{#tag:syntaxhighlight|&lt;br /&gt;
class PACKAGE TMyComponent : public TComponent {&lt;br /&gt;
public:&lt;br /&gt;
&lt;br /&gt;
    __fastcall TMyComponent(TComponent* Owner);&lt;br /&gt;
    void __fastcall DoSomething();&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
|lang=c++}}Dans cet exemple, la classe TMyComponent utilise la macro PACKAGE (qui est développée en decspec(package).) En conséquence, le compilateur applique des heuristiques pour déterminer si vous souhaitez exporter ou importer la classe.&lt;br /&gt;
&lt;br /&gt;
==Recommandations==&lt;br /&gt;
&lt;br /&gt;
Veuillez prendre en compte les recommandations suivantes lorsque vous utilisez l&amp;#039;importation et l&amp;#039;exportation de packages avec la nouvelle chaîne d&amp;#039;outils C++. Cela vous permettra d&amp;#039;éviter des problèmes.&lt;br /&gt;
&lt;br /&gt;
* Evitez d&amp;#039;utiliser les méthodes générées par défaut ou générées par le compilateur dans une classe marquée comme package. Suivez la [https://en.cppreference.com/w/cpp/language/rule_of_three règle des trois/cinq].&lt;br /&gt;
* En toutes circonstances, vous ne devez pas utiliser les méthodes inline dans les types de vos packages importés ou exportés, même s&amp;#039;ils sont simples. Vous devez explicitement placer toutes les méthodes (y compris le constructeur/destructeur/constructeur de copie, et les [https://en.cppreference.com/w/cpp/language/rule_of_three autres]) dans le fichier .cpp.&lt;br /&gt;
* Nous vous recommandons fortement de ne pas exporter les types de templates, car ils sont par définition &amp;quot;inlinés&amp;quot; et peuvent provoquer des définitions multiples.&lt;br /&gt;
* Soyez prudent avec les dépendances entre unités, et apprenez à maîtriser [[Initialisation et Finalisation d&amp;#039;unités pour la nouvelle chaîne d&amp;#039;outils C++|l&amp;#039;initialisation et la finalisation des unités]].&lt;br /&gt;
* De manière générale, nous recommandons fortement de ne pas utiliser PACKAGE ou [[Declspec(package)|__declspec(package)]] sauf dans des usages très simples. A la place, nous vous conseillons de marquer manuellement vos types avec [[Declspec(dllimport)|__declspec(dllimport)]] et [[Declspec(dllexport)|__declspec(dllexport)]].&amp;lt;br /&amp;gt; {{Tip|Une autre approche consiste à wrapper les modificateurs dans une macro dont la valeur dépend de l&amp;#039;emplacement de l&amp;#039;en-tête. En d&amp;#039;autres termes, votre projet EXE peut définir une macro afin qu&amp;#039;une importation soit effectuée lorsque l&amp;#039;en-tête est inclus.}}&lt;br /&gt;
* Les packages étant des DLL étendues, ces directives dllimport/dllexport s&amp;#039;appliquent. Le point clé ici est qu&amp;#039;en les marquant explicitement, le compilateur n&amp;#039;a plus besoin de deviner, car il reçoit une directive claire du programmeur lui indiquant d&amp;#039;effectuer une importation ou une exportation. Les packages sont très pratiques pour les composants et utiles pour les types basés sur {{Delphi}}, mais il est préférable d&amp;#039;utiliser des DLL pour l&amp;#039;exécution dynamique. &amp;lt;br /&amp;gt;{{Attention|Notez qu&amp;#039;il n&amp;#039;y a pas d&amp;#039;enracinement de type entre modules dans C++.}}&lt;br /&gt;
&lt;br /&gt;
===Voir aussi===&lt;br /&gt;
&lt;br /&gt;
* [[Packages pour la nouvelle chaîne d&amp;#039;outils C++|Packages pour la nouvelle chaîne d&amp;#039;outils C++]]&lt;br /&gt;
* [[Initialisation et Finalisation d&amp;#039;unités pour la nouvelle chaîne d&amp;#039;outils C++|Initialisation et Finalisation d&amp;#039;unités pour la nouvelle chaîne d&amp;#039;outils C++]]&lt;br /&gt;
*[[Declspec(dllimport)|__declspec(dllimport)]]&lt;br /&gt;
*[[Declspec(dllexport)|__declspec(dllexport)]]&lt;br /&gt;
*[[BCC64X|BCC64X]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:08 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Importation_et_exportation_de_package_pour_la_nouvelle_cha%C3%AEne_d%27outils_C%2B%2B</comments>
		</item>
		<item>
			<title>Chargement des packages dans une application</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Chargement_des_packages_dans_une_application&amp;diff=223477&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Chargement_des_packages_dans_une_application&amp;diff=223477&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Chargement_des_packages_dans_une_application&quot; title=&quot;Chargement des packages dans une application&quot;&gt;Chargement des packages dans une application&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Packages d&amp;#039;exécution}}&lt;br /&gt;
&lt;br /&gt;
Vous pouvez charger dynamiquement les packages en utilisant l&amp;#039;une des procédures suivantes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&lt;br /&gt;
        Sélection de l&amp;#039;option &amp;#039;&amp;#039;&amp;#039;Lier avec les packages d&amp;#039;exécution&amp;#039;&amp;#039;&amp;#039; dans la boîte de dialogue &amp;#039;&amp;#039;&amp;#039;Options de projet&amp;#039;&amp;#039;&amp;#039; (comme décrit dans cette rubrique)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Chargement des packages avec la fonction LoadPackage|Chargement des packages avec la fonction LoadPackage]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pour charger des packages en utilisant la boîte de dialogue Projet &amp;amp;gt; Options&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt; Ouvrez ou créez un projet dans l&amp;#039;EDI.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Choisissez {{Menu|Projet &amp;amp;gt; Options &amp;amp;gt; Packages &amp;amp;gt; [[Packages d&amp;#039;exécution (Options)|Packages d&amp;#039;exécution]]}}.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Activez la case à cocher &amp;#039;&amp;#039;&amp;#039;Lier avec les packages d&amp;#039;exécution&amp;#039;&amp;#039;&amp;#039;. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Passez en revue la liste des packages d&amp;#039;exécution connus dans le champ &amp;#039;&amp;#039;&amp;#039;Bibliothèques d&amp;#039;importation des packages d&amp;#039;exécution&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
    {{Note| N&amp;#039;oubliez pas que les packages d&amp;#039;exécution associés aux packages de conception installés sont déjà listés. &amp;lt;br /&amp;gt;De plus, les packages d&amp;#039;exécution sont chargés implicitement seulement quand c&amp;#039;est nécessaire (c&amp;#039;est-à-dire quand vous faites référence à un objet défini dans l&amp;#039;une des unités de ce package).}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Pour entrer des noms de bibliothèques supplémentaires, cliquez sur le champ &amp;#039;&amp;#039;&amp;#039;Bibliothèques d&amp;#039;importation des packages d&amp;#039;exécution&amp;#039;&amp;#039;&amp;#039;, puis effectuez l&amp;#039;une des opérations suivantes :&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&lt;br /&gt;
            Cliquez sur le bouton [[Image:ProjectOptionsEllipsis.jpg|Points de suspension]], à l&amp;#039;extrémité droite du champ. Dans la boîte de dialogue &amp;#039;&amp;#039;&amp;#039;Bibliothèques d&amp;#039;importation des packages d&amp;#039;exécution&amp;#039;&amp;#039;&amp;#039;, vous pouvez :&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Entrer le nom du nouveau package et cliquer sur &amp;#039;&amp;#039;&amp;#039;Ajouter&amp;#039;&amp;#039;&amp;#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Parcourir la liste des packages disponibles en cliquant sur le bouton &amp;#039;&amp;#039;&amp;#039;Rechercher un dossier&amp;#039;&amp;#039;&amp;#039; dans la boîte de dialogue &amp;#039;&amp;#039;&amp;#039;Bibliothèques d&amp;#039;importation des packages d&amp;#039;exécution&amp;#039;&amp;#039;&amp;#039;. Cliquez ensuite sur le bouton &amp;#039;&amp;#039;&amp;#039;Parcourir&amp;#039;&amp;#039;&amp;#039; auprès de &amp;#039;&amp;#039;&amp;#039;Nom du package&amp;#039;&amp;#039;&amp;#039; dans la boîte de dialogue [[Ajouter un package d&amp;#039;exécution|Ajouter un package d&amp;#039;exécution]]. &amp;lt;br /&amp;gt;&lt;br /&gt;
                    {{Note|Si vous éditez la zone d&amp;#039;édition &amp;#039;&amp;#039;&amp;#039;Chemin de recherche&amp;#039;&amp;#039;&amp;#039; dans [[Ajouter un package d&amp;#039;exécution|Ajouter un package d&amp;#039;exécution]], vous changez le &amp;#039;&amp;#039;&amp;#039;chemin de bibliothèque global&amp;#039;&amp;#039;&amp;#039;.}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
            Entrez un ou plusieurs noms de packages dans le champ de saisie.&amp;lt;br /&amp;gt;&lt;br /&gt;
            {{Tip|Il n&amp;#039;est pas nécessaire d&amp;#039;inclure les extensions de fichiers dans les noms de packages (ou le numéro de version de la release {{Delphi}}) ; autrement dit, vcl90.bpl s&amp;#039;écrit vcl dans une application VCL. Si vous tapez directement dans la zone d&amp;#039;édition &amp;#039;&amp;#039;&amp;#039;Package d&amp;#039;exécution&amp;#039;&amp;#039;&amp;#039;, séparez les noms par des points-virgules. Par exemple :&amp;lt;br /&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
            rtl;vcl;vcldb;vclado;vclbde;&amp;lt;/source&amp;gt;}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les packages listés dans la zone d&amp;#039;édition &amp;#039;&amp;#039;&amp;#039;Packages d&amp;#039;exécution&amp;#039;&amp;#039;&amp;#039; sont automatiquement liés à votre application lors de la compilation. Les noms de packages en double sont ignorés. De plus, si la case à cocher &amp;#039;&amp;#039;&amp;#039;Lier avec les packages d&amp;#039;exécution&amp;#039;&amp;#039;&amp;#039; est désactivée, l&amp;#039;application est compilée sans packages.&lt;br /&gt;
{{Tip| Pour C++, vous devez conserver les paramètres pour les packages dynamiques et utiliser la RTL dynamique de manière synchronisée. La chaîne d&amp;#039;outils utilisera la bibliothèque d&amp;#039;exécution dynamique si vous utilisez des packages, mais nous vous recommandons de vérifier et de maintenir la synchronisation dans {{Menu| Projet &amp;amp;gt; Options &amp;amp;gt; Packages &amp;amp;gt; [[Packages d&amp;#039;exécution (Options)|Packages d&amp;#039;exécution]]}}.}}&lt;br /&gt;
Les packages d&amp;#039;exécution sont sélectionnés uniquement pour le projet en cours. Pour que les choix actuels deviennent les paramètres par défaut pour les nouveaux projets, cochez la case &amp;#039;&amp;#039;&amp;#039;Par défaut&amp;#039;&amp;#039;&amp;#039; en bas de la page Options de projet.&lt;br /&gt;
{{Note| Quand vous créez une application avec des packages, vous devez inclure les noms des unités {{Delphi}} originales dans la clause &amp;#039;&amp;#039;&amp;#039;uses&amp;#039;&amp;#039;&amp;#039; de vos fichiers source. Par exemple, le fichier source de votre fiche principale pourrait commencer ainsi :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
unit MainForm;&lt;br /&gt;
interface&lt;br /&gt;
uses&lt;br /&gt;
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;&amp;lt;/source&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;vcldb.h&amp;quot;&amp;lt;/source&amp;gt;}}&lt;br /&gt;
Les unités référencées dans cet exemple VCL sont contenues dans les packages VCL et RTL. Néanmoins, vous devez conserver ces références dans la clause &amp;#039;&amp;#039;&amp;#039;uses&amp;#039;&amp;#039;&amp;#039;, même si vous utilisez  VCL et RTL dans votre application. Vous risquez sinon d&amp;#039;obtenir des erreurs de compilation. Dans les fichiers source générés, le Concepteur de fiches ajoute automatiquement ces unités à la clause uses.&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Choix des packages d&amp;#039;exécution à utiliser|Choix des packages d&amp;#039;exécution à utiliser]]&lt;br /&gt;
*[[Utilisation des packages et des composants - Présentation|Utilisation des packages et des composants - Présentation]]&lt;br /&gt;
*[[Déploiement des packages|Déploiement des packages]]&lt;br /&gt;
*[[Chargement des packages avec la fonction LoadPackage|Chargement des packages avec la fonction LoadPackage (construction avec des packages d&amp;#039;exécution)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Guide du développeur Windows]]&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:08 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Chargement_des_packages_dans_une_application</comments>
		</item>
		<item>
			<title>Déclaration de variable inline</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=D%C3%A9claration_de_variable_inline&amp;diff=223475&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=D%C3%A9claration_de_variable_inline&amp;diff=223475&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/D%C3%A9claration_de_variable_inline&quot; title=&quot;Déclaration de variable inline&quot;&gt;Déclaration de variable inline&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Dans 10.3, le langage Delphi permet une plus grande souplesse dans la déclaration des variables locales. Jusqu&amp;#039;à maintenant, en conformité avec les règles du langage Pascal, toutes les déclarations de variables devaient être effectuées dans un bloc var qui était écrit avant le début d&amp;#039;une fonction, d&amp;#039;une procédure ou d&amp;#039;une méthode.&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure Test;&lt;br /&gt;
var&lt;br /&gt;
  I: Integer;&lt;br /&gt;
begin&lt;br /&gt;
  I := 22;&lt;br /&gt;
  ShowMessage (I.ToString);&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La nouvelle syntaxe de déclaration des variables inline vous permet de déclarer la variable directement dans un bloc de code (tout en permettant d&amp;#039;utiliser plusieurs symboles).&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure Test;&lt;br /&gt;
begin&lt;br /&gt;
  var I: Integer;&lt;br /&gt;
  I := 22;&lt;br /&gt;
  ShowMessage (I.ToString);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure Test2;&lt;br /&gt;
begin&lt;br /&gt;
  var I, K: Integer;&lt;br /&gt;
  I := 22;&lt;br /&gt;
  K := I + 10;&lt;br /&gt;
  ShowMessage (K.ToString);&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Même si c&amp;#039;est un changement limité, il convient de signaler quelques effets secondaires. La déclaration et l&amp;#039;initialisation peuvent être effectuées dans une seule instruction. Vous pouvez déclarer des variables dans un bloc de code complexe avec une portée limitée (la variable est uniquement visible depuis l&amp;#039;emplacement de sa déclaration et il n&amp;#039;est pas nécessaire qu&amp;#039;elle soit déclarée et non initialisée pour la portion de code).&lt;br /&gt;
&lt;br /&gt;
==Portée des variables inline==&lt;br /&gt;
&lt;br /&gt;
Il existe un troisième effet secondaire : la déclaration est également autorisée au sein du bloc begin-end de deuxième niveau, la portée étant limitée à ce bloc.&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure Test; // declaration and initialization in a single statement&lt;br /&gt;
begin&lt;br /&gt;
  var I: Integer := 22;&lt;br /&gt;
  ShowMessage (I.ToString);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure Test1; // multiple inline declarations (symbols declared when used)&lt;br /&gt;
begin&lt;br /&gt;
  var I: Integer := 22;&lt;br /&gt;
  var J: Integer;&lt;br /&gt;
  J := 22 + I;&lt;br /&gt;
  var K: Integer := I + J;&lt;br /&gt;
  ShowMessage (K.ToString);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure Test2; // scope limited to local block&lt;br /&gt;
begin&lt;br /&gt;
  var I: Integer := 22;&lt;br /&gt;
  if I &amp;gt; 10 then&lt;br /&gt;
  begin&lt;br /&gt;
    var J: Integer := 3;&lt;br /&gt;
    ShowMessage (J.ToString);&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    var K: Integer := 3;&lt;br /&gt;
    ShowMessage (J.ToString); // COMPILER ERROR: “Undeclared identifier: ‘J’”&lt;br /&gt;
  end;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir dans le dernier extrait de code ci-dessus, une variable déclarée à l&amp;#039;intérieur d&amp;#039;un bloc begin-end n&amp;#039;est visible qu&amp;#039;au sein de ce bloc spécifique, et ne l&amp;#039;est plus une fois le bloc terminé. A la fin des instructions if, J et K ne seront plus visibles.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;effet secondaire ne se limite pas uniquement à la visibilité. Une variable managée, comme une référence d&amp;#039;interface ou un enregistrement, sera correctement nettoyée à la fin du bloc, plutôt qu&amp;#039;à la fin d&amp;#039;une procédure ou d&amp;#039;une méthode :&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure Test99;&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
  // some code&lt;br /&gt;
&lt;br /&gt;
  if (something) then&lt;br /&gt;
  begin&lt;br /&gt;
    var Intf: IInterface = GetInterface; // Intf.AddRef&lt;br /&gt;
    var MRec: TManagedRecord = GetMRecValue; // MRec.Create + MRec.Assign&lt;br /&gt;
    UseIntf(Intf);&lt;br /&gt;
    UseMRec(MRec);&lt;br /&gt;
  end; // Intf.Release and MRec.Destroy are implicitly called at end of scope&lt;br /&gt;
  &lt;br /&gt;
  // more code&lt;br /&gt;
&lt;br /&gt;
end; // no additional cleanup&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Inférence de type pour les variables inline==&lt;br /&gt;
&lt;br /&gt;
De plus, le compilateur peut désormais inférer dans certaines circonstances le type d&amp;#039;une variable à l&amp;#039;emplacement de sa déclaration inline en examinant le type de la valeur qu&amp;#039;on lui a assigné.&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure Test;&lt;br /&gt;
begin&lt;br /&gt;
  var I := 22;&lt;br /&gt;
  ShowMessage (I.ToString);&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le type de l&amp;#039;expression r-value (plus exactement, ce qui apparaît après &amp;amp;nbsp;:=) est analysé pour déterminer le type de la variable. Certains des types de données sont “développés” vers un type plus large. Ainsi dans l&amp;#039;exemple ci-dessus, la valeur numérique 22 (un ShortInt) est développée en entier (Integer). En règle générale, le type de l&amp;#039;expression située à droite est un type entier et est inférieur à 32 bits, la variable sera déclarée comme un entier 32 bits. Vous pouvez utiliser un type explicite si vous voulez un type spécifique, numérique et inférieur.&lt;br /&gt;
&lt;br /&gt;
Sachez également que seul un identificateur unique peut être déclaré sans type de valeur (à la différence des déclarations de variables générales et des déclarations inline).&lt;br /&gt;
&lt;br /&gt;
Alors que cette fonctionnalité peut vous faire économiser quelques frappes de touche pour un entier ou une chaîne, l&amp;#039;inférence de type de variable peut s&amp;#039;avérer être très pratique pour les types complexes comme les instances de types génériques. Dans l&amp;#039;extrait de code ci-dessous, les types inférés sont “TDictionary&amp;amp;lt;string, Integer&amp;amp;gt;” pour la variable MyDictionary et “TPair&amp;amp;lt;string, Integer&amp;amp;gt;” pour la variable APair.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure NewTest;&lt;br /&gt;
begin&lt;br /&gt;
  var MyDictionary := TDictionary&amp;lt;string, Integer&amp;gt;.Create;&lt;br /&gt;
  MyDictionary.Add (&amp;#039;one&amp;#039;, 1);&lt;br /&gt;
  var APair := MyDictionary.ExtractPair(&amp;#039;one&amp;#039;);&lt;br /&gt;
  ShowMessage (APair.Value.ToString)&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Constantes inline==&lt;br /&gt;
&lt;br /&gt;
En plus des variables, il est désormais possible de définir une déclaration de valeur constante comme étant inline. Cela s&amp;#039;applique aux constantes de types ou aux constantes non typées. Dans ce cas, le type est inféré (une fonctionnalité qui existe depuis longtemps pour les constantes). Voici un exemple :&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
   const M: Integer = (L + H) div 2; // single identifier, with type specifier&lt;br /&gt;
   const M = (L + H) div 2; // single identifier, without type specifier&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pour les boucles avec une déclaration de variable==&lt;br /&gt;
&lt;br /&gt;
Les déclarations de variable inline s&amp;#039;avèrent particulièrement pratiques dans les instructions de boucle, y compris les boucles for-to et les boucles for-in.&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
  for var I: Integer := 1 to 10 do ...&lt;br /&gt;
  for var Item: TItemType in Collection do...&amp;lt;/source&amp;gt;Vous pouvez simplifier le code en tirant parti de l&amp;#039;inférence de type :&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
  for var I := 1 to 10 do ...&lt;br /&gt;
  for var Item in Collection do ...&amp;lt;/source&amp;gt;Voici une situation dans laquelle l&amp;#039;utilisation d&amp;#039;une variable avec une portée limitée présente un grand intérêt, comme dans l&amp;#039;extrait de code ci-dessous : l&amp;#039;utilisation de la variable ‘I’ à l&amp;#039;extérieur de la boucle provoque une erreur du compilateur (alors qu&amp;#039;auparavant cela provoquait simplement un avertissement) :&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure ForTest;&lt;br /&gt;
begin&lt;br /&gt;
  var total := 0;&lt;br /&gt;
  for var I: Integer := 1 to 10 do&lt;br /&gt;
    Inc (Total, I);&lt;br /&gt;
  ShowMessage (total.ToString);&lt;br /&gt;
  ShowMessage (I.ToString); // compiler error: Undeclared Identifier ‘I’&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Variables inline répétées==&lt;br /&gt;
&lt;br /&gt;
Le débogueur Delphi gère désormais les variables inline répétées portant le même nom. Pour cela, le compilateur émet des informations de portée pour chaque variable afin qu&amp;#039;elles soient traitées séparément.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure Foo;&lt;br /&gt;
begin&lt;br /&gt;
	if Length(Caption) &amp;lt; 5 then begin&lt;br /&gt;
		var X := 5; // First ‘X’ variable&lt;br /&gt;
		ShowMessage(IntToStr(X));&lt;br /&gt;
	end else begin&lt;br /&gt;
		var X := Length(Caption); // Different ‘X’ variable&lt;br /&gt;
		ShowMessage(‘Length is:’ + IntToStr(X));&lt;br /&gt;
	end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple de code ci-dessus montre deux blocs dans une même méthode qui possèdent chacun une variable de portée locale nommée &amp;#039;X&amp;#039;. Le débogueur reconnaît qu&amp;#039;il s&amp;#039;agit de variables distinctes, et comme il connaît la portée de chacune, elles ne sont pas affichées en même temps.&lt;br /&gt;
&lt;br /&gt;
{{Note| Les utilisateurs doivent recompiler pour obtenir ces informations dans les DCU ou les informations de débogage/packages. Les DCU sont compatibles ABI dans l&amp;#039;ensemble de la release 12.x Athens. Les  versions 12.1 et 12.0 ne chargent pas les informations de portée.}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Rio]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:08 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:D%C3%A9claration_de_variable_inline</comments>
		</item>
		<item>
			<title>Options de l&#039;EDI</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Options_de_l%27EDI&amp;diff=223473&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Options_de_l%27EDI&amp;diff=223473&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Options_de_l%27EDI&quot; title=&quot;Options de l&amp;#039;EDI&quot;&gt;Options de l&amp;#039;EDI&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Boîte de dialogue Options des outils}}&lt;br /&gt;
&lt;br /&gt;
{{Menu|Outils &amp;amp;gt; Options &amp;amp;gt; EDI}}&lt;br /&gt;
&lt;br /&gt;
Spécifie les préférences de la configuration de l&amp;#039;EDI.&lt;br /&gt;
&lt;br /&gt;
==Pages enfant==&lt;br /&gt;
&lt;br /&gt;
* [[Default Folders|Dossiers par défaut]]&lt;br /&gt;
*[[Compilation et exécution|Compilation et exécution]]&lt;br /&gt;
** [[Journal de construction|Journal de construction]]&lt;br /&gt;
* [[Barre d&amp;#039;outils des composants|Barre d&amp;#039;outils des composants]]&lt;br /&gt;
* [[Variables d&amp;#039;environnement|Variables d&amp;#039;environnement]]&lt;br /&gt;
* [[Association de fichiers|Association de fichiers]]&lt;br /&gt;
* [[Bureau et disposition|Bureau et disposition]]&lt;br /&gt;
* [[Page d&amp;#039;accueil|Page d&amp;#039;accueil]]&lt;br /&gt;
* [[Options relatives à l&amp;#039;audit de code intelligent|Audit de code intelligent]]&lt;br /&gt;
* [[Mise à niveau des projets|Mise à niveau des projets]]&lt;br /&gt;
* [[Options LiveBindings|LiveBindings]]&lt;br /&gt;
* [[Saving and Recovering|Enregistrement et récupération]]&lt;br /&gt;
* [[GetIt (Options)|Gestionnaire de packages GetIt]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:08 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Options_de_l%27EDI</comments>
		</item>
		<item>
			<title>Mode Concentration</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Mode_Concentration&amp;diff=223471&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Mode_Concentration&amp;diff=223471&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Mode_Concentration&quot; title=&quot;Mode Concentration&quot;&gt;Mode Concentration&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Options de l&amp;#039;éditeur}}&lt;br /&gt;
&lt;br /&gt;
{{Menu|Outils &amp;amp;gt; Options &amp;amp;gt; Editeur &amp;amp;gt; Mode Concentration}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le [[Mode Concentration|mode Concentration]] est un moyen de coder sans distraction. Il vous permet de n&amp;#039;afficher que l&amp;#039;éditeur de code et cache le reste de l&amp;#039;interface utilisateur.&lt;br /&gt;
&lt;br /&gt;
Pour activer le [[Mode Concentration|mode Concentration]], cliquez avec le bouton droit sur l&amp;#039;onglet et sélectionnez &amp;#039;&amp;#039;&amp;#039;Mode Concentration&amp;#039;&amp;#039;&amp;#039; ou utilisez le raccourci {{code|Ctrl+Alt+Z}} lorsque l&amp;#039;éditeur détient la focalisation. Lorsque le reste de l&amp;#039;interface utilisateur est caché, l&amp;#039;éditeur affiche le nom du fichier en haut, des boutons de fermeture, et il peut être fractionné à droite et à gauche. En [[Mode Concentration|mode Concentration]], vous devez garder à l&amp;#039;esprit ce qui suit :&lt;br /&gt;
&lt;br /&gt;
*N&amp;#039;importe quel nombre d&amp;#039;onglets peut être ouvert dans l&amp;#039;éditeur en [[Mode Concentration|mode Concentration]], et plusieurs éditeurs peuvent apparaître côte à côte comme des colonnes.&lt;br /&gt;
*Le nombre d&amp;#039;éditeurs affichés côte à côte est limité par l&amp;#039;espace horizontal disponible. Il n&amp;#039;est pas possible d&amp;#039;ajouter une nouvelle colonne si les éditeurs redimensionnés deviennent trop petits pour travailler.&lt;br /&gt;
*Le glissement du séparateur vers la droite ou la gauche provoque le redimensionnement de l&amp;#039;éditeur par défaut tout en conservant sa position centrée. &lt;br /&gt;
*Des boutons sont affichés dans la partie supérieure de l&amp;#039;éditeur pour permettre le fractionnement de l&amp;#039;éditeur vers la gauche, ou la droite, et pour ouvrir une unité avec la boîte de dialogue &amp;#039;&amp;#039;&amp;#039;Utiliser l&amp;#039;unité&amp;#039;&amp;#039;&amp;#039; (vous pouvez aussi utiliser le raccourci {{code|Ctrl+F12}}). Ces options permettent de travailler sur plusieurs fichiers en [[Mode Concentration|mode Concentration]].&lt;br /&gt;
*Vous pouvez utiliser les couleurs de l&amp;#039;éditeur pour dessiner les barres de défilement.&lt;br /&gt;
&lt;br /&gt;
{{Note|Dans Delphi, seuls les fichiers source de l&amp;#039;unité sont disponibles dans l&amp;#039;éditeur. Dans C++, les fichiers C++ et l&amp;#039;en-tête d&amp;#039;une unité sont disponibles dans l&amp;#039;éditeur. Le concepteur de fiche et d&amp;#039;autres vues secondaires de l&amp;#039;éditeur ne sont pas disponibles.}}&lt;br /&gt;
&lt;br /&gt;
Lorsque l&amp;#039;option &amp;#039;&amp;#039;&amp;#039;Activer le mode Concentration&amp;#039;&amp;#039;&amp;#039; est activée, vous pouvez choisir quelles fonctionnalités vous souhaitez afficher avec votre code :&lt;br /&gt;
&lt;br /&gt;
* Signets&lt;br /&gt;
* Marge droite&lt;br /&gt;
* Barre d&amp;#039;outils de navigation&lt;br /&gt;
* Pliage du code&lt;br /&gt;
* Infos de débogage (Points d&amp;#039;arrêt, lignes compilées)&lt;br /&gt;
* Parties modifiées&lt;br /&gt;
* Pas de points avec les numéros de ligne&lt;br /&gt;
&lt;br /&gt;
Par défaut, le [[Mode Concentration|mode Concentration]] n&amp;#039;affiche que l&amp;#039;onglet en cours, mais l&amp;#039;activation de l&amp;#039;option &amp;#039;&amp;#039;&amp;#039;Cloner tous les onglets en mode Concentration&amp;#039;&amp;#039;&amp;#039; vous permet de charger toutes les vues actives.&lt;br /&gt;
&lt;br /&gt;
[[File:Focus Mode.png|700px|link=]]&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
* [[Options de l&amp;#039;éditeur|Editeur]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:07 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Mode_Concentration</comments>
		</item>
		<item>
			<title>Champs (Delphi)</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Champs_(Delphi)&amp;diff=223469&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Champs_(Delphi)&amp;diff=223469&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Champs_(Delphi)&quot; title=&quot;Champs (Delphi)&quot;&gt;Champs (Delphi)&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Classes et objets - Index}}&amp;lt;idetag id=&amp;quot;var&amp;quot;&amp;gt;&amp;lt;/idetag&amp;gt;&amp;lt;idetag id=&amp;quot;Int&amp;quot;&amp;gt;&amp;lt;/idetag&amp;gt;&amp;lt;idetag id=&amp;quot;class var&amp;quot;&amp;gt;&amp;lt;/idetag&amp;gt;&amp;lt;idetag id=&amp;quot;private&amp;quot;&amp;gt;&amp;lt;/idetag&amp;gt;&amp;lt;idetag id=&amp;quot;protected&amp;quot;&amp;gt;&amp;lt;/idetag&amp;gt;&amp;lt;idetag id=&amp;quot;public&amp;quot;&amp;gt;&amp;lt;/idetag&amp;gt;&amp;lt;idetag id=&amp;quot;published&amp;quot;&amp;gt;&amp;lt;/idetag&amp;gt;&amp;lt;idetag id=&amp;quot;strict protected&amp;quot;&amp;gt;&amp;lt;/idetag&amp;gt;&lt;br /&gt;
Cette rubrique décrit la syntaxe des déclarations de champs de données des classes. &lt;br /&gt;
&lt;br /&gt;
==A propos des champs==&lt;br /&gt;
&lt;br /&gt;
Un champ est semblable à une variable appartenant à un objet. Les champs peuvent avoir n&amp;#039;importe quel type, y compris les types classe. (Les champs peuvent donc contenir des références d&amp;#039;objets.) Les champs sont généralement privés. &lt;br /&gt;
&lt;br /&gt;
Pour définir un membre champ dans une classe, déclarez simplement le champ comme vous le feriez pour une variable. Par exemple, la déclaration suivante crée une classe appelée &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;TNumber&amp;lt;/span&amp;gt; dont le seul membre, en dehors des méthodes héritées de [[lib_fr:System.TObject|System.TObject]], est un champ entier appelé &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;Int&amp;lt;/span&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 type&lt;br /&gt;
   TNumber = class&lt;br /&gt;
     var&lt;br /&gt;
       Int: Integer;&lt;br /&gt;
   end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le mot-clé &amp;#039;&amp;#039;&amp;#039;var&amp;#039;&amp;#039;&amp;#039; est facultatif. Toutefois, s&amp;#039;il n&amp;#039;est pas utilisé, toutes les déclarations de champs doivent être placées avant les déclarations de propriétés ou de méthodes. Après les déclarations de propriétés ou de méthodes, le mot-clé &amp;#039;&amp;#039;&amp;#039;var&amp;#039;&amp;#039;&amp;#039; peut être utilisé pour introduire des déclarations de champs supplémentaires. &lt;br /&gt;
&lt;br /&gt;
Lorsqu&amp;#039;un objet est créé, ses champs sont initialisés à zéro ou aux valeurs par défaut. Ce comportement est différent de celui des variables locales qui ne sont pas initialisées. Si vous entrez :{{#tag:syntaxhighlight|&lt;br /&gt;
var&lt;br /&gt;
&lt;br /&gt;
  N: TNumber;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
  N := TNumber.Create;&lt;br /&gt;
&lt;br /&gt;
|lang=delphi}}la valeur de N.Int sera zéro.&lt;br /&gt;
&lt;br /&gt;
Les champs sont liés statiquement, c&amp;#039;est-à-dire que les références les désignant sont réglées à la compilation. Pour comprendre ce que cela signifie, examinez le code suivant : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 type&lt;br /&gt;
    TAncestor = class&lt;br /&gt;
       Value: Integer;&lt;br /&gt;
    end;&lt;br /&gt;
 &lt;br /&gt;
    TDescendant = class(TAncestor)&lt;br /&gt;
       Value: string;    // hides the inherited Value field&lt;br /&gt;
    end;&lt;br /&gt;
 &lt;br /&gt;
 var&lt;br /&gt;
    MyObject: TAncestor;&lt;br /&gt;
 &lt;br /&gt;
 begin&lt;br /&gt;
    MyObject := TDescendant.Create;&lt;br /&gt;
    MyObject.Value := &amp;#039;Hello!&amp;#039;     // error&lt;br /&gt;
 &lt;br /&gt;
   (MyObject as TDescendant).Value := &amp;#039;Hello!&amp;#039;   // works!&lt;br /&gt;
 end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Même si &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;MyObject&amp;lt;/span&amp;gt; contient une instance de &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;TDescendant&amp;lt;/span&amp;gt;, il est déclaré comme un &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;TAncestor&amp;lt;/span&amp;gt;. Le compilateur interprète donc &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;MyObject.Value&amp;lt;/span&amp;gt; comme une référence au champ (entier) déclaré dans &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;TAncestor&amp;lt;/span&amp;gt;. Cependant, les deux champs existent dans l&amp;#039;objet &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;TDescendant&amp;lt;/span&amp;gt; ; la valeur &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;Value&amp;lt;/span&amp;gt; héritée est masquée par la nouvelle, mais il est possible d&amp;#039;y accéder en utilisant un transtypage.&lt;br /&gt;
&lt;br /&gt;
Les déclarations de [[Constantes déclarées|constantes]] et de [[Constantes déclarées|constantes typées]] peuvent apparaître dans des classes et des enregistrements non anonymes avec une portée globale. Les constantes et les constantes typées peuvent également apparaître dans les définitions de [[Déclarations de types imbriqués|types imbriqués]]. Les constantes et constantes typées ne peuvent apparaître que dans les définitions de classes quand la classe est définie localement sur une procédure (c&amp;#039;est-à-dire qu&amp;#039;elles ne peuvent pas apparaître dans des enregistrements définis dans une procédure). &lt;br /&gt;
&lt;br /&gt;
==Champs de classe==&lt;br /&gt;
&lt;br /&gt;
Les champs de classe sont des champs de données d&amp;#039;une classe accessibles sans référence d&amp;#039;objet (à la différence des &amp;quot;champs d&amp;#039;instance&amp;quot; normaux qui sont traités ci-dessus). Les données stockées dans un champ de classe sont partagées par toutes les instances de la classe et peuvent être accessibles en se référant à la classe ou à une variable qui représente une instance de la classe.&lt;br /&gt;
&lt;br /&gt;
La déclaration de bloc &amp;#039;&amp;#039;&amp;#039;class var&amp;#039;&amp;#039;&amp;#039; vous permet d&amp;#039;introduire un bloc de champs de classe dans une déclaration de classe. Tous les champs déclarés après &amp;#039;&amp;#039;&amp;#039;class var&amp;#039;&amp;#039;&amp;#039; ont des attributs de stockage statique. Un bloc &amp;#039;&amp;#039;&amp;#039;class var&amp;#039;&amp;#039;&amp;#039; se termine par : &lt;br /&gt;
&lt;br /&gt;
# Une autre déclaration &amp;#039;&amp;#039;&amp;#039;class var&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;var&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
# Une [[Méthodes (Delphi)|déclaration de procédure ou fonction (c&amp;#039;est-à-dire une méthode)]] (y compris des procédures de classe et des fonctions de classe)&lt;br /&gt;
# Une [[Propriétés (Delphi)|déclaration de propriété]] (y compris des propriétés de classe)&lt;br /&gt;
# Une [[Méthodes (Delphi)|déclaration de constructeur ou de destructeur]]&lt;br /&gt;
# Un [[Classes et objets (Delphi)|spécificateur de portée de visibilité]] (&amp;#039;&amp;#039;&amp;#039;public&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;private&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;protected&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;published&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;strict private&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;strict protected&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 type&lt;br /&gt;
     TMyClass = class&lt;br /&gt;
       public&lt;br /&gt;
         class var        // Introduce a block of class static fields.&lt;br /&gt;
           Red: Integer;&lt;br /&gt;
           Green: Integer;&lt;br /&gt;
           Blue: Integer;&lt;br /&gt;
         var              // Ends the class var block.&lt;br /&gt;
           InstanceField: Integer;&lt;br /&gt;
     end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les champs de classe &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;Red&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;Green&amp;lt;/span&amp;gt; et &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;Blue&amp;lt;/span&amp;gt; sont accessibles par le code :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 TMyClass.Red := 1;&lt;br /&gt;
 TMyClass.Green := 2;&lt;br /&gt;
 TMyClass.Blue := 3;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les champs de classe sont aussi accessibles au moyen d&amp;#039;une instance de la classe. Avec la déclaration suivante :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 var&lt;br /&gt;
 	myObject: TMyClass;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce code a le même effet que les assignations de &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;Red&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;Green&amp;lt;/span&amp;gt; et &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;Blue&amp;lt;/span&amp;gt; ci-dessus :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 myObject.Red := 1;&lt;br /&gt;
 myObject.Green := 2;&lt;br /&gt;
 myObject.Blue := 3;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Variables (Delphi)|Variables ({{Delphi}})]]&lt;br /&gt;
*[[Classes et objets (Delphi)|Classes et objets (Delphi)]]&lt;br /&gt;
*[[Méthodes (Delphi)|Méthodes (Delphi)]]&lt;br /&gt;
*[[Propriétés (Delphi)|Propriétés (Delphi)]]&lt;br /&gt;
*[[Déclarations de types imbriqués|Déclarations de types imbriquées]]&lt;br /&gt;
*[[Références de classes|Références de classes]]&lt;br /&gt;
*[[Exceptions (Delphi)|Exceptions (Delphi)]]&lt;br /&gt;
*[[Surcharge d&amp;#039;opérateurs (Delphi)|Surcharge d&amp;#039;opérateurs (Delphi)]]&lt;br /&gt;
*[[Assistances de classes et d&amp;#039;enregistrements (Delphi)|Assistances de classes et d&amp;#039;enregistrements (Delphi)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:Guide du langage Delphi]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:07 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Champs_(Delphi)</comments>
		</item>
		<item>
			<title>Delphi RTTI et C++Builder</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Delphi_RTTI_et_C%2B%2BBuilder&amp;diff=223467&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Delphi_RTTI_et_C%2B%2BBuilder&amp;diff=223467&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Delphi_RTTI_et_C%2B%2BBuilder&quot; title=&quot;Delphi RTTI et C++Builder&quot;&gt;Delphi RTTI et C++Builder&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Utilisation des informations RTTI - Index|Utilisation des informations RTTI}}&lt;br /&gt;
&lt;br /&gt;
==Découverte du type à l&amp;#039;exécution (réflexion)==&lt;br /&gt;
&lt;br /&gt;
===Désambiguïsation===&lt;br /&gt;
&lt;br /&gt;
Les informations RTTI de {{Delphi}} sont différentes des informations RTTI standard de C++&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
*Les informations RTTI de {{Delphi}} vous permettent d&amp;#039;explorer les champs, les méthodes d&amp;#039;une classe, et ainsi de suite.&lt;br /&gt;
*Les informations RTTI de C++ vous permettent d&amp;#039;identifier le type d&amp;#039;une variable et de comparer l&amp;#039;égalité des types, ou l&amp;#039;ordre de tri.&lt;br /&gt;
&lt;br /&gt;
{{Note| L&amp;#039;option du compilateur {{Menu|Projet &amp;amp;gt; Options &amp;amp;gt; [[Compilateur C++|Compilateur C++]] &amp;amp;gt; Activer la RTTI&amp;#039;&amp;#039;&amp;#039;}} fait référence à une RTTI C++ standard.}}&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===Génération des informations RTTI===&lt;br /&gt;
&lt;br /&gt;
Seules les classes de style {{Delphi}} peuvent avoir des informations de style {{Delphi}} dans C++ (voir [[Declspec(delphiclass)|__declspec(delphiclass)]]).&lt;br /&gt;
&lt;br /&gt;
Des informations RTTI peuvent être générées pour tout type de membre de classe (méthodes, champs, propriétés) avec toute visibilité (__published, public, protected, private). Pour contrôler la génération des informations RTTI, les spécifications suivantes peuvent être utilisées&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
*[[Pragma explicit rtti|#pragma explicit_rtti]] (c&amp;#039;est l&amp;#039;équivalent C++ de [[Directive RTTI (Delphi)|&amp;lt;nowiki&amp;gt;{$RTTI}&amp;lt;/nowiki&amp;gt;]])&lt;br /&gt;
*[[Declspec(delphirtti)|__declspec(delphirtti)]] (c&amp;#039;est l&amp;#039;équivalent C++ de [[Informations de type à l&amp;#039;exécution (Delphi)|&amp;lt;nowiki&amp;gt;{$M}/{$TYPEINFO}&amp;lt;/nowiki&amp;gt;]])&lt;br /&gt;
*[[Published|__published]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exemple&amp;amp;nbsp;:&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;System.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;Rtti.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;tchar.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Enable RTTI generation for private fields&lt;br /&gt;
#pragma explicit_rtti fields(private)&lt;br /&gt;
&lt;br /&gt;
class __declspec(delphiclass) TBuffer {&lt;br /&gt;
private:&lt;br /&gt;
	int wrHead, rdHead;&lt;br /&gt;
&lt;br /&gt;
	// ...&lt;br /&gt;
public:&lt;br /&gt;
	TBuffer() {&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
int _tmain(int argc, _TCHAR* argv[]) {&lt;br /&gt;
	TRttiContext context;&lt;br /&gt;
&lt;br /&gt;
	// Get class RTTI&lt;br /&gt;
	TRttiInstanceType *cls = dynamic_cast&amp;lt;TRttiInstanceType*&amp;gt;&lt;br /&gt;
		(context.GetType(__delphirtti(TBuffer)));&lt;br /&gt;
&lt;br /&gt;
	if (cls) {&lt;br /&gt;
		// Get field RTTI&lt;br /&gt;
		TRttiField *field = cls-&amp;gt;GetField(&amp;quot;wrHead&amp;quot;);&lt;br /&gt;
		if (field) {&lt;br /&gt;
			printf(&amp;quot;%ls&amp;quot;, field-&amp;gt;ToString().c_str());&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			puts(&amp;quot;\&amp;quot;wrHead\&amp;quot; doesn&amp;#039;t have RTTI&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		puts(&amp;quot;\&amp;quot;TBuffer\&amp;quot; doesn&amp;#039;t have RTTI&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return 0;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Sortie console&amp;amp;nbsp;:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 wrHead: int @ 00&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, les informations RTTI de classe sont extraites à l&amp;#039;aide de la fonction [[Delphirtti|__delphirtti]] (qui renvoie un pointeur sur une variable [[lib_fr:System.TypInfo.TTypeInfo|TTypeInfo]]). Il est possible de faire la même chose avec l&amp;#039;opérateur [[Classid|__classid]]. Voir le code suivant&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
	TRttiInstanceType *cls = dynamic_cast&amp;lt;TRttiInstanceType*&amp;gt;&lt;br /&gt;
		(context.GetType(__classid(TBuffer)));&amp;lt;/source&amp;gt;Sur la plate-forme Windows, le [[Delphirtti|__delphirtti]] d&amp;#039;un [[Wchar t|wchar_t]] renvoie un [[lib_fr:System.TypInfo.PTypeInfo|PTypeInfo]] qui correspond à la RTTI {{Delphi}} pour le {{Delphi}} [[lib_fr:System.WideChar|WideChar]].&lt;br /&gt;
&lt;br /&gt;
Cette fonctionnalité est illustrée dans l&amp;#039;exemple de code suivant&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static System::UTF8String getTypeInfoName(System::Typinfo::PTypeInfo ti)&lt;br /&gt;
{&lt;br /&gt;
#ifndef _DELPHI_NEXTGEN&lt;br /&gt;
  return System::UTF8String(ti-&amp;gt;Name);&lt;br /&gt;
#else&lt;br /&gt;
  int len = ti-&amp;gt;Name;&lt;br /&gt;
  const char* p = reinterpret_cast&amp;lt;char*&amp;gt;(&amp;amp;(ti-&amp;gt;Name));&lt;br /&gt;
  return System::UTF8String(p+1, len);&lt;br /&gt;
#endif&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 int main()&lt;br /&gt;
{&lt;br /&gt;
  System::Typinfo::PTypeInfo pti;&lt;br /&gt;
  pti = __delphirtti(char16_t);&lt;br /&gt;
  printf(&amp;quot;Kind=%d, Name=&amp;#039;%s&amp;#039;\n&amp;quot;, pti-&amp;gt;Kind, getTypeInfoName(pti).c_str());&lt;br /&gt;
  pti = __delphirtti(wchar_t);&lt;br /&gt;
  printf(&amp;quot;Kind=%d, Name=&amp;#039;%s&amp;#039;\n&amp;quot;, pti-&amp;gt;Kind, getTypeInfoName(pti).c_str());&lt;br /&gt;
  return 0;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Sortie&amp;amp;nbsp;:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;Plate-forme&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;Sortie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
WIN64&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Kind=1, Name=&amp;#039;char16_t&amp;#039;{{#tag:br|}}&lt;br /&gt;
Kind=9, Name=&amp;#039;Char&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Enracinement du type===&lt;br /&gt;
&lt;br /&gt;
Vous ne pouvez pas utiliser les méthodes [[lib_fr:System.Rtti.TRttiContext.FindType|FindType]] et [[lib_fr:System.Rtti.TRttiContext.GetTypes|GetTypes]] pour obtenir la RTTI {{Delphi}} pour les classes définies en langage C++ car [[lib_fr:System.Rtti.TRttiContext.FindType|FindType]] et [[lib_fr:System.Rtti.TRttiContext.GetTypes|GetTypes]] effectuent des recherches dans les packages d&amp;#039;exécution. Or, il n&amp;#039;existe pas d&amp;#039;enracinement de type dans les packages C++. Cela signifie que vous ne pourrez pas utiliser [[lib_fr:System.Rtti.TRttiPackage|TRttiPackage]] pour obtenir des informations sur un package dynamique construit avec C++Builder.&lt;br /&gt;
&lt;br /&gt;
En revanche, le lieur {{Delphi}} enracine la RTTI dans les [[lib_fr:System.PackageInfoTable|tables d&amp;#039;informations des packages]]. En conséquence, en C++, vous pouvez charger et utiliser la RTTI de style {{Delphi}} depuis des modules {{Delphi}} (packages), comme dans le code suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
TRttiContext context;&lt;br /&gt;
TRttiType *rttiType = context.FindType(&amp;quot;Classes.TStringList&amp;quot;);&lt;br /&gt;
printf(&amp;quot;%ls&amp;quot;, rttiType-&amp;gt;ToString()); // displays TStringList&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attributs==&lt;br /&gt;
&lt;br /&gt;
Les attributs {{Delphi}} ne sont pas pris en charge dans {{CBuilder}}. {{CBuilder}} prend en charge les &amp;#039;&amp;#039;&amp;#039;[[Fonctionnalités C++11 - Index|attributs de C++11]]&amp;#039;&amp;#039;&amp;#039;, qui sont différents des attributs {{Delphi}} :&lt;br /&gt;
&lt;br /&gt;
*Les attributs {{Delphi}} représentent des informations supplémentaires pour le programmeur et ils peuvent être extraits à l&amp;#039;exécution.&lt;br /&gt;
*Les attributs C++11 représentent des informations supplémentaires pour le compilateur et ne sont pas spécifiques à RTTI.&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
===Informations RTTI de {{Delphi}}===&lt;br /&gt;
&lt;br /&gt;
*[[lib_fr:System.Rtti|API RTTI]]&lt;br /&gt;
*[[Utilisation des informations RTTI - Index|Utilisation des informations RTTI]]&lt;br /&gt;
*[[Présentation des attributs|Attributs et RTTI]]&lt;br /&gt;
&lt;br /&gt;
===Informations RTTI de {{Delphi}} dans {{CBuilder}}===&lt;br /&gt;
&lt;br /&gt;
*[[Declspec(delphirtti)|__declspec(delphirtti)]]&lt;br /&gt;
&lt;br /&gt;
===Informations RTTI de C++===&lt;br /&gt;
&lt;br /&gt;
*[[Identification de type à l&amp;#039;exécution (RTTI) - Index|Identification de type à l&amp;#039;exécution (RTTI) - Index]]&lt;br /&gt;
*[[Typeid|typeid]] (mot clé)&lt;br /&gt;
*[[Rtti et option -RT|__rtti et option -RT]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Référence C++]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:RTTI]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:07 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Delphi_RTTI_et_C%2B%2BBuilder</comments>
		</item>
		<item>
			<title>Compilateur Delphi</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Compilateur_Delphi&amp;diff=223465&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Compilateur_Delphi&amp;diff=223465&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Compilateur_Delphi&quot; title=&quot;Compilateur Delphi&quot;&gt;Compilateur Delphi&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Construction}}&lt;br /&gt;
&lt;br /&gt;
{{Menu|Projet &amp;amp;gt; Options &amp;amp;gt; Construction &amp;amp;gt; Compilateur {{Delphi}}}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
Utilisez cette page pour définir les options du compilateur {{Delphi}} pour le projet en cours.&lt;br /&gt;
&lt;br /&gt;
[[File:Delphi Compiler options.jpg|=link]]&lt;br /&gt;
&lt;br /&gt;
{{Note|Les options décrites ici ne sont pas toutes disponibles pour tous les types de projets. Par exemple, &amp;#039;&amp;#039;&amp;#039;Répertoire de sortie DCP&amp;#039;&amp;#039;&amp;#039; n&amp;#039;apparaît pas pour les projets C++.}}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;Options&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Cible, Appliquer, Enregistrer&lt;br /&gt;
|&lt;br /&gt;
Voir [[Options de la cible|Options de la cible]].&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Eléments communs&lt;br /&gt;
|&lt;br /&gt;
Voir [[Eléments communs des pages Options de projet|Eléments communs des pages Options de projet]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Elément&lt;br /&gt;
!Description&lt;br /&gt;
! style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot; |Commutateurs du compilateur&lt;br /&gt;
! style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot; |[[Plates-formes cible prises en charge|Toutes les plates-formes]] sont prises en charge sauf spécification contraire&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Définitions conditionnelles&lt;br /&gt;
|&lt;br /&gt;
Spécifie les symboles référencés dans vos directives de compilation conditionnelles. Utilisez un point-virgule pour séparer plusieurs symboles.  Par exemple, tapez : &amp;lt;code&amp;gt;DEBUG;Platform32Bit&amp;lt;/code&amp;gt;.&lt;br /&gt;
Cliquez sur les [[Image:ProjectOptionsEllipsis.jpg|points de suspension]] pour ouvrir la boîte de dialogue &amp;#039;&amp;#039;&amp;#039;[[Boîte de dialogue liste-ordonnée|Définitions conditionnelles]]&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Répertoire de sortie DCP&lt;br /&gt;
|&lt;br /&gt;
Spécifie où le [[Fichier package compilé Delphi (*.dcp)|fichier de package compilé]] ({{Path|.dcp}}) est placé lors de la compilation. Si le champ est vide, le &amp;#039;&amp;#039;&amp;#039;répertoire de sortie DCP&amp;#039;&amp;#039;&amp;#039; global spécifié dans la page {{menu|Outils &amp;amp;gt; Options &amp;amp;gt; Options d&amp;#039;environnement &amp;amp;gt; Options {{Delphi}} &amp;amp;gt; Bibliothèque}} sera utilisé à la place.&lt;br /&gt;
Le bouton popup [[Image:ProjectOptionsEllipsis.jpg|Points de suspension]] ouvre une [[Boîte de dialogue liste-ordonnée|boîte de dialogue &amp;lt;liste-ordonnée&amp;gt;]] pour la sélection et l&amp;#039;ajout de répertoires, comme décrit dans [[Eléments communs des pages Options de projet|Eléments communs des pages Options de projet]].&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-LN&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Chemin de recherche du framework&lt;br /&gt;
|&lt;br /&gt;
Spécifie les chemins de recherche dans lesquels le compilateur recherche les frameworks.&lt;br /&gt;
Séparez les alias par un point-virgule.&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;‑‑frameworkpath&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
Périphérique iOS&amp;amp;nbsp; (64 bits)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Répertoire de sortie&lt;br /&gt;
|&lt;br /&gt;
Spécifie l&amp;#039;endroit où le compilateur doit placer le fichier exécutable. Le bouton popup [[Image:ProjectOptionsEllipsis.jpg|Points de suspension]] ouvre une [[Boîte de dialogue liste-ordonnée|boîte de dialogue &amp;lt;liste-ordonnée&amp;gt;]] pour la sélection et l&amp;#039;ajout de répertoires, comme décrit dans [[Eléments communs des pages Options de projet|Eléments communs des pages Options de projet]].&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Répertoire de sortie des packages&lt;br /&gt;
|&lt;br /&gt;
Spécifie le répertoire où le compilateur place les fichiers de packages générés. Le bouton popup [[Image:ProjectOptionsEllipsis.jpg|Points de suspension]] ouvre une [[Boîte de dialogue liste-ordonnée|boîte de dialogue &amp;lt;liste-ordonnée&amp;gt;]] pour la sélection et l&amp;#039;ajout de répertoires, comme décrit dans [[Eléments communs des pages Options de projet|Eléments communs des pages Options de projet]].&lt;br /&gt;
Cette option détermine le répertoire de sortie des fichiers suivants :&lt;br /&gt;
*[[Fichier manifest d&amp;#039;application Android (AndroidManifest.xml)|Fichier manifest d&amp;#039;application Android (AndroidManifest.xml)]]&lt;br /&gt;
*[[Fichier des droits d&amp;#039;application Apple (*.entitlements)|Fichier des droits d&amp;#039;application Apple (*.entitlements)]]&lt;br /&gt;
*[[Fichier des informations d&amp;#039;application Apple (*.info.plist)|Fichier des informations d&amp;#039;application Apple (*.info.plist)]]&lt;br /&gt;
*[[Fichier des règles de ressources d&amp;#039;application Apple|Fichier des règles de ressources d&amp;#039;application Apple (ResourceRules.plist)]]&lt;br /&gt;
*[[Fichier de chaînes de ressources Delphi (*.drc)|Fichier de chaînes de ressources Delphi (*.drc)]]&lt;br /&gt;
*[[Map Debug File|Fichier de débogage map]]&lt;br /&gt;
*[[Fichier de bibliothèque partagée de package|Fichier de bibliothèque dynamique de package]]&lt;br /&gt;
*[[Fichier de débogage RSM|Fichier de débogage RSM]]&lt;br /&gt;
*[[Fichier de débogage TDS|Fichier de débogage TDS]]&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-LE&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Chemin de recherche&lt;br /&gt;
|&lt;br /&gt;
Spécifie l&amp;#039;emplacement de vos fichiers source. Seuls les fichiers qui se trouvent sur le chemin de recherche du compilateur ou sur le chemin de recherche des bibliothèques sont inclus dans la construction. Si vous essayez de construire votre projet avec un fichier absent du chemin de recherche, vous recevrez une erreur de compilation. Vous devez inclure le chemin de recherche complet.&lt;br /&gt;
Séparez plusieurs noms de répertoires en les séparant par un point-virgule. Les espaces avant ou après le point-virgule sont autorisés mais pas nécessaires. Les chemins relatifs et absolus sont autorisés, notamment les chemins relatifs à la position en cours.&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-U&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Afficher les messages généraux&lt;br /&gt;
|&lt;br /&gt;
Définissez cette option to {{Code|True}} afin d&amp;#039;afficher les messages d&amp;#039;information du compilateur dans l&amp;#039;onglet de sortie [[Vue Messages|Vue Messages]].&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Chemin racine de bibliothèque système&lt;br /&gt;
|&lt;br /&gt;
Spécifie les chemins racine dans lesquels le compilateur recherche les bibliothèques système.&lt;br /&gt;
Séparez les alias par un point-virgule.&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;‑‑syslibroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
Périphérique iOS&amp;amp;nbsp; (64 bits)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Alias d&amp;#039;unités&lt;br /&gt;
|&lt;br /&gt;
Utile pour la compatibilité ascendante. Spécifiez les noms d&amp;#039;alias pour les unités dont le nom a été modifié ou qui ont été fusionnées au sein d&amp;#039;une unité unique. Le format est&lt;br /&gt;
 &amp;amp;lt;oldunit&amp;amp;gt;=&amp;amp;lt;newunit&amp;amp;gt;&lt;br /&gt;
Par exemple :&lt;br /&gt;
 Forms=Xforms&lt;br /&gt;
Séparez les alias par un point-virgule. La valeur par défaut pour {{Delphi}} est &amp;lt;code&amp;gt;WinTypes=Windows;WinProcs=Windows.Default&amp;lt;/code&amp;gt;. Le bouton popup [[Image:ProjectOptionsEllipsis.jpg|Points de suspension]] ouvre une [[Boîte de dialogue liste-ordonnée|boîte de dialogue &amp;lt;liste-ordonnée&amp;gt;]] pour la sélection et l&amp;#039;ajout de répertoires, comme décrit dans [[Eléments communs des pages Options de projet|Eléments communs des pages Options de projet]].&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Répertoire de sortie des unités&lt;br /&gt;
|&lt;br /&gt;
Spécifie un répertoire distinct pour contenir les [[Fichier unité compilé Delphi (*.dcu)|unités compilées]] ({{Path|.dcu}}). Cliquez sur [[Image:ProjectOptionsEllipsis.jpg|Points de suspension]] pour ouvrir la boîte de dialogue &amp;#039;&amp;#039;&amp;#039;Rechercher un dossier&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-NU&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Noms de portées d&amp;#039;unités&lt;br /&gt;
|&lt;br /&gt;
Spécifie les [[Noms de portées d&amp;#039;unités|noms de portées d&amp;#039;unités]] (préfixes) pour les espaces de nommage {{Delphi}} à points, afin de vous permettre d&amp;#039;utiliser partiellement les noms qualifiés dans votre code, et dans votre clause &amp;lt;code&amp;gt;uses&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;#include&amp;lt;/code&amp;gt;.&lt;br /&gt;
Il existe deux façons d&amp;#039;ajouter un nom de portée d&amp;#039;unité pour une unité {{Delphi}} :&lt;br /&gt;
*Spécifiez le nom de portée d&amp;#039;unité complet dans votre clause &amp;lt;code&amp;gt;uses&amp;lt;/code&amp;gt;. Par exemple :&lt;br /&gt;
**&amp;lt;code&amp;gt; uses FMX.Graphics;&amp;lt;/code&amp;gt;   ({{Delphi}})&lt;br /&gt;
*Ajoutez le nom de portée d&amp;#039;unité (&amp;lt;code&amp;gt;FMX&amp;lt;/code&amp;gt;) au champ &amp;#039;&amp;#039;&amp;#039;Noms de portées d&amp;#039;unités&amp;#039;&amp;#039;&amp;#039;. Le nom de portée d&amp;#039;unité &amp;lt;code&amp;gt;FMX&amp;lt;/code&amp;gt; est alors appliqué automatiquement aux noms d&amp;#039;unités qui appartiennent à cette portée d&amp;#039;unité, et vous pouvez simplement spécifier :&lt;br /&gt;
**&amp;lt;code&amp;gt;uses Graphics;&amp;lt;/code&amp;gt;  ({{Delphi}})&lt;br /&gt;
&lt;br /&gt;
Le bouton popup [[Image:ProjectOptionsEllipsis.jpg|Points de suspension]] ouvre une [[Boîte de dialogue liste-ordonnée|boîte de dialogue &amp;lt;liste-ordonnée&amp;gt;]] pour la sélection et l&amp;#039;ajout de noms de portée d&amp;#039;unité, comme décrit dans [[Eléments communs des pages Options de projet|Eléments communs des pages Options de projet]] et [[Boîte de dialogue liste-ordonnée|Boîte de dialogue liste ordonnée]].&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-NS&amp;lt;/code&amp;gt;|&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; {{fr|radstudio}}&lt;br /&gt;
|&lt;br /&gt;
Utiliser MSBuild de façon externe pour compiler&lt;br /&gt;
|&lt;br /&gt;
Si cette option est activée, votre projet est construit à l&amp;#039;extérieur de l&amp;#039;EDI en utilisant [[MSBuild|MSBuild]].&lt;br /&gt;
Vous pouvez utiliser cette option si {{Product}} [[F2046 Mémoire insuffisante (Delphi)|est à cours de mémoire lorsque vous construisez votre groupe de projet]].&lt;br /&gt;
Vous devez :&lt;br /&gt;
*Enregistrer votre projet avant de tenter d&amp;#039;effectuer une construction lorsque vous utilisez cette option.&lt;br /&gt;
*Activez l&amp;#039;option &amp;#039;&amp;#039;&amp;#039;Symboles de débogage distant&amp;#039;&amp;#039;&amp;#039; sur la page [[Liaison (Delphi)|Liaison]] si vous voulez utiliser le débogueur intégré avec votre projet MSBuild.&lt;br /&gt;
&lt;br /&gt;
Valeur par défaut = False&lt;br /&gt;
{{Note|Utilisez cette option pour empêcher les problèmes qui surviennent lorsque la ligne de commande vers DCC32 dépasse 3200 octets. Lorsque cette option est activée, le script MSBuild génère automatiquement un fichier de réponse &amp;lt;code&amp;gt;&amp;amp;lt;votre projet&amp;amp;gt;.cmds&amp;lt;/code&amp;gt; qui est transmis à DCC32.}}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Architecture d&amp;#039;outil préférée&lt;br /&gt;
|&lt;br /&gt;
Lorsque vous compilez avec MSBuild, spécifiez la version de vos outils préférés à utiliser.&lt;br /&gt;
Utilisez la propriété {{code|DCC_PreferredToolArchitecture}} pour contrôler quelle architecture binaire doit être utilisée pour les compilateurs Delphi.&lt;br /&gt;
Pour bin\DCC32 ou bin\DCC64, utilisez :&lt;br /&gt;
 /p:DCC_PreferredToolArchitecture=x32&lt;br /&gt;
Et pour bin64\DCC32 ou bin64\DCC64, utilisez :&lt;br /&gt;
 /p:DCC_PreferredToolArchitecture=x64&lt;br /&gt;
L&amp;#039;utilisation des outils 64 bits permet de bénéficier d&amp;#039;un plus grand espace mémoire pour le compilateur. &lt;br /&gt;
{{Note|L&amp;#039;option d&amp;#039;architecture des outils 64 bits est uniquement disponible pour les plates-formes suivantes :&lt;br /&gt;
*Compilateurs cibles Delphi Windows 32 bits&lt;br /&gt;
*Compilateurs cibles Delphi Windows 64 bits}}&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conseils==&lt;br /&gt;
&lt;br /&gt;
*Pour afficher les options du compilateur dans la fenêtre &amp;#039;&amp;#039;&amp;#039;Messages&amp;#039;&amp;#039;&amp;#039; quand vous compilez un projet, choisissez &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt; &amp;#039;&amp;#039;&amp;#039;Outils &amp;amp;gt; Options &amp;amp;gt; Options d&amp;#039;environnement&amp;#039;&amp;#039;&amp;#039; &amp;lt;/font&amp;gt; et sélectionnez &amp;#039;&amp;#039;&amp;#039;Afficher la ligne de commande&amp;#039;&amp;#039;&amp;#039;. Lors de la prochaine compilation d&amp;#039;un projet, la commande utilisée pour compiler le projet et le fichier de réponse seront tous deux affichés dans la fenêtre &amp;#039;&amp;#039;&amp;#039;Messages&amp;#039;&amp;#039;&amp;#039;. Le fichier de réponse liste les options du compilateur et les fichiers à compiler.&amp;lt;br /&amp;gt;&lt;br /&gt;
*Pour afficher plusieurs valeurs dans une zone d&amp;#039;édition, séparez-les par un point-virgule. Vous pouvez aussi cliquer sur le bouton points de suspension placé à côté de chaque zone d&amp;#039;édition pour ajouter plusieurs valeurs par l&amp;#039;intermédiaire d&amp;#039;une boîte de dialogue appropriée.&amp;lt;br /&amp;gt;&lt;br /&gt;
*Pour spécifier des [[Variables d&amp;#039;environnement|variables d&amp;#039;environnement]] du système d&amp;#039;exploitation ou des variables d&amp;#039;environnement définies dans l&amp;#039;EDI dans une zone d&amp;#039;édition, utilisez la syntaxe suivante : &amp;lt;code&amp;gt;$(NomVariable)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*:Par exemple, la variable &amp;#039;&amp;#039;&amp;#039;$(Config)&amp;#039;&amp;#039;&amp;#039; est résolue sur la configuration spécifique qui est définie dans le [[Options de la cible|champ Cible]] de la page Options de projet spécifique où &amp;#039;&amp;#039;&amp;#039;$(Config)&amp;#039;&amp;#039;&amp;#039; est spécifiée. Si vous spécifiez $(Config) dans un chemin, puis construisez avec une configuration &amp;#039;&amp;#039;&amp;#039;Débogage&amp;#039;&amp;#039;&amp;#039; en tant que &amp;#039;&amp;#039;&amp;#039;cible&amp;#039;&amp;#039;&amp;#039;, $(Config) inclut seulement le répertoire &amp;#039;&amp;#039;&amp;#039;Débogage&amp;#039;&amp;#039;&amp;#039; et des éléments existant seulement dans le répertoire &amp;#039;&amp;#039;&amp;#039;Release&amp;#039;&amp;#039;&amp;#039; peuvent être absents de la construction.&lt;br /&gt;
&lt;br /&gt;
==Pages enfant==&lt;br /&gt;
&lt;br /&gt;
*[[Compilation|Compilation]]&lt;br /&gt;
*[[Conseils et avertissements|Conseils et avertissements]]&lt;br /&gt;
*[[Liaison (Delphi)|Liaison]]&lt;br /&gt;
*[[Sortie - C/C++|Sortie - C/C++]]&lt;br /&gt;
*[[Prise en charge de l&amp;#039;assembleur intégré pour AVX2 et AVX-512|Prise en charge de l&amp;#039;assembleur intégré pour AVX2 et AVX-512]]&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[DCC32.EXE, le compilateur en ligne de commande Delphi|DCC32.EXE, le compilateur en ligne de commande Delphi]]&lt;br /&gt;
*[[DCC64.EXE, le compilateur en ligne de commande Delphi 64 bits|DCC64.EXE, le compilateur en ligne de commande Delphi 64 bits]]&lt;br /&gt;
*[[DCCOSX64.EXE, le compilateur Delphi pour macOS 64 bits|DCCOSX64.EXE, le compilateur Delphi pour macOS 64 bits]]&lt;br /&gt;
*[[DCCAARM.EXE, le compilateur Delphi pour Android|DCCAARM.EXE, le compilateur Delphi pour Android]]&lt;br /&gt;
*[[DCCAARM64.EXE, le compilateur Delphi pour Android 64 bits|DCCAARM.EXE, le compilateur Delphi pour Android 64 bits]]&lt;br /&gt;
*[[DCCIOSARM64.EXE, le compilateur Delphi pour le périphérique iOS 64 bits|DCCIOSARM64.EXE, le compilateur Delphi pour le périphérique iOS 64 bits]]&lt;br /&gt;
*[[DCCLINUX64.EXE, le compilateur Delphi pour Linux|DCCLINUX64.EXE, le compilateur Delphi pour Linux]]&lt;br /&gt;
*[[Compilation, construction et exécution d&amp;#039;applications|Compilation, construction et exécution d&amp;#039;applications]]&lt;br /&gt;
*[[Création et modification de configurations de construction|Création et modification de configurations de construction]]  &lt;br /&gt;
*[[Compilation et construction des applications multi-périphériques|Compilation et construction des applications multi-périphériques]]&lt;br /&gt;
*[[Ajout de noms de portées d&amp;#039;unités pour vos propres composants|Ajout de noms de portées d&amp;#039;unités pour vos propres composants]]&lt;br /&gt;
*[[Bibliothèque|Bibliothèque]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Référence RAD Studio]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:07 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Compilateur_Delphi</comments>
		</item>
		<item>
			<title>Raccourcis clavier par défaut</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Raccourcis_clavier_par_d%C3%A9faut&amp;diff=223463&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Raccourcis_clavier_par_d%C3%A9faut&amp;diff=223463&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Raccourcis_clavier_par_d%C3%A9faut&quot; title=&quot;Raccourcis clavier par défaut&quot;&gt;Raccourcis clavier par défaut&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;a href=&quot;https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Raccourcis_clavier_par_d%C3%A9faut&amp;amp;diff=223463&quot;&gt;Voir les modifications&lt;/a&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:07 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Raccourcis_clavier_par_d%C3%A9faut</comments>
		</item>
		<item>
			<title>DCCLINUX64.EXE, le compilateur Delphi pour Linux</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=DCCLINUX64.EXE,_le_compilateur_Delphi_pour_Linux&amp;diff=223461&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=DCCLINUX64.EXE,_le_compilateur_Delphi_pour_Linux&amp;diff=223461&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/DCCLINUX64.EXE,_le_compilateur_Delphi_pour_Linux&quot; title=&quot;DCCLINUX64.EXE, le compilateur Delphi pour Linux&quot;&gt;DCCLINUX64.EXE, le compilateur Delphi pour Linux&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Interfaces de ligne de commande des compilateurs Delphi basés sur LLVM}}&lt;br /&gt;
{{DISPLAYTITLE: DCCLINUX64.EXE, le compilateur Delphi pour Linux 64 bits Intel}}&amp;lt;code&amp;gt;DCCLINUX64.EXE&amp;lt;/code&amp;gt; est l&amp;#039;interface de ligne de commande de [[DCCLINUX64|DCCLINUX64]], le compilateur Delphi pour Linux 64 bits Intel.&lt;br /&gt;
&lt;br /&gt;
Voir &amp;#039;&amp;#039;&amp;#039;[[Interfaces de ligne de commande des compilateurs Delphi basés sur LLVM|Interfaces de ligne de commande des compilateurs {{Delphi}} basés sur LLVM]]&amp;#039;&amp;#039;&amp;#039; pour savoir ce que l&amp;#039;interface de ligne de commande {{Path|DCCLINUX64}} a en commun avec les autres interfaces de ligne de commande des compilateurs {{Delphi}} basés sur LLVM.&lt;br /&gt;
&lt;br /&gt;
{{Note|La fonctionnalité des binaires 64 bits est limitée aux versions supérieures. Elle est disponible dans les éditions Enterprise et Architect, mais pas dans les éditions Professional ou CE.}}&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[DCCLINUX64|DCCLINUX64]]&lt;br /&gt;
*[[DCCAARM|DCCAARM]]&lt;br /&gt;
*[[Développement d&amp;#039;applications mobiles Android|Développement d&amp;#039;applications mobiles Android]]&lt;br /&gt;
*[[Périphériques Android pris en charge pour le développement d&amp;#039;applications|Périphériques Android pris en charge pour le développement d&amp;#039;applications]]&lt;br /&gt;
*[[Migration du code Delphi en mobile depuis le bureau|Migration du code Delphi en mobile depuis le bureau]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:07 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:DCCLINUX64.EXE,_le_compilateur_Delphi_pour_Linux</comments>
		</item>
		<item>
			<title>Documentation des API personnalisées</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Documentation_des_API_personnalis%C3%A9es&amp;diff=223459&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Documentation_des_API_personnalis%C3%A9es&amp;diff=223459&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Documentation_des_API_personnalis%C3%A9es&quot; title=&quot;Documentation des API personnalisées&quot;&gt;Documentation des API personnalisées&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Extension du moteur RAD Server}}&lt;br /&gt;
&lt;br /&gt;
{{Product}} vous permet de créer une documentation API pour de nouveaux modules de ressources RAD Server aux formats YAML et JSON. La nouvelle implémentation est basée sur la spécification de [http://swagger-api.github.io/swagger-core/spec.html documentation API Swagger RESTful].&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;EMS.ResourceType&amp;#039;&amp;#039;&amp;#039; implémente les nouveaux attributs pouvant être utilisés pour générer la documentation API des points de terminaison d&amp;#039;une ressource.&lt;br /&gt;
&lt;br /&gt;
==EndPointRequestSummary==&lt;br /&gt;
&lt;br /&gt;
Description d&amp;#039;une méthode :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
[EndPointRequestSummary(&amp;#039;ATags&amp;#039;, &amp;#039;ASummary&amp;#039;, &amp;#039;ADescription&amp;#039;, &amp;#039;AProduces&amp;#039;, &amp;#039;AConsume&amp;#039;)]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tags&amp;#039;&amp;#039;&amp;#039; : définit une balise.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Summary&amp;#039;&amp;#039;&amp;#039; : titre d&amp;#039;une méthode.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039; : description d&amp;#039;une méthode.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Produces&amp;#039;&amp;#039;&amp;#039; : type MIME que l&amp;#039;API peut produire. Global pour toutes les API, mais peut être redéfini sur des appels d&amp;#039;API spécifiques. La valeur doit être décrite sous Mime Types.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Consume&amp;#039;&amp;#039;&amp;#039; : type MIME que l&amp;#039;API peut consommer. Global pour toutes les API, mais peut être redéfini sur des appels d&amp;#039;API spécifiques. La valeur doit être décrite sous Mime Types.&lt;br /&gt;
&lt;br /&gt;
Exemple de déclaration de la description de la méthode GET d&amp;#039;un point de terminaison :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
[EndPointRequestSummary(&amp;#039;Api Doc&amp;#039;, &amp;#039;Get API EndPoints&amp;#039;, &amp;#039;Used to retrieve all the API EndPoints&amp;#039;, &amp;#039;application/json&amp;#039;, &amp;#039;&amp;#039;)]&lt;br /&gt;
procedure Get(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EndPointRequestParameter==&lt;br /&gt;
&lt;br /&gt;
Description des paramètres utilisés dans une requête.&lt;br /&gt;
&lt;br /&gt;
Un paramètre unique est défini par la combinaison d&amp;#039;un nom et d&amp;#039;un emplacement.&lt;br /&gt;
&lt;br /&gt;
Il existe cinq types de paramètres possibles : Path, Query, Header, Body et Form.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
[EndPointRequestParameter(&amp;#039;AIn&amp;#039;, &amp;#039;AName&amp;#039;, &amp;#039;ADescription&amp;#039;, &amp;#039;ARequired&amp;#039;, &amp;#039;AType&amp;#039;, &amp;#039;AFormat&amp;#039;, &amp;#039;AItemType&amp;#039;, &amp;#039;AJSONSchema&amp;#039;, &amp;#039;AReference&amp;#039;)]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ParamIn&amp;#039;&amp;#039;&amp;#039; : l&amp;#039;emplacement du paramètre : Path, Query, Header, Body ou Form.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; : le nom du paramètre. Les noms de paramètres sont sensibles à la casse.&lt;br /&gt;
**Quand l&amp;#039;emplacement du paramètre est &amp;#039;Body&amp;#039;, son nom doit être &amp;#039;body&amp;#039;.&lt;br /&gt;
**Quand l&amp;#039;emplacement du paramètre est &amp;#039;Path&amp;#039;, son nom doit correspondre au segment de chemin d&amp;#039;accès associé depuis le champ chemin dans l&amp;#039;objet Paths.&lt;br /&gt;
**Dans les autres cas, son nom correspond à ParamIn.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039; : brève description du paramètre. Elle peut contenir des exemples d&amp;#039;utilisation. Vous pouvez utiliser la syntaxe GFM pour une représentation de texte formaté.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Required&amp;#039;&amp;#039;&amp;#039; : détermine si le paramètre est obligatoire. Si le paramètre est dans &amp;#039;Path&amp;#039;, cette propriété est requise et sa valeur doit être &amp;#039;&amp;#039;&amp;#039;True&amp;#039;&amp;#039;&amp;#039;, sinon la propriété peut être incluse et sa valeur par défaut est &amp;#039;&amp;#039;&amp;#039;False&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ParamType&amp;#039;&amp;#039;&amp;#039; : le type du paramètre. Pour des valeurs autres que &amp;#039;Body&amp;#039;, la valeur doit être l&amp;#039;une des valeurs suivantes : &amp;#039;spArray&amp;#039;, &amp;#039;spBoolean&amp;#039;, &amp;#039;spInteger&amp;#039;, &amp;#039;spNumber&amp;#039;, &amp;#039;spNull&amp;#039;, &amp;#039;spObject&amp;#039;, &amp;#039;spString&amp;#039;, &amp;#039;spFile&amp;#039;. Si ParamType vaut &amp;#039;spFile&amp;#039;, le type MIME consommé doit être soit &amp;quot;multipart/form-data&amp;quot;, soit &amp;quot;application/x-www-form-urlencoded&amp;quot; et le paramètre doit être de &amp;quot;form-data&amp;quot;. Pour la valeur &amp;#039;Body&amp;#039;, JSONSchema et Reference sont requis.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ItemFormat&amp;#039;&amp;#039;&amp;#039; : le format d&amp;#039;extension pour le ParamType : &amp;#039;None&amp;#039;, &amp;#039;Int32&amp;#039;, &amp;#039;Int64&amp;#039;, &amp;#039;Float&amp;#039;, &amp;#039;Double&amp;#039;, &amp;#039;Byte&amp;#039;, &amp;#039;Date&amp;#039;, &amp;#039;DateTime&amp;#039;, &amp;#039;Password&amp;#039;.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ItemType&amp;#039;&amp;#039;&amp;#039; : requis si ParamType a la valeur &amp;#039;array&amp;#039;. Décrit le type des éléments dans le tableau.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;JSONSchema&amp;#039;&amp;#039;&amp;#039; : la définition de schéma de la primitive envoyée au serveur. Il s&amp;#039;agit d&amp;#039;une définition de la structure de la requête du corps. Si ParamType vaut &amp;#039;Array&amp;#039; ou &amp;#039;Object&amp;#039;, un schéma peut être défini.&lt;br /&gt;
**Par exemple :&lt;br /&gt;
**:&amp;lt;nowiki&amp;gt;Au format JSON : {&amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;,&amp;quot;additionalProperties&amp;quot;: {&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
**:Au format YAML :&lt;br /&gt;
**::type: object&lt;br /&gt;
**::additionalProperties:&lt;br /&gt;
**::type: string&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Reference&amp;#039;&amp;#039;&amp;#039; : La définition de schéma de la primitive envoyée au serveur. Il s&amp;#039;agit d&amp;#039;une définition de la structure de la requête du corps. Si Type vaut &amp;#039;Array&amp;#039; ou &amp;#039;Object&amp;#039;, un schéma peut être défini.&lt;br /&gt;
**Par exemple :&lt;br /&gt;
**:&amp;#039;#/definitions/pet&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
[EndPointRequestParameter(TAPIDocParameter.TParameterIn.Path, &amp;#039;item&amp;#039;, &amp;#039;Path Parameter item Description&amp;#039;, true, TAPIDoc.TPrimitiveType.spString, TAPIDoc.TPrimitiveFormat.None, TAPIDoc.TPrimitiveType.spString, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;)]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EndPointResponseDetails==&lt;br /&gt;
&lt;br /&gt;
Description des réponses à la requête :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
[EndPointResponseDetails(&amp;#039;ACode&amp;#039;, &amp;#039;ADescription&amp;#039;, &amp;#039;AType&amp;#039;, &amp;#039;AFormat&amp;#039;, &amp;#039;ASchema&amp;#039;, &amp;#039;AReference&amp;#039;)]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Code&amp;#039;&amp;#039;&amp;#039; : le code de réponse.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039; : description du code de réponse.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PrimitiveType&amp;#039;&amp;#039;&amp;#039; : le type de la [http://swagger-api.github.io/swagger-core/spec.html#4-3-1-primitives Primitive] renvoyée. Les types de données primitifs compris dans la spécification Swagger sont basés sur les types pris en charge par le JSON-Schema Draft 4. JSON Schema définit sept types primitifs pour des valeurs JSON : &amp;#039;spArray&amp;#039;, &amp;#039;spBoolean&amp;#039;, &amp;#039;spInteger&amp;#039;, &amp;#039;spNumber&amp;#039;, &amp;#039;spNull&amp;#039;, &amp;#039;spObject&amp;#039;, &amp;#039;spString&amp;#039;. Voir [https://json-schema.org/draft/2020-12/json-schema-core JSON Schema primitive types (EN)]. Un type de données primitif supplémentaire, &amp;#039;spFile&amp;#039;, est utilisé par Parameter Object et Response Object pour définir le type de paramètre ou la réponse comme étant un fichier.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;PrimitiveFormat&amp;#039;&amp;#039;&amp;#039; : le format de la primitive renvoyée, par exemple : &amp;#039;None&amp;#039;, &amp;#039;Int32&amp;#039;, &amp;#039;Int64&amp;#039;, &amp;#039;Float&amp;#039;, &amp;#039;Double&amp;#039;, &amp;#039;Byte&amp;#039;, &amp;#039;Date&amp;#039;, &amp;#039;DateTime&amp;#039;, &amp;#039;Password&amp;#039;.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Schema&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
**Par exemple :&lt;br /&gt;
**:&amp;lt;nowiki&amp;gt;Au format JSON : {&amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;,&amp;quot;additionalProperties&amp;quot;: {&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
**:Au format YAML :&lt;br /&gt;
**::type: object&lt;br /&gt;
**::additionalProperties:&lt;br /&gt;
**::type: string&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Reference :&amp;#039;&amp;#039;&amp;#039; la définition de schéma de la primitive renvoyée. Il s&amp;#039;agit d&amp;#039;une définition de la structure de la réponse. Si PrimitiveType vaut &amp;#039;spArray&amp;#039; ou &amp;#039;spObject&amp;#039;, une définition de schéma peut être définie.&lt;br /&gt;
**Par exemple :&lt;br /&gt;
**:&amp;#039;#/definitions/pet&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
[EndPointResponseDetails(200, &amp;#039;Ok&amp;#039;, TAPIDoc.TPrimitiveType.spObject, TAPIDoc.TPrimitiveFormat.None, &amp;#039;&amp;#039;, &amp;#039;#/definitions/EmployeeTable&amp;#039;)]&lt;br /&gt;
[EndPointResponseDetails(404, &amp;#039;Not Found&amp;#039;, TAPIDoc.TPrimitiveType.spNull, TAPIDoc.TPrimitiveFormat.None, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;)]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EndPointObjectsYAMLDefinitions==&lt;br /&gt;
&lt;br /&gt;
Définition des objets pour la version YAML de l&amp;#039;API.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
  [EndPointObjectsYAMLDefinitions(Objects)]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Objects : définitions d&amp;#039;objets YAML.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
  [ResourceName(&amp;#039;SampleAttributes&amp;#039;)]&lt;br /&gt;
  [EndPointObjectsYAMLDefinitions(cYamlDefinitions)] &lt;br /&gt;
&lt;br /&gt;
// YAML Object definition: &lt;br /&gt;
   cYamlDefinitions = &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   #&lt;br /&gt;
    PutObject:&lt;br /&gt;
      properties:&lt;br /&gt;
       EMP_NO:&lt;br /&gt;
        type: integer&lt;br /&gt;
       FIRST_NAME:&lt;br /&gt;
        type: string&lt;br /&gt;
       LAST_NAME:&lt;br /&gt;
        type: string&lt;br /&gt;
       PHONE_EXT:&lt;br /&gt;
        type: string&lt;br /&gt;
       HIRE_DATE:&lt;br /&gt;
        type: string&lt;br /&gt;
        format: date-time&lt;br /&gt;
       DEPT_NO:&lt;br /&gt;
        type: string&lt;br /&gt;
       JOB_CODE:&lt;br /&gt;
        type: string&lt;br /&gt;
       JOB_GRADE:&lt;br /&gt;
        type: integer&lt;br /&gt;
       JOB_COUNTRY:&lt;br /&gt;
        type: string&lt;br /&gt;
       SALARY:&lt;br /&gt;
        type: integer&lt;br /&gt;
       FULL_NAME:&lt;br /&gt;
        type: string&lt;br /&gt;
   # &lt;br /&gt;
   ...&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|Si la définition YAML est omise et que la définition JSON est fournie, la définition JSON sera automatiquement convertie au format YAML.}}&lt;br /&gt;
&lt;br /&gt;
==EndPointObjectsJSONDefinitions==&lt;br /&gt;
&lt;br /&gt;
Définition des objets pour la version JSON de l&amp;#039;API.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
    [EndPointObjectsJSONDefinitions(Objects)]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Objects : définitions d&amp;#039;objets JSON.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
  [ResourceName(&amp;#039;SampleAttributes&amp;#039;)]&lt;br /&gt;
  [EndPointObjectsJSONDefinitions(cJSONDefinitions)]&lt;br /&gt;
&lt;br /&gt;
// JSON Object definition:&lt;br /&gt;
&lt;br /&gt;
cJSONDefinitions = &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  {&lt;br /&gt;
     &amp;quot;PutObject&amp;quot;: {&lt;br /&gt;
         &amp;quot;properties&amp;quot;: {&lt;br /&gt;
             &amp;quot;EMP_NO&amp;quot;: {&lt;br /&gt;
                 &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;FIRST_NAME&amp;quot;: {&lt;br /&gt;
                 &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;LAST_NAME&amp;quot;: {&lt;br /&gt;
                 &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;PHONE_EXT&amp;quot;: {&lt;br /&gt;
                 &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;HIRE_DATE&amp;quot;: {&lt;br /&gt;
                 &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
                 &amp;quot;format&amp;quot;: &amp;quot;date-time&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;DEPT_NO&amp;quot;: {&lt;br /&gt;
                 &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;JOB_CODE&amp;quot;: {&lt;br /&gt;
                 &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;JOB_GRADE&amp;quot;: {&lt;br /&gt;
                 &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
              &amp;quot;JOB_COUNTRY&amp;quot;: {&lt;br /&gt;
                  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;SALARY&amp;quot;: {&lt;br /&gt;
                  &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;FULL_NAME&amp;quot;: {&lt;br /&gt;
                  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;&amp;lt;/source&amp;gt;{{Note|Si la définition JSON est omise et que la définition YAML est fournie, la définition YAML sera automatiquement convertie au format JSON.}}&lt;br /&gt;
&lt;br /&gt;
==Rubriques==&lt;br /&gt;
&lt;br /&gt;
* [[Création d&amp;#039;un package RAD Server|Création d&amp;#039;un package RAD Server]]&lt;br /&gt;
* [[Ajout d&amp;#039;un module RAD Server à un package RAD Server|Ajout d&amp;#039;un module RAD Server à un package RAD Server]]&lt;br /&gt;
* [[Installation d&amp;#039;un package RAD Server|Installation d&amp;#039;un package RAD Server]]&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[samp_en:EMS.APIDocAttributes Sample|Exemple API Documentation Attributes]]&lt;br /&gt;
* [[Ressources API de RAD Server|Ressources API de RAD Server]]&lt;br /&gt;
*[http://swagger-api.github.io/swagger-core/spec.html Swagger RESTful API Documentation Specification (EN)]&lt;br /&gt;
* [[Moteur RAD Server (Serveur EMS)|Moteur RAD Server (serveur EMS)]]&lt;br /&gt;
* [[Console de RAD Server|Console RAD Server]]&lt;br /&gt;
* [[Application client de RAD Server|Application client RAD Server]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Berlin]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:07 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Documentation_des_API_personnalis%C3%A9es</comments>
		</item>
		<item>
			<title>Configuration d&#039;Ollama pour l&#039;audit de code intelligent</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Configuration_d%27Ollama_pour_l%27audit_de_code_intelligent&amp;diff=223457&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Configuration_d%27Ollama_pour_l%27audit_de_code_intelligent&amp;diff=223457&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Configuration_d%27Ollama_pour_l%27audit_de_code_intelligent&quot; title=&quot;Configuration d&amp;#039;Ollama pour l&amp;#039;audit de code intelligent&quot;&gt;Configuration d&amp;#039;Ollama pour l&amp;#039;audit de code intelligent&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Audit de code intelligent}}&lt;br /&gt;
&lt;br /&gt;
{{Product}} prévoit de fournir dans les prochaines versions une ou plusieurs images Docker préconfigurées d&amp;#039;Ollama avec CodeLlama afin de faciliter la configuration et l&amp;#039;intégration. En attendant, vous pouvez suivre les [https://ollama.com/ étapes recommandées].&lt;br /&gt;
&lt;br /&gt;
{{Note| Une image Docker Ollama peut être installée sur un serveur Linux dédié et le sous-système Windows Linux (WLS). Pour simplifier la configuration, vous pouvez envisager d&amp;#039;utiliser Docker Desktop. Cet outil est gratuit sous réserve de l&amp;#039;acceptation du contrat de licence du produit. Les grandes entreprises doivent payer une licence. Pour plus d&amp;#039;informations, consultez [https://www.docker.com/products/docker-desktop/ cette page].}}&lt;br /&gt;
&lt;br /&gt;
{{Note| Pour les images Nvidia-GPU ou AMD-GPU, consultez les instructions [https://hub.docker.com/r/ollama/ollama de cette page].}}&lt;br /&gt;
&lt;br /&gt;
Vous trouverez ci-dessous un guide simplifié pour installer, exécuter et utiliser Ollama. Veuillez suivre les étapes ci-dessous.&lt;br /&gt;
&lt;br /&gt;
==Vérification de votre installation Docker==&lt;br /&gt;
&lt;br /&gt;
Vérifiez que Docker est bien installé comme indiqué ci-dessous.&lt;br /&gt;
&lt;br /&gt;
===Docker Desktop sur Windows===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt; Vérifiez que Docker Desktop est bien installé en lançant une recherche depuis le &amp;#039;&amp;#039;&amp;#039;menu Démarrer&amp;#039;&amp;#039;&amp;#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Vérifiez l&amp;#039;état du Docker Engine en l&amp;#039;ouvrant.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Vérifiez &amp;#039;&amp;#039;&amp;#039;Docker Desktop Engine&amp;#039;&amp;#039;&amp;#039; en utilisant la commande PowerShell suivante :&amp;lt;source&amp;gt;docker --version&amp;lt;/source&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Docker sur WSL2===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt; Ouvrez un terminal WSL2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Exécutez la commande suivante.&amp;lt;source&amp;gt;docker --version&amp;lt;/source&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Vérifiez l&amp;#039;état du Docker Engine en exécutant :&amp;lt;source&amp;gt;sudo service docker status&amp;lt;/source&amp;gt;{{Attention|Les données en sortie doivent indiquer que Docker est actif (en cours d&amp;#039;exécution).}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si Docker n&amp;#039;est pas exécuté, vous pouvez le démarrer en exécutant la commande suivante :&amp;lt;source&amp;gt;sudo service docker start&amp;lt;/source&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exécution et utilisation d&amp;#039;Ollama==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;[[Configuration d&amp;#039;Ollama pour l&amp;#039;audit de code intelligent#Vérification de votre installation Docker|Vérifiez que Docker est bien installé]] et que le Docker Engine est exécuté.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ouvrez PowerShell ou CMD et exécutez la commande suivante&amp;lt;source&amp;gt;docker login&amp;lt;/source&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connectez-vous avec le nom d&amp;#039;utilisateur et le mot de passe de votre Docker Hub.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Installez et exécutez l&amp;#039;image Embarcadero :&amp;lt;source&amp;gt;docker run --name Embarcadero_Codellama -p 11434:11434 radstudio/codellama:latest&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|Veuillez prendre en compte les informations suivantes lors des étapes ci-dessous :&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;-name&amp;lt;/code&amp;gt; est incorrect, mais &amp;lt;code&amp;gt;--name&amp;lt;/code&amp;gt; est correct (vous devez saisir les deux traits).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Vous pouvez [https://docs.docker.com/reference/cli/docker/container/rename/ renommer le conteneur], mais si vous changez &amp;#039;Embarcadero_Codellama&amp;#039;, vous devez reporter la modification dans les autres commandes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Vous pouvez utiliser n&amp;#039;importe quel autre numéro de port en respectant le format &amp;#039;&amp;#039;&amp;#039;‘-p 12345:54321’&amp;#039;&amp;#039;&amp;#039;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;#039;&amp;#039;&amp;#039;Chiffre de gauche (12345)&amp;#039;&amp;#039;&amp;#039; : c&amp;#039;est le port de l&amp;#039;hôte. Il correspond au port de votre machine locale (la machine sur laquelle Docker est exécutée) que vous souhaitez lier au conteneur.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;#039;&amp;#039;&amp;#039;Chiffre de droite (54321)&amp;#039;&amp;#039;&amp;#039; : c&amp;#039;est le port du conteneur. Il correspond au port à l&amp;#039;intérieur du conteneur Docker que votre application utilise pour écouter. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Testez Ollama en utilisant la ligne de commande (étape facultative)&amp;lt;source&amp;gt;docker exec -it Embarcadero_Codellama ollama run codellama&amp;lt;/source&amp;gt;&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;Posez une question et vérifiez la réponse.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Quittez le mode Chat avec Ctrl + D ou /bye.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Vous pouvez maintenant fermer la ligne de commande&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Depuis la page Options de l&amp;#039;EDI, utilisez les informations de connexion suivantes :&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;#039;&amp;#039;&amp;#039;URL&amp;#039;&amp;#039;&amp;#039;: [http://localhost:11434/api/generate http://localhost:11434/api/generate]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;#039;&amp;#039;&amp;#039;Model&amp;#039;&amp;#039;&amp;#039; : codellama&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:04 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Configuration_d%27Ollama_pour_l%27audit_de_code_intelligent</comments>
		</item>
		<item>
			<title>Interfaces de ligne de commande des compilateurs C++ améliorés par Clang</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Interfaces_de_ligne_de_commande_des_compilateurs_C%2B%2B_am%C3%A9lior%C3%A9s_par_Clang&amp;diff=223455&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Interfaces_de_ligne_de_commande_des_compilateurs_C%2B%2B_am%C3%A9lior%C3%A9s_par_Clang&amp;diff=223455&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Interfaces_de_ligne_de_commande_des_compilateurs_C%2B%2B_am%C3%A9lior%C3%A9s_par_Clang&quot; title=&quot;Interfaces de ligne de commande des compilateurs C++ améliorés par Clang&quot;&gt;Interfaces de ligne de commande des compilateurs C++ améliorés par Clang&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Interfaces de ligne de commande des compilateurs C++}}&lt;br /&gt;
&lt;br /&gt;
Les interfaces de ligne de commande des [[Compilateurs C++ améliorés par Clang|compilateurs C++ améliorés par Clang]] sont très similaires les unes aux autres. Cette rubrique fournit les informations qui s&amp;#039;appliquent à toutes les interfaces.&lt;br /&gt;
&lt;br /&gt;
==Options de ligne de commande des compilateurs C++ améliorés par Clang==&lt;br /&gt;
&lt;br /&gt;
{{Note|L&amp;#039;utilisation des compilateurs C++ basés sur Clang sur la ligne de commande peut produire des résultats inattendus. Toutefois, les options des compilateurs C++ basés sur Clang disponibles dans l&amp;#039;EDI ont été testées lors de l&amp;#039;implémentation. Pour de plus amples informations, voir :&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:*[[Options de projet prises en charge par les compilateurs C++ améliorés par Clang|Options de projet prises en charge par les compilateurs C++ améliorés par Clang]]&lt;br /&gt;
:*[[Options non prises en charge par les compilateurs C++ améliorés par Clang|Options non prises en charge par les compilateurs C++ améliorés par Clang]]}}&lt;br /&gt;
&lt;br /&gt;
Les compilateurs améliorés par Clang sont très semblables et ils partagent la plupart des options de ligne de commande. Un sous-ensemble de fonctionnalités issues de Clang a été intégré dans {{Product}} ; certaines fonctionnalités sont disponibles dans la boîte de dialogue &amp;#039;&amp;#039;&amp;#039;[[Boîte de dialogue Options de projet|Options de projet]]&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
===Exécution par le biais de la ligne de commande===&lt;br /&gt;
&lt;br /&gt;
Il est conseillé aux utilisateurs recourant à la ligne de commande pour exécuter les compilateurs C++ amélirés par Clang d&amp;#039;accéder au pilote en procédant comme suit :&lt;br /&gt;
&lt;br /&gt;
 {{Placeholder|compiler}} -c test.cpp&lt;br /&gt;
&lt;br /&gt;
ou :&lt;br /&gt;
&lt;br /&gt;
 {{Placeholder|compiler}} -tWCV myApplication.cpp&lt;br /&gt;
&lt;br /&gt;
Dans ce cas, les compilateurs C++ améliorés par Clang s&amp;#039;exécutent en ayant les paramètres suivants de ligne de commande activés par défaut :&lt;br /&gt;
&lt;br /&gt;
*{{Code|-fborland-extensions}}&lt;br /&gt;
&lt;br /&gt;
Si vous êtes un utilisateur expérimenté de Clang et que vous souhaitez utiliser les compilateurs C++ améliorés par Clang sans accéder au pilote, vous devez transmettre {{Code|-cc1}} comme première option, afin de signaler au compilateur que vous prenez les choses en main et que vous avez un contrôle strict et total sur toutes les options. Dans ce cas, aucune option n&amp;#039;est injectée automatiquement à votre place, et vous devrez spécifier manuellement les paramètres de ligne de commande ci-dessus.&lt;br /&gt;
&lt;br /&gt;
===Options de signalement des erreurs===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Commutateur&lt;br /&gt;
!Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|{{Code|--warn-common}}&lt;br /&gt;
|Avertir concernant les symboles communs dupliqués.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|{{Code|--warn-unresolved-symbols}}&lt;br /&gt;
|Signaler les symboles non résolus en tant qu&amp;#039;avertissements.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|{{Code|--error-unresolved-symbols}}&lt;br /&gt;
|Signaler les symboles non résolus en tant qu&amp;#039;erreurs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Recherches et chemins #include==&lt;br /&gt;
&lt;br /&gt;
Les compilateurs C++ améliorés par Clang prennent en charge trois chemins en-tête/source différents :&lt;br /&gt;
&lt;br /&gt;
*{{Code|-isystem}} est pour les en-têtes système inclus avec le compilateur. Les avertissements relatifs aux en-têtes trouvés sur ce chemin sont supprimés.&lt;br /&gt;
*{{Code|-I}} est pour les en-têtes fournis par de tierces parties.&lt;br /&gt;
*{{Code|-idirafter}} est pour les chemins recherchés après les chemins spécifiés via {{Code|-I}} ou {{Code|-isystem}}. Si le chemin a un caractère de début &amp;#039;=&amp;#039;, ce caractère est remplacé par la valeur spécifiée via {{Code|-sysroot}}.&lt;br /&gt;
*{{Code|-iquote}} est pour vos propres fichiers source et en-têtes. Comme son nom le suggère, ce chemin est utilisé uniquement pour les directives contenant des guillemets : &amp;lt;source lang=&amp;quot;cpp&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;#include &amp;quot;fichier&amp;quot;&amp;lt;/source&amp;gt;. Si le {{Path|fichier}} nommé n&amp;#039;est pas trouvé, la recherche s&amp;#039;effectue dans les chemins spécifiés par {{Code|-I}} et {{Code|-isystem}}, comme si la directive était &amp;lt;source lang=&amp;quot;cpp&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;#include &amp;lt;fichier&amp;gt;&amp;lt;/source&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&amp;#039;informations, voir [[Include|#include]].&lt;br /&gt;
&lt;br /&gt;
==Liaison avec le runtime de {{Delphi}}==&lt;br /&gt;
&lt;br /&gt;
Par défaut, si vous ne spécifiez pas une cible à l&amp;#039;aide du commutateur de ligne de commande {{Path|-t}}, les compilateurs C++ améliorés par Clang effectuent la liaison avec le runtime de {{Delphi}}. [[BCCAARM.EXE, le compilateur C++ pour Android|BCCAARM.EXE]] :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Commande&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{Path|bccaarm file.cpp}}&lt;br /&gt;
|&lt;br /&gt;
BCCAARM construit votre application comme une application console qui est liée avec le runtime de {{Delphi}}.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;code&amp;gt;bccaarm -tC file.cpp&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
BCCAARM construit votre application comme une application console qui n&amp;#039;est pas liée au runtime de {{Delphi}}.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;code&amp;gt;bccaarm -tF file.cpp&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
BCCAARM construit votre application comme une [[FireMonkey|application FireMonkey]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Utilisation de la compilation parallèle==&lt;br /&gt;
&lt;br /&gt;
Pour activer la [[Compilateurs C++ améliorés par Clang#Utilisation de la compilation parallèle|compilation parallèle]] sur la ligne de commande, utilisez l&amp;#039;option de ligne de commande {{Code|1=--jobs=&amp;amp;lt;N&amp;amp;gt;}}.&lt;br /&gt;
&lt;br /&gt;
Pour spécifier le nombre de sous-processus à utiliser, ajoutez un nombre à l&amp;#039;option de ligne de commande. Par exemple, pour utiliser 2 sous-processus, utilisez {{Code|1=--jobs=2}}. Vous ne devez pas choisir un nombre de sous-processus supérieur au nombre de coeurs de votre processeur.&lt;br /&gt;
&lt;br /&gt;
Pour utiliser autant de sous-processus que possible, utilisez {{code|1=--jobs=0}}.&lt;br /&gt;
&lt;br /&gt;
La compilation parallèle n&amp;#039;est pas compatible avec les options de ligne de commande suivantes pour bcc32c et bcc64 :&lt;br /&gt;
&lt;br /&gt;
*[[Options de ligne de commande des en-têtes précompilés pour les compilateurs C++ améliorés par Clang|{{Code|-emit-pch}}]]&lt;br /&gt;
*[[CPP64, le préprocesseur pour Windows 64 bits|{{Code|-E}}]]&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Product}} prend maintenant en charge &amp;lt;code&amp;gt;--jobs&amp;lt;/code&amp;gt; pour Windows 64 bits Moderne (bcc64x), ce qui accélère le temps de compilation. Toutefois, l&amp;#039;implémentation dans bcc64x concerne spécifiquement l&amp;#039;option de ligne de commande &amp;lt;code&amp;gt;-emit-obj&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
&lt;br /&gt;
==Affichage de l&amp;#039;aide du compilateur==&lt;br /&gt;
&lt;br /&gt;
Exécutez l&amp;#039;exécutable de l&amp;#039;interface de ligne de commande du compilateur cible avec le commutateur {{Code|--help}} pour afficher l&amp;#039;aide de l&amp;#039;interface de ligne de commande. Par exemple :&lt;br /&gt;
&lt;br /&gt;
:{{Code|bcc64 --help}}&lt;br /&gt;
&lt;br /&gt;
Utilisez les commutateurs {{Code|-cc1}} et {{Code|--help}} pour afficher les commutateurs que vous pouvez transmettre au compilateur en utilisant l&amp;#039;interface de ligne de commande. Par exemple :&lt;br /&gt;
&lt;br /&gt;
:{{Code|bcc64 -cc1 --help}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Ce sont les commutateurs que vous pouvez utiliser dans &amp;quot;Autres options à transmettre au compilateur&amp;quot;, dans {{Menu|Projet &amp;amp;gt; Options &amp;amp;gt; Compilateur C++ &amp;amp;gt; [[Options avancées du compilateur C++|Options avancées]]}} sous [[Options avancées du compilateur C++#Autres options|Autres options]].}}&lt;br /&gt;
&lt;br /&gt;
==Génération des informations de dépendance==&lt;br /&gt;
&lt;br /&gt;
Par défaut, l&amp;#039;interface en ligne de commande des compilateurs C++ améliorés par Clang utilise l&amp;#039;option de ligne de commande {{code|-sys-header-deps}} pour générer des informations de dépendance complètes, y compris les fichiers en-tête système.&lt;br /&gt;
&lt;br /&gt;
==Rubriques==&lt;br /&gt;
&lt;br /&gt;
*[[BCC32C.EXE|BCC32C.EXE]]&lt;br /&gt;
*[[BCC32X.EXE|BCC32X.EXE]]&lt;br /&gt;
*[[BCC64.EXE, le compilateur C++ Windows 64 bits|BCC64.EXE]]&lt;br /&gt;
*[[BCC64X.EXE, le compilateur C++ Windows 64 bits|BCC64X.EXE]]&lt;br /&gt;
*[[BCCIOSARM64.EXE, le compilateur C++ pour le périphérique iOS 64 bits|BCCIOSARM64.EXE]]&lt;br /&gt;
*[[BCCAARM.EXE, le compilateur C++ pour Android|BCCAARM.EXE]]&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Compilateurs C++ améliorés par Clang|Compilateurs C++ améliorés par Clang]]&lt;br /&gt;
*[[Interfaces de ligne de commande des compilateurs Delphi basés sur LLVM|Interfaces de ligne de commande des compilateurs {{Delphi}} basés sur LLVM]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:04 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Interfaces_de_ligne_de_commande_des_compilateurs_C%2B%2B_am%C3%A9lior%C3%A9s_par_Clang</comments>
		</item>
		<item>
			<title>Construction</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Construction&amp;diff=223453&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Construction&amp;diff=223453&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Construction&quot; title=&quot;Construction&quot;&gt;Construction&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Boîte de dialogue Options de projet}}&lt;br /&gt;
&lt;br /&gt;
{{Menu|Projet &amp;amp;gt; Options &amp;amp;gt; Construction}}&lt;br /&gt;
&lt;br /&gt;
Certaines des options répertoriées ci-dessous sont disponibles pour des langages de programmation ou des types de projets spécifiques uniquement.&lt;br /&gt;
&lt;br /&gt;
==Pages enfant==&lt;br /&gt;
&lt;br /&gt;
* [[C++ (options partagées)|C++ (options partagées)]]&lt;br /&gt;
*[[Compilateur C++|Compilateur C++]]&lt;br /&gt;
** [[Options avancées du compilateur C++|Options avancées]]&lt;br /&gt;
** [[Compatibilité du compilateur C++|Compatibilité]]&lt;br /&gt;
** [[Compilateur C++ - Débogage|Débogage]]&lt;br /&gt;
** [[Répertoires et Conditions du compilateur C++|Répertoires et Conditions]]&lt;br /&gt;
** [[Compilateur LSP C++|LSP]]&lt;br /&gt;
** [[Compilateur C++ - Optimisations|Optimisations]]&lt;br /&gt;
** [[Compilateur C++ - Sortie|Sortie]]&lt;br /&gt;
** [[En-têtes précompilés du compilateur C++|En-têtes précompilés]]&lt;br /&gt;
** [[Compilateur C++ - Avertissements|Avertissements]]&lt;br /&gt;
* [[Bibliothécaire (TLib)|Bibliothécaire (TLib)]]&lt;br /&gt;
*[[Lieur C++|Lieur C++]]&lt;br /&gt;
** [[Sortie du lieur C++|Sortie]]&lt;br /&gt;
** [[Avertissements du lieur C++|Avertissements]]&lt;br /&gt;
*[[Compilateur Delphi|Compilateur Delphi]]&lt;br /&gt;
** [[Compilation|Compilation]]&lt;br /&gt;
** [[Conseils et avertissements|Conseils et avertissements]]&lt;br /&gt;
** [[Liaison (Delphi)|Liaison]]&lt;br /&gt;
** [[Sortie - C/C++|Sortie - C/C++]]&lt;br /&gt;
* [[Lieurs externes utilisés par Delphi (et C++)|Lieurs externes utilisés par Delphi (et C++)]]&lt;br /&gt;
*[[Options du compilateur de ressources|Compilateur de ressources]]&lt;br /&gt;
** [[Répertoires et Conditions du compilateur de ressources|Répertoires et Conditions]]&lt;br /&gt;
*[[Options Turbo Assembleur|Turbo Assembleur]]&lt;br /&gt;
** [[Répertoires et Conditions Turbo Assembleur|Répertoires et Conditions]]&lt;br /&gt;
** [[Turbo Assembleur - Avertissements|Avertissements]]&lt;br /&gt;
* [[Evénements de construction|Evénements de construction]]&lt;br /&gt;
* [[Ordre de construction|Ordre de construction]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Référence EDI]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:03 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Construction</comments>
		</item>
		<item>
			<title>WebStencils</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=WebStencils&amp;diff=223451&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=WebStencils&amp;diff=223451&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/WebStencils&quot; title=&quot;WebStencils&quot;&gt;WebStencils&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;WebStencils, un système d&amp;#039;intégration et de traitement des fichiers HTML côté serveur, a été introduit dans {{Product}} version 12.2 pour les technologies WebBroker et RAD Server. Cette fonctionnalité flexible permet aux développeurs de concevoir des sites web modernes basés sur n&amp;#039;importe quelle bibliothèque JavaScript tout en exploitant les données extraites et traitées par une application serveur RAD Studio. Cette technologie offre une grande flexibilité pour créer des sites web adaptés à vos besoins spécifiques.&lt;br /&gt;
&lt;br /&gt;
WebStencils a pour objectif de faciliter la création de sites de navigation par l&amp;#039;adoption des technologies Web (WebBroker, DataSnap, RAD Server) en fournissant des scripts côté serveur. Il est ainsi possible de générer des pages HTML avec des outils standard et d&amp;#039;utiliser n&amp;#039;importe quelle bibliothèque CSS et JavaScript tout en ajoutant des données à partir des pages générées depuis l&amp;#039;application (il peut s&amp;#039;agir par exemple du résultat d&amp;#039;une requête de base de données).&lt;br /&gt;
&lt;br /&gt;
De plus, WebStencils constitue une excellente base pour le développement Web avec HTMX. Les pages HTMX bénéficient de la génération de code côté serveur et peuvent se connecter à des serveurs REST pour la mise à jour du contenu. Les technologies Web de Delphi offrent des fonctionnalités de génération de page et d&amp;#039;API REST de très haut niveau.&lt;br /&gt;
&lt;br /&gt;
==Syntaxe de WebStencil==&lt;br /&gt;
&lt;br /&gt;
Le langage de script de WebStencils repose sur deux éléments et est relativement simple :&lt;br /&gt;
&lt;br /&gt;
* Le {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039; }}&lt;br /&gt;
* Les accolades {{code| &amp;#039;&amp;#039;&amp;#039;{ }&amp;#039;&amp;#039;&amp;#039; }}&lt;br /&gt;
&lt;br /&gt;
===Utilisation du symbole {{code|@}}===&lt;br /&gt;
&lt;br /&gt;
WebStencils utilise le symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}} comme marqueur spécial plutôt que des balises HTML/XML ou d&amp;#039;autres notations. Le symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}} est suivi par :&lt;br /&gt;
&lt;br /&gt;
* Le nom d&amp;#039;un objet ou d&amp;#039;un champ.&lt;br /&gt;
* Un [[WebStencils#Mots clé de WebStencils|mot clé spécial]].&lt;br /&gt;
* Un autre symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}}. {{Tip|  L&amp;#039;utilisation du symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}} est plus souple. Ainsi, vous n&amp;#039;aurez pas besoin de le doubler dans certaines situations, comme dans les en-têtes.}}&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;accès général à une valeur est basé sur une notation par point, sous la forme object.value. C&amp;#039;est pourquoi vous observerez des balises comme :&lt;br /&gt;
&lt;br /&gt;
 @object.value&lt;br /&gt;
&lt;br /&gt;
Le nom de &amp;#039;&amp;#039;&amp;#039;l&amp;#039;objet&amp;#039;&amp;#039;&amp;#039; est un nom symbolique local qui peut correspondre à un objet réel d&amp;#039;une application serveur, assigné à l&amp;#039;exécution du script via un processus de recensement. Il peut aussi être résolu dans le code lors du traitement d&amp;#039;un gestionnaire d&amp;#039;événement OnGetValue.&lt;br /&gt;
&lt;br /&gt;
La valeur est composée du nom de la propriété (pour un objet générique), du nom d&amp;#039;un champ (si l&amp;#039;objet hérite de TDataSet), et d&amp;#039;une chaîne qui est transmise dans le gestionnaire d&amp;#039;événement OnGetValue associé au processeur.&lt;br /&gt;
&lt;br /&gt;
{{Note|La sortie des valeurs traitées par WebStencils est chiffrée avec la méthode TNetEncoding.HTML.Encode. Vous pouvez supprimer le chiffrement en utilisant la syntaxe {{code|@\value}}.}}&lt;br /&gt;
&lt;br /&gt;
====Accès aux ensembles de données et objets imbriqués====&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi utiliser le symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}} pour accéder à des ensembles de données et des objets imbriqués en utilisant la syntaxe suggérée dans les scénarios suivants :&lt;br /&gt;
&lt;br /&gt;
* Objets et classes imbriqués :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@MyObject.SubObject.ProperyName&amp;lt;/source&amp;gt;&lt;br /&gt;
* Tables dans les ensembles de données imbriqués :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@MyDataSet.DataSetField.SubField&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Utilisation des accolades pour les blocs {{code|{}}}===&lt;br /&gt;
&lt;br /&gt;
La seconde notation utilise des accolades, {{code|{}} et {{code|}}}, pour indiquer les blocs conditionnels ou répétés.&lt;br /&gt;
&lt;br /&gt;
Toute autre utilisation des accolades dans le fichier de code source (le fichier HTML) est ignorée. En d&amp;#039;autres termes, les accolades ne sont traitées que si elles sont utilisées après une instruction conditionnelle WebStencils spécifique.&lt;br /&gt;
&lt;br /&gt;
===Accès à des valeurs avec la notation par point===&lt;br /&gt;
&lt;br /&gt;
Prenons en exemple l&amp;#039;extrait de code HTML WebStencils ci-dessous :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;GetValue&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Value obtained from data: @data.name&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Value obtained with request @@data.value: @data.value&amp;lt;/p&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les symboles {{code|@@}} sont ignorés (nous attendons un seul {{code|@}} en sortie). Il suffit d&amp;#039;un seul pour déclencher le traitement. &lt;br /&gt;
Notez également que les deux symboles, le nom d&amp;#039;objet et le nom de valeur, doivent être des identificateurs Delphi valides et ne peuvent pas contenir d&amp;#039;espaces ni commencer par un chiffre. Un nom peut contenir des caractères de soulignement et des chiffres.&lt;br /&gt;
&lt;br /&gt;
===Gestionnaire d&amp;#039;événement OnValue===&lt;br /&gt;
&lt;br /&gt;
Il est possible de fournir des données en utilisant un composant avec le gestionnaire d&amp;#039;événement OnValue. Par exemple :&amp;amp;lt;br /&amp;amp;gt;&amp;#039;&amp;#039;&amp;#039;Delphi :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TWebModule13.WebStencilsValueFromEventValue(Sender: TObject;&lt;br /&gt;
  const ObjectName, FieldName: string; var ReplaceText: string; &lt;br /&gt;
  var Handled: Boolean)&lt;br /&gt;
begin&lt;br /&gt;
  if SameText (ObjectName, &amp;#039;data&amp;#039;) then&lt;br /&gt;
  begin&lt;br /&gt;
    Handled := True;&lt;br /&gt;
    ReplaceText := &amp;#039;You requested &amp;#039; + FieldName;&lt;br /&gt;
  end;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans le code exemple ci-dessus, le code vérifie uniquement le nom d&amp;#039;objet (la première partie du symbole avant le point), mais il est recommandé de vérifier également la propriété FieldName (le symbole après le point).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++ :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TWebModule13::WebStencilsValueFromEventValue(TObject *Sender,&lt;br /&gt;
  const String ObjectName, const String FieldName, String &amp;amp;ReplaceText, bool &amp;amp;Handled)&lt;br /&gt;
{&lt;br /&gt;
  if (SameText(ObjectName, &amp;quot;data&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    Handled = true;&lt;br /&gt;
    ReplaceText = &amp;quot;You requested &amp;quot; + FieldName;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, {{code|String}} est une chaîne {{code|UnicodeString}} compatible Delphi dans C++ Builder. {{code|SameText}} est une fonction de comparaison de chaînes insensible à la casse fournie par SysUtils. Enfin, {{code|&amp;amp;amp;ReplaceText}} et {{code|&amp;amp;amp;Handled}} sont transmis par référence pour permettre la modification et reproduire le comportement {{code|var}} de Delphi.&lt;br /&gt;
&lt;br /&gt;
===Utilisation d&amp;#039;un objet dans le dictionnaire de variables de script===&lt;br /&gt;
&lt;br /&gt;
Une autre approche consiste à fournir les valeurs en utilisant un objet. Dans ce cas, l&amp;#039;objet doit être configuré et associé à l&amp;#039;action du producteur.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple complet, supposant une classe TMyObject et sa propriété Name :&amp;amp;lt;br /&amp;amp;gt;&amp;#039;&amp;#039;&amp;#039;Delphi :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TWebModule1.WebModule1WebActionItem2Action(Sender: TObject;&lt;br /&gt;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);&lt;br /&gt;
begin&lt;br /&gt;
  WebStencilsProcessor1.InputLines.Text := &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    &amp;lt;h2&amp;gt;GetValue&amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Value obtained from data: @world.Name&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
  var MyObj := TMyObject.Create();&lt;br /&gt;
  MyObj.Name := &amp;#039;Hello hello&amp;#039;;&lt;br /&gt;
  WebStencilsProcessor1.AddVar(&amp;#039;world&amp;#039;, MyObj, True);&lt;br /&gt;
  Response.Content := WebStencilsProcessor1.Content;&lt;br /&gt;
  Handled := True;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cet exemple donne le résultat suivant :&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;Value obtained from data: Hello Hello&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Notez que l&amp;#039;objet est recensé avec le nom &amp;#039;world&amp;#039;, qui sera ensuite utilisé dans le script WebStencils.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++ :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TWebModule1::WebModule1WebActionItem2Action(TObject *Sender,&lt;br /&gt;
  TWebRequest *Request, TWebResponse *Response, bool &amp;amp;Handled)&lt;br /&gt;
{&lt;br /&gt;
  WebStencilsProcessor1-&amp;gt;InputLines-&amp;gt;Text =&lt;br /&gt;
    &amp;quot;&amp;lt;h2&amp;gt;GetValue&amp;lt;/h2&amp;gt;\n&amp;quot;&lt;br /&gt;
    &amp;quot;&amp;lt;p&amp;gt;Value obtained from data: @world.Name&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  TMyObject *MyObj = new TMyObject();&lt;br /&gt;
  MyObj-&amp;gt;Name = &amp;quot;Hello hello&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  WebStencilsProcessor1-&amp;gt;AddVar(&amp;quot;world&amp;quot;, MyObj, true);&lt;br /&gt;
&lt;br /&gt;
  Response-&amp;gt;Content = WebStencilsProcessor1-&amp;gt;Content;&lt;br /&gt;
  Handled = true;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Expressions===&lt;br /&gt;
&lt;br /&gt;
Voici la liste des expressions prises en charge :&lt;br /&gt;
&lt;br /&gt;
*{{code|&amp;#039;&amp;#039;&amp;#039;@ (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}} - marqueurs de variable. L&amp;#039;expression doit être écrite entre parenthèses.&lt;br /&gt;
*{{code|&amp;#039;&amp;#039;&amp;#039;@if (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}} - commande &amp;quot;if&amp;quot;. L&amp;#039;expression doit être écrite entre parenthèses.&lt;br /&gt;
*{{code|&amp;#039;&amp;#039;&amp;#039;@Import (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}}, {{code|&amp;#039;&amp;#039;&amp;#039;@LayoutPage (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}}, {{code|&amp;#039;&amp;#039;&amp;#039;@AddPage (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}} - &amp;#039;&amp;#039;commandes de fichier. L&amp;#039;expression doit être écrite entre accolades.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple suivant montre uniquement les différences entre les options ci-dessus :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
WebStencilsProcessor1.InputLines.Text := &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    &amp;lt;h2&amp;gt;GetExpression&amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Value obtained from data: @(world.value*2)&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
  MyObj.Value := 2;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous obtenez alors la sortie suivante :&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;Value obtained from data: 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
En plus des expressions simples, vous pouvez étendre le système en utilisant des appels de fonction personnalisés. Voici un exemple de code qui recense une fonction “&amp;#039;&amp;#039;&amp;#039;Concat&amp;#039;&amp;#039;&amp;#039;” recevant deux paramètres chaîne :&amp;amp;lt;br /&amp;amp;gt;&amp;#039;&amp;#039;&amp;#039;Delphi :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
uses&lt;br /&gt;
  System.Bindings.EvalProtocol, System.Bindings.Methods;&lt;br /&gt;
&lt;br /&gt;
  TBindingMethodsFactory.RegisterMethod(&lt;br /&gt;
   TMethodDescription.Create(&lt;br /&gt;
    MakeInvokable(function(Args: TArray&amp;lt;IValue&amp;gt;): IValue&lt;br /&gt;
    begin&lt;br /&gt;
     Result := TValueWrapper.Create(&lt;br /&gt;
      Args[0].GetValue.AsString + Args[1].GetValue.AsString);&lt;br /&gt;
    end),&lt;br /&gt;
    &amp;#039;Concat&amp;#039;, &amp;#039;Concat&amp;#039;, &amp;#039;&amp;#039;, True, &amp;#039;&amp;#039;, nil));&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un script WebStencils, vous pouvez l&amp;#039;utiliser dans une expression comme :&lt;br /&gt;
&lt;br /&gt;
 @(Concat(&amp;#039;aaa&amp;#039;, &amp;#039;bbb&amp;#039;]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++ :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;System.Bindings.EvalProtocol.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;System.Bindings.Methods.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;System.Rtti.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;System.SysUtils.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace System::Bindings::EvalProtocol;&lt;br /&gt;
using namespace System::Bindings::Methods;&lt;br /&gt;
using namespace System::Rtti;&lt;br /&gt;
&lt;br /&gt;
class TValueWrapper : public TInterfacedObject, public IValue&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
    TValue FValue;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
    __fastcall TValueWrapper(const TValue &amp;amp;AValue) : FValue(AValue) {}&lt;br /&gt;
&lt;br /&gt;
    virtual TValue __fastcall GetValue() { return FValue; }&lt;br /&gt;
&lt;br /&gt;
    // Implement other IValue methods as needed...&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void RegisterCustomBindingMethod()&lt;br /&gt;
{&lt;br /&gt;
    TBindingMethodsFactory::RegisterMethod(&lt;br /&gt;
        new TMethodDescription(&lt;br /&gt;
            MakeInvokable([](const TArray&amp;lt;IValue*&amp;gt; &amp;amp;Args) -&amp;gt; IValue*&lt;br /&gt;
            {&lt;br /&gt;
                String s1 = Args[0]-&amp;gt;GetValue().ToString();&lt;br /&gt;
                String s2 = Args[1]-&amp;gt;GetValue().ToString();&lt;br /&gt;
                return new TValueWrapper(TValue::From&amp;lt;String&amp;gt;(s1 + s2));&lt;br /&gt;
            }),&lt;br /&gt;
            &amp;quot;Concat&amp;quot;, &amp;quot;Concat&amp;quot;, &amp;quot;&amp;quot;, true, &amp;quot;&amp;quot;, nullptr));&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Instruction Switch====&lt;br /&gt;
&lt;br /&gt;
En plus de l&amp;#039;instruction {{code|@if}}, les utilisateurs peuvent choisir d&amp;#039;utiliser les instructions {{code|@switch}} ou {{code|@case}}.&amp;amp;lt;br /&amp;amp;gt; &lt;br /&gt;
Voici un exemple de syntaxe :&amp;lt;source&amp;gt;&lt;br /&gt;
@switch(@user.role) {&lt;br /&gt;
  @case &amp;quot;admin&amp;quot; { &lt;br /&gt;
    &amp;lt;div&amp;gt;Admin Panel&amp;lt;/div&amp;gt;&lt;br /&gt;
  } @case &amp;quot;moderator&amp;quot; { &lt;br /&gt;
    &amp;lt;div&amp;gt;Moderator Tools&amp;lt;/div&amp;gt;&lt;br /&gt;
  } @default { &lt;br /&gt;
    &amp;lt;div&amp;gt;Regular User View&amp;lt;/div&amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A partir de l&amp;#039;exemple ci-dessus, notez que :&lt;br /&gt;
&lt;br /&gt;
*Les valeurs des &amp;quot;case&amp;quot; peuvent être des littéraux ou des expressions utilisant {{code|@}}(expression).&lt;br /&gt;
*Seul le premier &amp;quot;case&amp;quot; correspondant est exécuté.&lt;br /&gt;
*L&amp;#039;utilisation de {{code|@default}} est facultative et s&amp;#039;exécute s&amp;#039;il n&amp;#039;y a pas de correspondance avec &amp;quot;case&amp;quot;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
===Utilisation d&amp;#039;un ensemble de données===&lt;br /&gt;
&lt;br /&gt;
Une alternative consiste à utiliser l&amp;#039;enregistrement en cours d&amp;#039;un ensemble de données plutôt qu&amp;#039;un objet. Dans ce cas, votre code sera comme suit :&amp;amp;lt;br /&amp;amp;gt;&amp;#039;&amp;#039;&amp;#039;Delphi :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TWebModule13.WebModule13waCompanyAction(Sender: TObject;&lt;br /&gt;
    Request: TWebRequest; Response: TWebResponse;&lt;br /&gt;
    var Handled: Boolean];&lt;br /&gt;
  begin  &lt;br /&gt;
   ClientDataSet1.Open;&lt;br /&gt;
   if not WebStencilsValueFromObject.InVars  (&amp;#039;dataset&amp;#039;] then&lt;br /&gt;
    WebStencilsValueFromObject.AddVar(&lt;br /&gt;
      &amp;#039;dataset&amp;#039;, ClientDataSet1, False]; // False = do not destroy&lt;br /&gt;
  Response.Content := WebStencilsValueFromObject.Content;&lt;br /&gt;
  ClientDataSet1.Close;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++ :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TWebModule13::WebModule13waCompanyAction(TObject *Sender,&lt;br /&gt;
  TWebRequest *Request, TWebResponse *Response, bool &amp;amp;Handled)&lt;br /&gt;
{&lt;br /&gt;
  ClientDataSet1-&amp;gt;Open();&lt;br /&gt;
&lt;br /&gt;
  if (!WebStencilsValueFromObject-&amp;gt;InVars(&amp;quot;dataset&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    WebStencilsValueFromObject-&amp;gt;AddVar(&amp;quot;dataset&amp;quot;, ClientDataSet1, false); // false = do not destroy&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Response-&amp;gt;Content = WebStencilsValueFromObject-&amp;gt;Content;&lt;br /&gt;
&lt;br /&gt;
  ClientDataSet1-&amp;gt;Close();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code HTML correspondant peut contenir des références à certains champs de l&amp;#039;enregistrement. Voici un exemple de résultat :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;list-group w-50&amp;quot;&amp;gt;&lt;br /&gt;
  @foreach dataset {&lt;br /&gt;
    &amp;lt;a href=&amp;quot;/company?id=@loop.custno&amp;quot; class=&amp;quot;list-group-item  &lt;br /&gt;
        list-group-item-action&amp;quot; aria-current=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;d-flex w-100 justify-content-between&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h5 class=&amp;quot;mb-1&amp;quot;&amp;gt;@loop.company&amp;lt;/h5&amp;gt;&lt;br /&gt;
      &amp;lt;small&amp;gt;@loop.country&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;mb-1&amp;quot;&amp;gt;@loop.city&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;@loop.state&amp;lt;/small&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Accès aux propriétés de l&amp;#039;ensemble de données====&lt;br /&gt;
&lt;br /&gt;
La notation WebStencils {{code|@}} relative à un ensemble de données permet d&amp;#039;accéder aux propriétés de l&amp;#039;ensemble de données, en plus de ses champs. Les utilisateurs peuvent utiliser {{code|@data.RecordCount}} pour accéder à la propriété RecordCount. En cas de conflit, les champs de l&amp;#039;ensemble de données ont priorité sur les propriétés portant le même nom.&lt;br /&gt;
&lt;br /&gt;
Cela inclut l&amp;#039;accès aux informations des champs, comme suit :&lt;br /&gt;
&lt;br /&gt;
 @foreach field in customers.fields&lt;br /&gt;
&lt;br /&gt;
Ainsi que l&amp;#039;accès aux propriétés des champs :&amp;lt;source&amp;gt;&lt;br /&gt;
@foreach customer in customers {&lt;br /&gt;
    @customer.address.visible&lt;br /&gt;
    @customer.phone.displaylabel&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Utilisation de variables de modules==&lt;br /&gt;
&lt;br /&gt;
Alternativement, pour recenser un objet spécifique pour un WebStencilsProcessor, vous pouvez ajouter un “&amp;#039;&amp;#039;&amp;#039;module&amp;#039;&amp;#039;&amp;#039;” avec plusieurs objets. Dans ce contexte, un &amp;#039;module&amp;#039; est une collection d&amp;#039;objets ou de fonctions liés entre eux. N&amp;#039;importe quel champ ou n&amp;#039;importe quelle propriété du module peut être décoré avec l&amp;#039;attribut {{code|&amp;#039;&amp;#039;&amp;#039;[WebStencilsVar]&amp;#039;&amp;#039;&amp;#039;}}, qui vous permet de spécifier comment le WebStencilsProcessor doit traiter les données.&lt;br /&gt;
&lt;br /&gt;
Par exemple, supposons que votre module de données a un composant FDMemTable1 de type TFDMemTable marqué comme {{code|&amp;#039;&amp;#039;&amp;#039;[WebStencilsVar]&amp;#039;&amp;#039;&amp;#039;}}, et un champ LastName, vous pouvez écrire :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  WebStencilsProcessor1.InputLines.Text := &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    &amp;lt;h2&amp;gt;GetTableData&amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Value obtained from table: @(FDMemTable1.LastName)&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
  WebStencilsProcessor1.AddModule(self);&amp;lt;/source&amp;gt;L&amp;#039;exemple ci-dessous renvoie la valeur de LastName dans le premier enregistrement. Utilisez une boucle {{code|&amp;#039;&amp;#039;&amp;#039;@for&amp;#039;&amp;#039;&amp;#039;}} pour afficher tous les enregistrements.&lt;br /&gt;
&lt;br /&gt;
===Utilisation de variables supplémentaires===&lt;br /&gt;
&lt;br /&gt;
Ajoutez des variables supplémentaires au moteur de script à l&amp;#039;extérieur des modèles d&amp;#039;objet et d&amp;#039;ensemble de données. Plutôt que d&amp;#039;ajouter une structure de données spécifique, ce mécanisme propose une méthode anonyme qui permet d&amp;#039;implémenter une recherche personnalisée dans une structure de données personnalisée. Il s&amp;#039;agit des méthodes suivantes :&lt;br /&gt;
&lt;br /&gt;
 TWebStencilsDataVars.Add(LookupFunc), AddInitFunc(LookupFunc)&lt;br /&gt;
 TWebStencilsProcessor.AddVar(LookupFunc), AddInitFunc(LookupFunc)&lt;br /&gt;
 TWebStencilsEngine.AddVar(LookupFunc), AddInitFunc(LookupFunc)&lt;br /&gt;
&lt;br /&gt;
Voici un exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
  TMap = TDictionary&amp;lt;string, string&amp;gt;;&lt;br /&gt;
var&lt;br /&gt;
  LDict: TMap;&lt;br /&gt;
begin&lt;br /&gt;
  LDict := TMap.Create;&lt;br /&gt;
  LDict.Add(&amp;#039;APP_VERSION&amp;#039;, &amp;#039;1.0.0&amp;#039;);&lt;br /&gt;
  LDict.Add(&amp;#039;APP_NAME&amp;#039;, &amp;#039;WebStencils demo&amp;#039;);&lt;br /&gt;
  LDict.Add(&amp;#039;COMPANY_NAME&amp;#039;, &amp;#039;Embarcadero Inc.&amp;#039;);&lt;br /&gt;
  LDict.Add(&amp;#039;DEBUG_MODE&amp;#039;, &amp;#039;True&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
  FWebStencilsProcessor.AddVar(&amp;#039;env&amp;#039;, LDict, True,&lt;br /&gt;
    function(AVar: TWebStencilsDataVar; const APropName: string; &lt;br /&gt;
      var AValue: string): Boolean&lt;br /&gt;
    begin&lt;br /&gt;
      Result := TMap(AVar.TheObject).TryGetValue(APropName.ToUpper, AValue);&lt;br /&gt;
    end);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi l&amp;#039;utiliser dans un modèle, comme suit :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 @env.APP_NAME - @env.APP_VERSION&lt;br /&gt;
 @if env.DEBUG_MODE {&lt;br /&gt;
   &amp;lt;div&amp;gt;Debug mode active&amp;lt;/div&amp;gt;&lt;br /&gt;
 }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mots clés de WebStencil==&lt;br /&gt;
&lt;br /&gt;
Le moteur WebStencils utilise les balises suivantes sous forme de mots clés (notez que ces noms ne peuvent pas être utilisés pour des variables de script).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Mot clé&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@query&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisé pour lire des paramètres de requête HTTP.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@page&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Fournit l&amp;#039;accès au nom de la page et aux arguments de l&amp;#039;URL (voir la propriété [[WebStencils#Utilisation de WebStencils avec RAD Server|PathTemplate]] pour plus d&amp;#039;informations). Il est possible d&amp;#039;accéder au chemin de l&amp;#039;URL en utilisant l&amp;#039;une de ces valeurs :&lt;br /&gt;
*{{code|@page.request_path}}&lt;br /&gt;
*{{code|@page.request_segment}}&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@lang&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisé pour la prise en charge de la traduction, déclenche un événement OnLang distinct plutôt que l&amp;#039;événement OnValue.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@* .. *@&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisé pour ajouter des commentaires dans le script, qui seront omis dans le HTML résultant.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@if&amp;#039;&amp;#039;&amp;#039;}} object.value { … } [&amp;#039;&amp;#039;&amp;#039;@else&amp;#039;&amp;#039;&amp;#039; { … }]&lt;br /&gt;
|Exécute le bloc suivant entre accolades uniquement si la valeur vaut {{code|true}}.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@if (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisé pour restituer du contenu de façon conditionnelle. Si l&amp;#039;expression est évaluée à {{code|true}}, le contenu associé est inclus dans la sortie ; sinon il est omis.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@if not&amp;#039;&amp;#039;&amp;#039; object.value { ... } [&amp;#039;&amp;#039;&amp;#039;@else&amp;#039;&amp;#039;&amp;#039; { … }]}}&lt;br /&gt;
|Exécute le bloc suivant entre accolades uniquement si la valeur ne vaut pas {{code|true}}. &amp;lt;br /&amp;gt;Par exemple :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 @if obj1.ValueBelowTen {&lt;br /&gt;
	  &amp;lt;p&amp;gt;@obj1.name &amp;lt;span&amp;gt; has a value of &amp;lt;/span&amp;gt; @obj1.value&amp;lt;/p&amp;gt;&lt;br /&gt;
	}&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@ForEach&amp;#039;&amp;#039;&amp;#039; (var object in list) { … }}}&lt;br /&gt;
|Exécute le bloc entre accolades suivant aussi souvent qu&amp;#039;il y a d&amp;#039;éléments dans l&amp;#039;énumérateur. &amp;lt;br /&amp;gt;Supporte actuellement :&lt;br /&gt;
*Les ensembles de données&lt;br /&gt;
*TObjectList, doit être ajouté au dictionnaire de processeur.&lt;br /&gt;
*Tout objet possédant la méthode GetEnumerator, où l&amp;#039;énumérateur renvoie une valeur d&amp;#039;objet.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@ForEach&amp;#039;&amp;#039;&amp;#039; object { … }}}&lt;br /&gt;
|Exécute le bloc entre accolades suivant aussi souvent qu&amp;#039;il y a d&amp;#039;éléments dans l&amp;#039;énumérateur. &amp;lt;br /&amp;gt;Supporte actuellement les ensembles de données et TObjectList, qui doivent être ajoutés en tant que variables de script.&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@loop&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisez à l&amp;#039;intérieur d&amp;#039;un bloc pour faire référence à l&amp;#039;élément en cours de l&amp;#039;énumération (liste ou ensemble de données). Il doit être suivi du nom d&amp;#039;une propriété ou d&amp;#039;un champ sans utiliser de nom d&amp;#039;objet.&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@Import&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Permet de fusionner un fichier externe à un emplacement spécifique du fichier externe. Suppose toutefois que le nom de fichier ait l&amp;#039;extension .HTML. &amp;lt;br /&amp;gt;Le format doit être comme suit :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@import filename [ {&amp;lt;alias1&amp;gt; = &amp;lt;var1&amp;gt; [..., &amp;lt;aliasN&amp;gt; = &amp;lt;varN&amp;gt;]} ]&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@Scaffolding&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Espace réservé pour le scaffolding. Ce mécanisme permet de générer dynamiquement du code HTML à partir de la structure de données d&amp;#039;une application (les propriétés d&amp;#039;un objet et les champs d&amp;#039;une base de données). Le code HTML généré côté serveur peut inclure d&amp;#039;autres balises pour accéder aux données. &amp;lt;br /&amp;gt;Le code suivant est un exemple de disposition HTML simple générée dans le gestionnaire d&amp;#039;événement OnScaffolding pour chacun des champs de la base de données.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TWebModule1.ProcessorCompanyScaffolding(Sender: TObject;&lt;br /&gt;
  const AQualifClassName: string; var AReplaceText: string);&lt;br /&gt;
begin&lt;br /&gt;
  if SameText (AQualifClassName, &amp;#039;Company&amp;#039;) then&lt;br /&gt;
  begin&lt;br /&gt;
    AReplaceText := &amp;#039;&amp;#039;;&lt;br /&gt;
    for var I := 0 to ClientDataSet1.Fields.Count -1 do&lt;br /&gt;
      AReplaceText := AReplaceText + &amp;#039;&amp;lt;p&amp;gt;&amp;#039;+ &lt;br /&gt;
        ClientDataSet1.Fields[I].FieldName +&lt;br /&gt;
        &amp;#039;: @dataset.&amp;#039; + ClientDataSet1.Fields[I].FieldName + &amp;#039;&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
  end;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@switch&amp;#039;&amp;#039;&amp;#039;}}, {{code|&amp;#039;&amp;#039;&amp;#039;@case&amp;#039;&amp;#039;&amp;#039;}}, {{code|&amp;#039;&amp;#039;&amp;#039;@default&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Effectue un rendu conditionnel à branches multiples. Après avoir évalué une expression, la met en correspondance avec les valeurs définies avec @case, en restituant le bloc correspondant. La directive @default est utilisée si aucune correspondance n&amp;#039;est trouvée pour @case.&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@LoginRequired&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Arrête l&amp;#039;exécution si une connexion est requise alors que l&amp;#039;utilisateur n&amp;#039;est pas connecté.&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@LoginRequired (&amp;amp;lt;role&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Le moteur vérifie que l&amp;#039;utilisateur est connecté, mais aussi qu&amp;#039;il dispose du rôle spécifique actif, ce qui restreint l&amp;#039;accès à la page selon la permission.&amp;lt;br /&amp;gt; Par exemple : &amp;#039;&amp;#039;&amp;#039;@LoginRequired (admin)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Alias d&amp;#039;importation===&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple ci-dessous illustre comment utiliser des alias d&amp;#039;importation.&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@import one {@o1 = @object, @d1 = @data} Hello&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans ce code, &amp;#039;&amp;#039;&amp;#039;@object&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;@data&amp;#039;&amp;#039;&amp;#039; sont les véritables variables dans le script exécuté. Les alias &amp;#039;&amp;#039;&amp;#039;@o1&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;@d1&amp;#039;&amp;#039;&amp;#039; sont des variables de script pour le script &amp;quot;one&amp;quot; et sont accessibles dans ce script comme des variables normales. Ainsi, vous pouvez transmettre au script QA des variables portant des noms différents, en fournissant comme alias le nom attendu par le script.&lt;br /&gt;
&lt;br /&gt;
==Modèles WebStencils : disposition et corps==&lt;br /&gt;
&lt;br /&gt;
La capacité à fusionner un modèle HTML partagé avec le contenu d&amp;#039;une page compte parmi les fonctionnalités indispensables d&amp;#039;un moteur de modèle. Cette opération s&amp;#039;effectue (comme dans la version .NET) en utilisant quatre symboles spéciaux :&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;@LayoutPage filename&amp;#039;&amp;#039;&amp;#039; : cette commande est utilisée dans une page HTML spécifique (généralement en haut de page) pour indiquer le fichier de modèle à utiliser comme structure de la page. Plusieurs pages peuvent partager un même modèle, mais toutes les pages d&amp;#039;un projet (même en utilisant TWebStencilsEngine) ou d&amp;#039;un dossier virtuel n&amp;#039;ont pas nécessairement besoin d&amp;#039;utiliser le même modèle.&lt;br /&gt;
&lt;br /&gt;
:{{Note| Cette commande ne doit être utilisée qu&amp;#039;une seule fois par page. Si vous tentez d&amp;#039;utiliser plusieurs fois &amp;#039;&amp;#039;&amp;#039;@LayoutPage&amp;#039;&amp;#039;&amp;#039;, une exception se déclenche et bloque la commande.}}&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;@RenderBody&amp;#039;&amp;#039;&amp;#039; : cette commande sans paramètre est une marque de réservation dans un fichier de modèle qui indique où placer le contenu d&amp;#039;une page spécifique.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple d&amp;#039;utilisation de &amp;#039;&amp;#039;&amp;#039;@LayoutPage&amp;#039;&amp;#039;&amp;#039; et de &amp;#039;&amp;#039;&amp;#039;@RenderBody&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Test.html&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@LayoutPage BaseTemplate&lt;br /&gt;
   &amp;lt;h2&amp;gt;Page Test3&amp;lt;/h2&amp;gt;&lt;br /&gt;
   &amp;lt;p&amp;gt;Local data param one is @page.name (the page name)&amp;lt;/p&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;BaseTemplate.html&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Bootstrap CSS →&lt;br /&gt;
    &amp;lt;link href=&amp;quot;https://.../bootstrap.min.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;nav class=&amp;quot;navbar navbar-expand-md bg-dark mb-4&amp;quot;&amp;gt;...&lt;br /&gt;
    &amp;lt;main class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;bg-light p-5 rounded&amp;quot;&amp;gt;&lt;br /&gt;
      @RenderBody&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/main&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
De plus, vous pouvez injecter des en-têtes supplémentaires du document spécifié vers le modèle (par exemple, un fichier JavaScript requis à inclure dans la page ou le CSS supplémentaire d&amp;#039;une page spécifique). Dans ce cas, le mécanisme est inversé :&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;@ExtraHeader&amp;#039;&amp;#039;&amp;#039; { ... } : utilisé dans la page HTML spécifique pour indiquer un bloc de code à ajouter en tant qu&amp;#039;information d&amp;#039;en-tête supplémentaire.&amp;amp;lt;br /&amp;amp;gt;Il supporte aussi la propagation de contenu sur l&amp;#039;ensemble des hiérarchies de disposition imbriquées :&lt;br /&gt;
** Les blocs {{code|@ExtraHeader}} définis dans les pages se propagent automatiquement à travers plusieurs niveaux de disposition.&lt;br /&gt;
** Le contenu est injecté dans la sortie finale quelles que soient les dispositions intermédiaires.&lt;br /&gt;
** Permet une composition de disposition flexible, avec des dispositions de base, intermédiaires et spécifiques à la page.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;@RenderHeader&amp;#039;&amp;#039;&amp;#039; : indique à quel emplacement du fichier de modèle (généralement dans la section d&amp;#039;en-tête HTML) ajouter l&amp;#039;en-tête supplémentaire de la page, si disponible.&lt;br /&gt;
&lt;br /&gt;
{{Note|Les deux options sont facultatives.}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exemple&amp;#039;&amp;#039;&amp;#039;:&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- page.html --&amp;gt;&lt;br /&gt;
@extends layouts/intermediate&lt;br /&gt;
@ExtraHeader {&lt;br /&gt;
  &amp;lt;style&amp;gt;.highlight { color: green; }&amp;lt;/style&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- layouts/intermediate.html --&amp;gt;&lt;br /&gt;
@extends layouts/base&lt;br /&gt;
@ExtraHeader {&lt;br /&gt;
  &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- layouts/base.html --&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
  @RenderHeader&lt;br /&gt;
&amp;lt;/head&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, le CSS de {{code|page.html}} et la balise meta de {{code|intermediate.html}} sont injectés dans la sortie finale de {{code|@RenderHeader}}.&lt;br /&gt;
&lt;br /&gt;
==Composants de WebStencils==&lt;br /&gt;
&lt;br /&gt;
Le package WebStencils installe deux composants différents : un processeur de fichier unique et un moteur qui instancie des processeurs individuels et fournit une configuration globale pour les processeurs autonomes ou ceux auxquels ils sont manuellement connectés.&lt;br /&gt;
&lt;br /&gt;
Le composant principal prend un fichier HTML, incorpore la notation WebStencils et le convertit en HTML brut après avoir traité les balises {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}}.&lt;br /&gt;
&lt;br /&gt;
La classe &amp;#039;&amp;#039;&amp;#039;TWebStencilsProcessor&amp;#039;&amp;#039;&amp;#039; traite un fichier individuel (généralement ayant une extension HTML) et son modèle associé, le cas échéant. Le processeur peut être utilisé de façon autonome et assigné au &amp;#039;&amp;#039;&amp;#039;TWebActionItem.Producer&amp;#039;&amp;#039;&amp;#039;, ou être créé et appelé par TWebStencilsEngine en tant que post-processeur de fichiers texte renvoyés par un répartiteur de fichiers.&lt;br /&gt;
&lt;br /&gt;
===Composant WebStencilsEngine===&lt;br /&gt;
&lt;br /&gt;
Le composant &amp;#039;&amp;#039;&amp;#039;Engine&amp;#039;&amp;#039;&amp;#039; peut être utilisé dans les deux scénarios suivants :&lt;br /&gt;
&lt;br /&gt;
*Pour le connecter à un ou plusieurs composants &amp;#039;&amp;#039;&amp;#039;WebStencilsProcessor&amp;#039;&amp;#039;&amp;#039; et fournir des comportements et des paramètres partagés.&lt;br /&gt;
*Pour créer des composants &amp;#039;&amp;#039;&amp;#039;WebStencilsProcessor&amp;#039;&amp;#039;&amp;#039; lorsque cela est nécessaire, et placer uniquement ce composant sur vos modules web.&lt;br /&gt;
&lt;br /&gt;
==Intégration automatique de sessions==&lt;br /&gt;
&lt;br /&gt;
Lorsqu&amp;#039;elles sont disponibles, [[WebStencils|WebStencils]] peut automatiquement s&amp;#039;intégrer à des sessions web. Aucune configuration supplémentaire n&amp;#039;est nécessaire. Tout se fait automatiquement dès lors que {{code|WebRequest.Sessions}} existe.&lt;br /&gt;
&lt;br /&gt;
Les données des sessions sont accessibles via {{code|@session.property}}. Tous les objets dans {{code|WebRequest.Session.DataVars}} sont automatiquement recensés en tant que variables de modèles. De même, {{code|UserLoggedIn}} et {{code|UserRoles}} sont automatiquement remplis à partir de {{code|WebRequest.Session.User}}.&lt;br /&gt;
&lt;br /&gt;
En voici un exemple :&amp;lt;source&amp;gt;&lt;br /&gt;
@if session.Authenticated { &lt;br /&gt;
  &amp;lt;div&amp;gt;User authenticated&amp;lt;/div&amp;gt;&lt;br /&gt;
  @session.sessionid&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@if session.UserHasRole(‘admin’) { &lt;br /&gt;
  &amp;lt;div&amp;gt;User is an Admin&amp;lt;/div&amp;gt;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Liste blanche de sécurité==&lt;br /&gt;
&lt;br /&gt;
Pour des raisons de sécurité, WebStencils implémente un mécanisme de liste blanche de propriétés pour éviter l&amp;#039;exposition d&amp;#039;informations sensibles comme les chaînes de connexion aux bases de données. Par défaut, seules les propriétés sécurisées sont accessibles. Voici la liste des propriétés sécurisées :&lt;br /&gt;
&lt;br /&gt;
*Pour les &amp;#039;&amp;#039;&amp;#039;TDataSet&amp;#039;&amp;#039;&amp;#039; : Active, FieldByName, First, Last, Next, Prior, Bof, Eof, FieldCount, Fields, Found, RecordCount, RecNo.&lt;br /&gt;
*Pour les &amp;#039;&amp;#039;&amp;#039;TStrings&amp;#039;&amp;#039;&amp;#039; : Contains, ContainsName, IndexOf, IndexOfName, CommaText, Count, IsEmpty, DelimitedText, Names, KeyNames, Values, ValueFromIndex, Strings, Text.&lt;br /&gt;
&lt;br /&gt;
===Personnalisation de la liste blanche===&lt;br /&gt;
&lt;br /&gt;
La liste blanche peut être personnalisée en utilisant la propriété [[lib_fr:Web.Stencils.TWebStencilsProcessor.Whitelist|TWebStencilsProcessor.Whitelist]]. La méthode de configuration permet aux utilisateurs de spécifier les membres autorisés et ceux bloqués. Voir l&amp;#039;exemple ci-dessous :&amp;lt;source&amp;gt;&lt;br /&gt;
procedure Configure(const AClass: &amp;lt;PTypeInfo, TClass, TObject&amp;gt;; &lt;br /&gt;
                    const AAllowedMembers: TArray&amp;lt;string&amp;gt;;&lt;br /&gt;
                    const ABlockedMembers: TArray&amp;lt;string&amp;gt;; &lt;br /&gt;
                    AReset: Boolean);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AClass&amp;#039;&amp;#039;&amp;#039; : le type PTypeInfo/TClass/TObject pour configurer des éléments tels que des TDataSet, TStrings.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AAllowedMembers&amp;#039;&amp;#039;&amp;#039; : un tableau de propriétés ou de noms de méthodes que l&amp;#039;utilisateur souhaite autoriser.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ABlockedMembers&amp;#039;&amp;#039;&amp;#039; : un tableau de propriétés ou de noms de méthodes que l&amp;#039;utilisateur souhaite bloquer.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AReset&amp;#039;&amp;#039;&amp;#039; : {{code|True}} lorsqu&amp;#039;utilisé pour remplacer une liste blanche existante, ou {{code|False}} pour ajouter des éléments à la liste.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple qui illustre comment ajouter des membres autorisés supplémentaires à une liste blanche existante :&amp;lt;source&amp;gt;&lt;br /&gt;
TWebStencilsProcessor.Whitelist.Configure(TMyClass, &lt;br /&gt;
  [&amp;#039;CustomProp&amp;#039;], nil, False);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici un exemple qui illustre comment remplacer la totalité d&amp;#039;une liste blanche (AReset = True) :&amp;lt;source&amp;gt;&lt;br /&gt;
TWebStencilsProcessor.Whitelist.Configure(TDataSet, &lt;br /&gt;
  [&amp;#039;RecordCount&amp;#039;, &amp;#039;RecNo&amp;#039;], nil, True);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici un exemple qui illustre comment bloquer certains membres :&amp;lt;source&amp;gt;&lt;br /&gt;
TWebStencilsProcessor.Whitelist.Configure(MyObject, &lt;br /&gt;
  nil, [&amp;#039;CustomProp&amp;#039;], False);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La liste blanche s&amp;#039;applique à l&amp;#039;ensemble de l&amp;#039;application et à tous les WebStencils.&lt;br /&gt;
&lt;br /&gt;
==Utilisation de WebStencils avec RAD Server==&lt;br /&gt;
&lt;br /&gt;
La bibliothèque de modèles WebStencils peut aussi être utilisée dans une application RAD Server. Il est recommandé de combiner le composant &amp;#039;&amp;#039;TEMSFileResource&amp;#039;&amp;#039;&amp;#039; existant avec un composant &amp;#039;&amp;#039;&amp;#039;TWebStencilsEngine&amp;#039;&amp;#039;&amp;#039;. Le premier permet de mapper le système de fichiers, alors que le second gère le mappage HTTP et le traitement des modèles. Les composants sont connectés en utilisant la propriété Dispatcher du moteur WebStencil.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple ci-dessous illustre la configuration nécessaire pour ajouter deux composants à un module web RAD Server :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 object html: TEMSFileResource&lt;br /&gt;
    PathTemplate = &amp;#039;..\..\html\{filename}&amp;#039;&lt;br /&gt;
  end&lt;br /&gt;
  object WebStencilsEngine1: TWebStencilsEngine&lt;br /&gt;
    Dispatcher = html&lt;br /&gt;
    PathTemplates = &amp;lt;&lt;br /&gt;
      item&lt;br /&gt;
        Template = &amp;#039;/&amp;#039;&lt;br /&gt;
        Redirect = &amp;#039;/test1.html&amp;#039;&lt;br /&gt;
      end&lt;br /&gt;
      item&lt;br /&gt;
        Template = &amp;#039;/list&amp;#039;&lt;br /&gt;
        Redirect = &amp;#039;/companylist.html&amp;#039;&lt;br /&gt;
      end&lt;br /&gt;
      item&lt;br /&gt;
        Template = &amp;#039;/company&amp;#039;&lt;br /&gt;
        OnPathInit = WebStencilsEngine1PathTemplates2PathInit&lt;br /&gt;
      end&lt;br /&gt;
      ...&amp;gt;&lt;br /&gt;
  end&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les PathTemplates sont utilisés pour mapper les URL entrantes à des fichiers. En mode conception, la configuration se présente comme suit :&lt;br /&gt;
&lt;br /&gt;
[[File:PathTemplates WebStencils.png|350px|=link]]&lt;br /&gt;
&lt;br /&gt;
De plus, il est nécessaire de configurer le mappage de plus haut niveau dans le module de données :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
  [ResourceName(&amp;#039;testfile&amp;#039;)]&lt;br /&gt;
  TTestfileResource1 = class(TDataModule)&lt;br /&gt;
    [ResourceSuffix(&amp;#039;./&amp;#039;)]&lt;br /&gt;
    [ResourceSuffix(&amp;#039;get&amp;#039;, &amp;#039;./&amp;#039;)]&lt;br /&gt;
    [EndpointProduce(&amp;#039;get&amp;#039;, &amp;#039;text/html&amp;#039;)]&lt;br /&gt;
    html: TEMSFileResource;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour mapper plusieurs chemins différents (à la différence de l&amp;#039;exemple ci-dessus), ajoutez des composants &amp;#039;&amp;#039;&amp;#039;TEMSFileResource&amp;#039;&amp;#039;&amp;#039;. Le composant &amp;#039;&amp;#039;&amp;#039;TWebStencilsEngine&amp;#039;&amp;#039;&amp;#039; peut comporter un seul dispatcher dans la propriété correspondante. Pour associer davantage de dispatchers, utilisez le code suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
AddProcessor(html2, WebStencilsEngine1);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Présentation de RAD Server|Présentation de RAD Server]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:03 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:WebStencils</comments>
		</item>
		<item>
			<title>Utilisation de la directive de packaging faible</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Utilisation_de_la_directive_de_packaging_faible&amp;diff=223449&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Utilisation_de_la_directive_de_packaging_faible&amp;diff=223449&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Utilisation_de_la_directive_de_packaging_faible&quot; title=&quot;Utilisation de la directive de packaging faible&quot;&gt;Utilisation de la directive de packaging faible&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Compilation de packages}}&lt;br /&gt;
&lt;br /&gt;
Les unités faibles (faiblement packagées) sont des unités définies dans un package (c&amp;#039;est-à-dire un projet package). Toutefois, la liaison est différente pour les packages liés de façon dynamique.&lt;br /&gt;
&lt;br /&gt;
Normalement, une unité réside dans le package lui-même. Lorsqu&amp;#039;il est lié, le fichier [[Fichier de bibliothèque d&amp;#039;importation de package|BPI]] (bibliothèque d&amp;#039;importation de package) crée une référence au package.&lt;br /&gt;
{{Note| N&amp;#039;oubliez pas que le fichier [[Fichier de bibliothèque d&amp;#039;importation de package|BPI]] est lié au consommateur du package.}}&lt;br /&gt;
En revanche, une unité faiblement packagée réside dans le fichier [[Fichier de bibliothèque d&amp;#039;importation de package|BPI]]. Cela signifie que même pour un package lié de façon dynamique, une unité faiblement packagée est directement liée au module consommateur du package. Tout aussi important, si vous mettez à jour le fichier BPL à un autre moment que pendant la recompilation du logiciel à l&amp;#039;aide du fichier BPL, l&amp;#039;unité faiblement packagée supposément contenue dans le fichier BPL n&amp;#039;est pas mise à jour dans le logiciel qui l&amp;#039;utilise, car elle se trouve en fait dans la bibliothèque d&amp;#039;importation (BPI) et est donc liée dans le consommateur du package.&lt;br /&gt;
&lt;br /&gt;
Si vous utilisez seulement une unité faible à partir d&amp;#039;un package, votre application ne dépendra pas de ce package (vous ne disposerez donc pas d&amp;#039;une dépendance par rapport au fichier BPL). En effet, au lieu d&amp;#039;un objet d&amp;#039;importation, le fichier BPI contient le fichier objet de l&amp;#039;unité (comme s&amp;#039;il s&amp;#039;agissait d&amp;#039;un package statique), et comme le fichier objet est lié, il n&amp;#039;est pas dépendant du package. En d&amp;#039;autres termes, les unités faiblement packagées créent un mélange de packages dynamiques et statiques, où les unités faibles sont statiques.&lt;br /&gt;
{{Attention| Une unité faiblement packagée ne peut pas avoir de variables globales ni d&amp;#039;initialisation.}}&lt;br /&gt;
Voici des exemples qui décrivent ce comportement pour {{Delphi}} et {{CBuilder}} :&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
={{Delphi}}=&lt;br /&gt;
&lt;br /&gt;
La directive &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;$WEAKPACKAGEUNIT&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; affecte la manière dont un fichier &amp;lt;code&amp;gt;.dcu&amp;lt;/code&amp;gt; est stocké dans des fichiers &amp;lt;code&amp;gt;.dcp&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;.bpl&amp;lt;/code&amp;gt; d&amp;#039;un package.&lt;br /&gt;
&lt;br /&gt;
Si &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;{$WEAKPACKAGEUNIT ON}&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; figure dans un fichier unité, le compilateur omet l&amp;#039;unité dans les fichiers BPL quand c&amp;#039;est possible, et crée une copie locale non packagée de l&amp;#039;unité quand elle est requise par une autre application ou un autre package. Une unité compilée avec cette directive est dite &amp;#039;&amp;#039;faiblement packagée&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Par exemple, supposez que vous ayez créé un package appelé pack1 qui contient une seule unité, unit1. Supposez que unit1 n&amp;#039;utilise aucune unité supplémentaire, mais fait des appels à rare.dll. Si vous placez la directive &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;{$WEAKPACKAGEUNIT ON}&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; dans unit1.pas ({{Delphi}}) ou unit1.cpp (C++), lors de la compilation du package, unit1 n&amp;#039;est pas incluse dans pack1.bpl ; vous n&amp;#039;avez donc pas à distribuer de copie de rare.dll avec pack1. Cependant, unit1 sera toujours incluse dans pack1.dcp. Si un autre package ou une autre application utilisant pack1 fait référence à unit1, elle sera copiée depuis pack1.dcp et compilée directement dans le projet.&lt;br /&gt;
&lt;br /&gt;
Supposons maintenant que vous ajoutiez à pack1 une deuxième unité, unit2, et que unit2 utilise unit1. Cette fois, même si vous compilez pack1 avec &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;{$WEAKPACKAGEUNIT ON}&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; dans unit1.pas, le compilateur inclura unit1 dans pack1.bpl. &lt;br /&gt;
{{Note| Les fichiers unité contenant la directive &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;{$WEAKPACKAGEUNIT ON}&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; ne doivent pas contenir de variables globales, de section d&amp;#039;initialisation ou de section de finalisation.}}&lt;br /&gt;
La directive &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;{$WEAKPACKAGEUNIT ON}&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; est une fonctionnalité avancée à l&amp;#039;intention des développeurs distribuant leurs packages à d&amp;#039;autres programmeurs. Elle vous permet d&amp;#039;éviter la distribution de DLL rarement utilisées et supprime les conflits entre des packages qui peuvent dépendre de la même bibliothèque externe.&lt;br /&gt;
&lt;br /&gt;
Ainsi, l&amp;#039;unité PenWin référence PenWin.dll. La plupart des projets n&amp;#039;utilisent pas PenWin et la plupart des ordinateurs n&amp;#039;ont pas de fichier PenWin.dll installé. C&amp;#039;est pour cela que l&amp;#039;unité PenWin est faiblement packagée dans vcl. Lorsque vous compilez un projet utilisant PenWin et le package vcl, PenWin est copiée depuis vcl70.dcp et liée directement dans votre projet ; l&amp;#039;exécutable résultant est statiquement lié à PenWin.dll.&lt;br /&gt;
&lt;br /&gt;
Si PenWin n&amp;#039;avait pas été faiblement packagée, deux problèmes se seraient produits. Tout d&amp;#039;abord, il aurait fallu que la VCL soit liée de manière statique à PenWin.dll et vous n&amp;#039;auriez donc pas pu le charger sur un système ne disposant pas de PenWin.dll. De plus, si vous aviez tenté de créer un package contenant PenWin, une erreur de compilation aurait eu lieu, puisque l&amp;#039;unité PenWin est contenue dans la VCL et dans votre package. Ainsi, sans &amp;quot;packaging faible&amp;quot;, l&amp;#039;unité PenWin n&amp;#039;aurait pas pu être incluse dans des distributions standard de la VCL.&lt;br /&gt;
&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
={{CBuilder}}=&lt;br /&gt;
&lt;br /&gt;
La directive &amp;lt;code&amp;gt;#pragma package(smart_init, weak)&amp;lt;/code&amp;gt; affecte la manière dont un fichier .obj est stocké dans les fichiers [[Fichier de bibliothèque d&amp;#039;importation de package|.bpi]] et [[Fichier de bibliothèque partagée de package|.bpl]] d&amp;#039;un package. (Pour davantage d&amp;#039;informations sur les fichiers générés par le compilateur et le lieur, voir [[Packages et DLL standard|Packages et DLL standard]].) Si &amp;lt;code&amp;gt;#pragma package(smart_init, weak)&amp;lt;/code&amp;gt; figure dans un fichier unité, le lieur ne place pas l&amp;#039;unité dans les fichiers bpl si c&amp;#039;est possible, et crée une copie locale non packagée de l&amp;#039;unité si elle est nécessaire à une autre application ou un autre package. Une unité compilée avec cette directive est dite &amp;quot;faiblement packagée&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Supposons, par exemple, que vous avez créé un package appelé PACK ne contenant qu&amp;#039;une seule unité UNIT1, et que UNIT1 n&amp;#039;utilise aucune autre unité mais effectue des appels à RARE.dll. Si vous placez &amp;lt;code&amp;gt;#pragma package(smart_init, weak)&amp;lt;/code&amp;gt; dans UNIT1.cpp lorsque vous construisez votre package, UNIT1 ne sera pas incluse dans PACK.bpl ; vous n&amp;#039;aurez pas à distribuer de copies de RARE.dll avec PACK. Cependant, UNIT1 sera toujours incluse dans PACK.bpi. Si un autre package ou une autre application utilisant PACK fait référence à UNIT1, celle-ci sera copiée à partir de PACK.bpi et liée directement dans le projet.&lt;br /&gt;
&lt;br /&gt;
Supposons maintenant que vous ajoutiez à PACK une deuxième unité, UNIT2, et que UNIT2 utilise UNIT1. Cette fois, même si vous compilez PACK avec &amp;lt;code&amp;gt;#pragma package(smart_init, weak)&amp;lt;/code&amp;gt; dans UNIT1.cpp, le lieur inclura UNIT1 dans PACK.bpl. Mais d&amp;#039;autres packages ou applications faisant référence à UNIT1 utiliseront la copie (non packagée) extraite de PACK.bpi.&lt;br /&gt;
{{Note| Les fichiers unités contenant la directive &amp;lt;code&amp;gt;#pragma package(smart_init, weak)&amp;lt;/code&amp;gt; ne doivent pas contenir de variables globales.}}&lt;br /&gt;
&amp;lt;code&amp;gt;#pragma package(smart_init, weak)&amp;lt;/code&amp;gt; est une caractéristique avancée prévue pour les programmeurs qui distribuent leurs fichiers bpl à d&amp;#039;autres programmeurs {{CBuilder}}. Elle vous permet d&amp;#039;éviter la distribution de DLL rarement utilisées et supprime les conflits entre des packages qui peuvent dépendre de la même bibliothèque externe.&lt;br /&gt;
&lt;br /&gt;
Ainsi, l&amp;#039;unité PenWin référence PenWin.dll. La plupart des projets n&amp;#039;utilisent pas PenWin et la plupart des ordinateurs n&amp;#039;ont pas de fichier PenWin.dll installé. C&amp;#039;est pour cela que l&amp;#039;unité PenWin est faiblement packagée dans vcl. Lorsque vous liez un projet utilisant PenWin et le package vcl, PenWin est copiée depuis vcl60.bpi et liée directement dans votre projet ; l&amp;#039;exécutable résultant est statiquement lié à PenWin.dll.&lt;br /&gt;
&lt;br /&gt;
Si PenWin n&amp;#039;avait pas été faiblement packagée, deux problèmes se seraient produits. Tout d&amp;#039;abord, il aurait fallu que vcl soit lié de manière statique à PenWin.dll et vous n&amp;#039;auriez donc pas pu le charger sur un ordinateur ne disposant pas de PenWin.dll. De plus, si vous tentez de créer un package contenant PenWin, une erreur de construction aurait lieu, puisque l&amp;#039;unité PenWin serait contenue dans vcl et dans votre package. Ainsi, sans &amp;quot;packaging faible&amp;quot;, l&amp;#039;unité PenWin n&amp;#039;aurait pas pu être incluse dans les distributions standard de vcl.&lt;br /&gt;
&lt;br /&gt;
Pour de plus amples informations, voir la documentation C++ sur [[Rad en: Pragma package#.23pragma_package.28smart_init.2C_weak.29|#pragma package(smart_init, weak)]] la documentation {{Delphi}} sur le [[Packaging faible|packaging faible]] et la [[Utilisation de la directive de packaging faible|directive de packaging faible]].&lt;br /&gt;
&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Utilisation des packages et des composants - Présentation|Utilisation des packages et des composants - Présentation]]&lt;br /&gt;
*[[Compilation de packages|Compilation de packages]]&lt;br /&gt;
*[[Directives de compilation spécifiques aux packages|Directives de compilation spécifiques aux packages]]&lt;br /&gt;
*Directive du compilateur {{Delphi}} [[Packaging faible|Packaging faible]]&lt;br /&gt;
*[[Fichier de bibliothèque d&amp;#039;importation de package|Fichier de bibliothèque d&amp;#039;importation de package]]&lt;br /&gt;
*[[Packages et DLL standard|Packages et DLL standard]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Guide du développeur Windows]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:03 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Utilisation_de_la_directive_de_packaging_faible</comments>
		</item>
		<item>
			<title>Initialisation et Finalisation d&#039;unités pour la nouvelle chaîne d&#039;outils C++</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Initialisation_et_Finalisation_d%27unit%C3%A9s_pour_la_nouvelle_cha%C3%AEne_d%27outils_C%2B%2B&amp;diff=223447&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Initialisation_et_Finalisation_d%27unit%C3%A9s_pour_la_nouvelle_cha%C3%AEne_d%27outils_C%2B%2B&amp;diff=223447&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Initialisation_et_Finalisation_d%27unit%C3%A9s_pour_la_nouvelle_cha%C3%AEne_d%27outils_C%2B%2B&quot; title=&quot;Initialisation et Finalisation d&amp;#039;unités pour la nouvelle chaîne d&amp;#039;outils C++&quot;&gt;Initialisation et Finalisation d&amp;#039;unités pour la nouvelle chaîne d&amp;#039;outils C++&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Packages pour la nouvelle chaîne d&amp;#039;outils C++}}&lt;br /&gt;
&lt;br /&gt;
Les dépendances d&amp;#039;initialisation et de finalisation des unités peuvent entraîner des problèmes. Comme il s&amp;#039;agit d&amp;#039;un problème récurrent, {{Product}} a amélioré considérablement la gestion des packages afin d&amp;#039;assurer un comportement cohérent lors de la liaison statique et dynamique des packages. Cette page explique ceci en détail.&lt;br /&gt;
&lt;br /&gt;
{{Note| Gardez à l&amp;#039;esprit que lors de la liaison dynamique d&amp;#039;un package, un fichier BPL dynamique est utilisé. Il sera ensuite distribué avec l&amp;#039;application. Un BPL est un module chargé dynamiquement. En d&amp;#039;autres termes, c&amp;#039;est une DLL avec des éléments supplémentaires.&amp;lt;br /&amp;gt;&lt;br /&gt;
Les packages sont toujours disponibles en deux versions, la seconde étant une bibliothèque statique standard. La liaison statique d&amp;#039;un package consiste à établir une liaison avec cette bibliothèque statique standard, ce qui signifie que le contenu du package est intégré au binaire lié. Vous n&amp;#039;avez donc pas besoin de redistribuer des fichiers supplémentaires avec ce package.&amp;lt;br /&amp;gt;&lt;br /&gt;
Auparavant, la liaison dynamique et la liaison statique utilisaient des méthodes différentes pour l&amp;#039;initialisation et la finalisation des unités et des données, ce qui entraînait des comportements différents (et des bogues), selon la manière dont une application était liée. Désormais, une méthode unifiée simplifie et accélère la résolution des problèmes, garantissant ainsi un comportement quasi identique pour les deux types de liaisons.}}&lt;br /&gt;
&lt;br /&gt;
Dans {{Delphi}}, les unités ont des interdépendances. Cela signifie qu&amp;#039;une unité utilise une autre unité ainsi que les types définis dans cette dernière. Des dépendances d&amp;#039;initialisation et de finalisation peuvent apparaître lorsqu&amp;#039;une unité est initialisée, autrement dit dans l&amp;#039;une des situations suivantes : &lt;br /&gt;
&lt;br /&gt;
*  Mots-clés [https://docwiki.embarcadero.com/RADStudio/Athens/en/Programs_and_Units_(Delphi)#The_Initialization_Section Initialization] et [https://docwiki.embarcadero.com/RADStudio/Athens/en/Programs_and_Units_(Delphi)#The_Finalization_Section finalization].&lt;br /&gt;
* [https://docwiki.embarcadero.com/RADStudio/Athens/en/Methods_(Delphi)#Class_Constructors Constructeurs ou destructeurs de classes].&lt;br /&gt;
&lt;br /&gt;
Par exemple, lors de l&amp;#039;initialisation d&amp;#039;un objet qui dépend d&amp;#039;une autre instance d&amp;#039;objet ou d&amp;#039;une allocation située dans une autre unité, ce comportement provoque l&amp;#039;initialisation des unités basée sur un graphe de mappage de dépendances. Il n&amp;#039;existe pas de solution adaptée aux graphes de dépendances lorsqu&amp;#039;ils sont circulaires. Dans ce cas, des bogues sont susceptibles de se produire.&lt;br /&gt;
&lt;br /&gt;
Ainsi, il est fréquent que les problèmes d&amp;#039;initialisation entraînent des violations d&amp;#039;accès au démarrage ou lors du chargement d&amp;#039;un package, notamment lorsqu&amp;#039;une unité utilisée n&amp;#039;a pas encore été initialisée. {{Product}} empêche et limite ces problèmes.&lt;br /&gt;
&lt;br /&gt;
{{Note|Cette page traite de l&amp;#039;initialisation. Toutefois, ce qui est expliqué s&amp;#039;applique également à la finalisation, mais de manière inversée.}}&lt;br /&gt;
&lt;br /&gt;
Gardez à l&amp;#039;esprit que seules les unités utilisées sont initialisées et finalisées que vous utilisiez la liaison dynamique ou la liaison statique. Contrairement aux chaînes d&amp;#039;outils précédentes (Clang 5 et versions antérieures, et classique), les références d&amp;#039;unité circulaires sont gérées, ainsi que les unités faiblement packagées.&lt;br /&gt;
&lt;br /&gt;
==Comment les packages sont-ils initialisés dynamiquement ?==&lt;br /&gt;
&lt;br /&gt;
Lorsqu&amp;#039;un package est chargé dynamiquement, ses unités sont initialisées récursivement avec un compteur. Cela garantit que lorsqu&amp;#039;un second package utilisant les mêmes unités est chargé, celles-ci ne sont pas initialisées deux fois et ne sont finalisées qu&amp;#039;après le déchargement du dernier package.&lt;br /&gt;
&lt;br /&gt;
Les packages peuvent être dynamiquement initialisés de deux manières :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;#039;&amp;#039;&amp;#039;Via la [[Chargement des packages dans une application|bibliothèque d&amp;#039;importation de packages]], le fichier &amp;lt;code&amp;gt;.BPI&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;. C&amp;#039;est le système habituel. C&amp;#039;est aussi comme cela que la liaison automatique fonctionne.&amp;lt;br /&amp;gt;&lt;br /&gt;
Cette méthode utilise le système d&amp;#039;initialisation par enregistrement et initialise donc uniquement les unités utilisées. Des différences dans l&amp;#039;ordre d&amp;#039;initialisation des unités peuvent apparaître si un package dépend de deux emplacements dans la même application.&amp;lt;br /&amp;gt;&lt;br /&gt;
Supposons le scénario suivant :&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;App.exe&amp;lt;/code&amp;gt; dépend de &amp;lt;code&amp;gt;A.bpl&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;B.bpl&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;B.bpl&amp;lt;/code&amp;gt; dépend de &amp;lt;code&amp;gt;A.bpl&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au chargement de &amp;lt;code&amp;gt;App.exe&amp;lt;/code&amp;gt;, les unités qu&amp;#039;il utilise dans &amp;lt;code&amp;gt;A.bpl&amp;lt;/code&amp;gt; ainsi que toutes les unités interdépendantes, sont initialisées. Cela signifie que l&amp;#039;intégralité du graphe de dépendances des unités est initialisée.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant, les unités de &amp;lt;code&amp;gt;A.bpl&amp;lt;/code&amp;gt; dont dépend &amp;lt;code&amp;gt;B.bpl&amp;lt;/code&amp;gt; ne sont pas initialisées. Lorsque &amp;lt;code&amp;gt;App.exe &amp;lt;/code&amp;gt;charge &amp;lt;code&amp;gt;B.bpl&amp;lt;/code&amp;gt;, ses dépendances sont initialisées depuis &amp;lt;code&amp;gt;A.bpl&amp;lt;/code&amp;gt;. Si elles contiennent des unités de  &amp;lt;code&amp;gt;A.bpl&amp;lt;/code&amp;gt; ayant déjà été initialisées, ces unités ne seront pas initialisées une deuxième fois.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cela signifie que même si chaque graphe ou ensemble d&amp;#039;unités est initialisé correctement, il est possible que le chargement de &amp;lt;code&amp;gt;A.bpl&amp;lt;/code&amp;gt; par &amp;lt;code&amp;gt;App.exe&amp;lt;/code&amp;gt; avant &amp;lt;code&amp;gt;B.bpl&amp;lt;/code&amp;gt; provoque un changement de l&amp;#039;ordre de l&amp;#039;initialisation des unités de A.bpl par rapport à celui obtenu si &amp;lt;code&amp;gt;App.exe&amp;lt;/code&amp;gt; dépendait uniquement de &amp;lt;code&amp;gt;B.bpl&amp;lt;/code&amp;gt; ou le chargement s&amp;#039;était effectué dans l&amp;#039;ordre &amp;lt;code&amp;gt;B.bpl&amp;lt;/code&amp;gt; (-&amp;amp;gt; &amp;lt;code&amp;gt;A.bpl&amp;lt;/code&amp;gt;) puis &amp;lt;code&amp;gt;A.bpl&amp;lt;/code&amp;gt;. Ce comportement n&amp;#039;impacte normalement pas la stabilité, car toutes les unités utilisées sont initialisées dans l&amp;#039;ordre correct défini par les enregistrements d&amp;#039;initialisation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;#039;&amp;#039;&amp;#039;Via [[Chargement des packages avec la fonction LoadPackage|SysUtils::LoadPackage]]&amp;#039;&amp;#039;&amp;#039;. Avec cette méthode, les packages sont chargés dynamiquement.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Toutes les unités dépendantes du package sont initialisées récursivement, qu&amp;#039;elles soient utilisées ou non, car il est impossible de savoir lesquelles sont utilisées par le module de chargement.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lorsqu&amp;#039;un package est chargé, ses dépendances le sont aussi. Cela signifie que si vous chargez un package &amp;lt;code&amp;gt;Package1.bpl&amp;lt;/code&amp;gt; qui dépend de &amp;lt;code&amp;gt;rtl.bpl&amp;lt;/code&amp;gt; en le liant dynamiquement ou en utilisant &amp;lt;code&amp;gt;[[Chargement des packages avec la fonction LoadPackage|LoadPackage]]&amp;lt;/code&amp;gt;, ni vous ni &amp;lt;code&amp;gt;Package1.bpl&amp;lt;/code&amp;gt; n&amp;#039;avez besoin d&amp;#039;appeler &amp;lt;code&amp;gt;LoadPackage(“rtlXXX.bpl”)&amp;lt;/code&amp;gt;, car le chargement de &amp;lt;code&amp;gt;Package1.bpl&amp;lt;/code&amp;gt; provoque le chargement et l&amp;#039;initialisation de toutes les unités de package dépendantes utilisées par &amp;lt;code&amp;gt;Package1.bpl&amp;lt;/code&amp;gt;. Cela inclut la gestion des dépendances des unités contenues dans d&amp;#039;autres packages, comme &amp;lt;code&amp;gt;rtl.bpl&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une application peut mélanger les deux méthodes de chargement dynamique des packages, mais elle ne doit pas mélanger liaison statique et liaison dynamique.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;initialisation et la finalisation des unités deviennent plus complexes à mesure que les niveaux de dépendances augmentent au sein d&amp;#039;un package et entre les packages. Des tests approfondis sont nécessaires pour tester les dépendances complexes.&lt;br /&gt;
&lt;br /&gt;
Lors d&amp;#039;une liaison statique, seules les unités utilisées sont initialisées. Le lieur supprime les objets inutilisés, ce qui signifie que les unités non référencées ou non utilisées n&amp;#039;existent pas dans le binaire final.&lt;br /&gt;
&lt;br /&gt;
===Voir aussi===&lt;br /&gt;
&lt;br /&gt;
* [[Chargement des packages dans une application|Chargement des packages dans une application]]&lt;br /&gt;
* [[Chargement des packages avec la fonction LoadPackage|Chargement des packages avec la fonction LoadPackage]]&lt;br /&gt;
* [[Delphi RTTI et C++Builder|RTTI de Delphi et C++Builder]] &lt;br /&gt;
* [[Utilisation de la directive de packaging faible|Utilisation de la directive de package faible]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:03 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Initialisation_et_Finalisation_d%27unit%C3%A9s_pour_la_nouvelle_cha%C3%AEne_d%27outils_C%2B%2B</comments>
		</item>
		<item>
			<title>Présentation de l&#039;EDI</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Pr%C3%A9sentation_de_l%27EDI&amp;diff=223445&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Pr%C3%A9sentation_de_l%27EDI&amp;diff=223445&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Pr%C3%A9sentation_de_l%27EDI&quot; title=&quot;Présentation de l&amp;#039;EDI&quot;&gt;Présentation de l&amp;#039;EDI&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Introduction à RAD Studio}}&lt;br /&gt;
&lt;br /&gt;
Quand vous démarrez {{Variables|Product}}, l&amp;#039;environnement de développement intégré (EDI) s&amp;#039;ouvre et affiche plusieurs outils et menus. L&amp;#039;EDI vous aide à concevoir visuellement des interfaces utilisateur, à définir les propriétés des objets, à voir et gérer votre application de diverses façons.&lt;br /&gt;
&lt;br /&gt;
Cette rubrique d&amp;#039;aide décrit les outils qui sont disponibles dans l&amp;#039;EDI. Sachez que les outils spécifiques qui sont disponibles varient selon l&amp;#039;édition de {{Variables|Product}} que vous utilisez.&lt;br /&gt;
&lt;br /&gt;
==Page d&amp;#039;accueil==&lt;br /&gt;
&lt;br /&gt;
Lorsque vous ouvrez {{Product}}, les sections de la &amp;#039;&amp;#039;&amp;#039;[[Page d&amp;#039;accueil|page d&amp;#039;accueil]]&amp;#039;&amp;#039;&amp;#039; affichent différents types d&amp;#039;informations utiles et proposent des actions. &lt;br /&gt;
&lt;br /&gt;
La &amp;#039;&amp;#039;&amp;#039;page d&amp;#039;accueil&amp;#039;&amp;#039;&amp;#039; comporte plusieurs cadres que vous pouvez ajouter, supprimer, repositionner ou redimensionner comme vous le souhaitez pour organiser les sections avec les informations que vous considérez comme les plus utiles pour commencer.&lt;br /&gt;
&lt;br /&gt;
Si vous fermez la &amp;#039;&amp;#039;&amp;#039;page d&amp;#039;accueil&amp;#039;&amp;#039;&amp;#039;, vous pouvez la rouvrir en choisissant {{Menu|Voir &amp;amp;gt; Page d&amp;#039;accueil}}.&lt;br /&gt;
&lt;br /&gt;
[[File:Welcome page1.png|border|link=|950px]]&lt;br /&gt;
&lt;br /&gt;
{{Note| Une balise &amp;#039;&amp;#039;&amp;#039;[Administrateur]&amp;#039;&amp;#039;&amp;#039; s&amp;#039;affiche au début du libellé de la barre de titre lorsque vous exécutez &amp;#039;&amp;#039;&amp;#039;l&amp;#039;EDI&amp;#039;&amp;#039;&amp;#039; avec des privilèges élevés.}}&lt;br /&gt;
&lt;br /&gt;
==[[Style EDI|Thème foncé]]==&lt;br /&gt;
&lt;br /&gt;
{{Product}} {{Version}} vous permet de choisir un thème foncé pour l&amp;#039;EDI. Le thème foncé s&amp;#039;applique à un schéma de couleurs complètement différent et fournit une apparence adaptée à une utilisation prolongée ou à un environnement à faible luminosité.&lt;br /&gt;
&lt;br /&gt;
Les options du thème EDI vous permettent de réaliser les actions suivantes :&lt;br /&gt;
&lt;br /&gt;
*Faire correspondre au thème Windows&lt;br /&gt;
*Activer le thème foncé&lt;br /&gt;
*Activer le thème clair&lt;br /&gt;
*Activer le thème Mountain Mist&lt;br /&gt;
*Choisir les couleurs prédéfinies pour l&amp;#039;éditeur et pour l&amp;#039;inspecteur d&amp;#039;objets indépendamment du thème de l&amp;#039;EDI sélectionné.&lt;br /&gt;
*Choisir la couleur de la barre de titre&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux options relatives aux thèmes de l&amp;#039;EDI, choisissez {{Menu|Outils &amp;amp;gt; Options &amp;amp;gt; Interface utilisateur &amp;amp;gt; [[Style EDI|Style de l&amp;#039;EDI]]}} ou cliquez sur le menu déroulant accessible dans la barre supérieure, à côté de la zone de liste déroulante des dispositions.&lt;br /&gt;
&lt;br /&gt;
[[File:Top Bar Menu.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==Options d&amp;#039;accessibilité==&lt;br /&gt;
&lt;br /&gt;
Avec l&amp;#039;EDI, vous pouvez utiliser les outils MSAA (MS Active Accessibility). Vous pouvez activer les outils d&amp;#039;accessibilité de Windows à partir du menu Démarrer via &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Tous les programmes &amp;amp;gt; Accessoires &amp;amp;gt; Accessibilité&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Dispositions du bureau et option d&amp;#039;auto-enregistrement Bureau du projet==&lt;br /&gt;
&lt;br /&gt;
La disposition du bureau par défaut de l&amp;#039;EDI comporte les outils les plus fréquemment utilisés ({{Menu|Outils &amp;amp;gt; Options &amp;amp;gt; EDI &amp;amp;gt; [[Bureau et disposition|Bureau et Disposition]]}}). Vous pouvez utiliser le menu Voir pour afficher ou masquer certains outils. Vous pouvez aussi personnaliser votre bureau en déplaçant et en supprimant des éléments, et [[Enregistrement des dispositions du bureau|enregistrer les dispositions du bureau]] qui vous conviennent le mieux.&lt;br /&gt;
&lt;br /&gt;
Les paramètres du bureau sont enregistrés dans un fichier &amp;lt;code&amp;gt;.dsk&amp;lt;/code&amp;gt;, et l&amp;#039;option &amp;#039;&amp;#039;&amp;#039;d&amp;#039;enregistrement automatique du bureau du projet&amp;#039;&amp;#039;&amp;#039; (sur {{Menu|Outils &amp;amp;gt; Options &amp;amp;gt; EDI &amp;amp;gt; [[Saving and Recovering|Enregistrement et récupération]]}}) permet d&amp;#039;enregistrer un fichier &amp;lt;code&amp;gt;.dsk&amp;lt;/code&amp;gt; pour le projet en cours.  Le fichier &amp;lt;code&amp;gt;.dsk&amp;lt;/code&amp;gt; conserve aussi les points d&amp;#039;arrêt et les points de suivi en cours. Le fichier &amp;lt;code&amp;gt;&amp;amp;lt;monprojet&amp;amp;gt;.dsk&amp;lt;/code&amp;gt; est enregistré dans votre dossier projet. Voir [[Enregistrement des dispositions du bureau|Enregistrement des dispositions du bureau]].&lt;br /&gt;
&lt;br /&gt;
==Onglets Editeur==&lt;br /&gt;
&lt;br /&gt;
La partie centrale de la fenêtre principale de l&amp;#039;EDI affiche une série d&amp;#039;onglets avec plusieurs fichiers code source et d&amp;#039;autres éléments ouverts. Il s&amp;#039;agit de l&amp;#039;espace de travail central. Les onglets contiennent généralement du code source ou un concepteur de fiches, mais ils peuvent aussi contenir un éditeur spécial ou des panneaux d&amp;#039;information, qui ont tous des couleurs différentes pour que vous puissiez les différencier des onglets normaux de code/concepteur.&lt;br /&gt;
&lt;br /&gt;
[[File:Welcome screen tabs.png|link=|550px]]&lt;br /&gt;
&lt;br /&gt;
Les onglets peuvent être déplacés hors de leur fenêtre ou dupliqués en cliquant dessus avec le bouton droit et en sélectionnant &amp;#039;&amp;#039;&amp;#039;Déplacer &amp;amp;gt;&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;Fractionner &amp;amp;gt;&amp;#039;&amp;#039;&amp;#039; à gauche, à droite, en haut ou en bas de l&amp;#039;EDI. Pour de plus amples informations, voir [[Fractionnement de l&amp;#039;éditeur|Fractionnement de l&amp;#039;éditeur]].&lt;br /&gt;
&lt;br /&gt;
Vous pouvez modifier le comportement de l&amp;#039;onglet (comme le bouton Fermer ou la fermeture automatique des onglets) ou l&amp;#039;affichage des couleurs sur la page de l&amp;#039;onglet [[Options de l&amp;#039;EDI|Options de l&amp;#039;EDI]].&lt;br /&gt;
&lt;br /&gt;
==Utilisation d&amp;#039;une fiche==&lt;br /&gt;
&lt;br /&gt;
{{f|webdocs|En général, une fiche représente une fenêtre ou une page HTML dans l&amp;#039;interface utilisateur que vous concevez.|En général, une fiche représente une fenêtre dans l&amp;#039;interface utilisateur que vous concevez.}} Au moment de la conception, une fiche est affichée sur la surface du concepteur. Ajoutez des composants de la &amp;#039;&amp;#039;&amp;#039;[[Palette d&amp;#039;outils|Palette d&amp;#039;outils]]&amp;#039;&amp;#039;&amp;#039; sur la fiche pour créer votre interface utilisateur.&lt;br /&gt;
&lt;br /&gt;
{{Variables|Product}} propose une bibliothèque enrichie de fiches, comme décrit dans la section suivante. Sélectionnez la fiche la plus adaptée à la conception de votre application, qu&amp;#039;il s&amp;#039;agisse d&amp;#039;une application Web proposant des fonctionnalités de logique métier via le Web ou une application Windows proposant le traitement et l&amp;#039;affichage performant de contenu. Pour naviguer entre le concepteur et &amp;#039;&amp;#039;&amp;#039;[[Editeur de code|l&amp;#039;éditeur de code]]&amp;#039;&amp;#039;&amp;#039;, cliquez sur leur onglet respectif en bas de l&amp;#039;EDI.&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux fiches, choisissez &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Fichier &amp;amp;gt; Nouveau &amp;amp;gt; Autre&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;.&lt;br /&gt;
{{f|vcl|2=&lt;br /&gt;
&lt;br /&gt;
===Fiches VCL===&lt;br /&gt;
&lt;br /&gt;
Utilisez {{Variables|VCLForms}} pour créer des applications natives utilisant des composants VCL.&lt;br /&gt;
&lt;br /&gt;
Pour créer une application {{Variables|VCLForms}}, choisissez &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt; &amp;#039;&amp;#039;&amp;#039;Fichier &amp;amp;gt; Nouveau &amp;amp;gt; Autre &amp;amp;gt; [[Application Fiches VCL|Application Windows VCL]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Utilisez ensuite les classes de composants VCL pour créer votre application. Pour parcourir la bibliothèque VCL, voir [[lib_fr:Main Page|Référence VCL]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Concepteur de fiches==&lt;br /&gt;
&lt;br /&gt;
Le &amp;#039;&amp;#039;&amp;#039;[[Concepteur de fiches|Concepteur de fiches]]&amp;#039;&amp;#039;&amp;#039;, ou le concepteur, est affiché automatiquement dans le volet central quand vous utilisez une fiche. L&amp;#039;apparence et les fonctionnalités du concepteur dépendent du type de fiche que vous utilisez. {{f|webdocs|Par exemple, si vous utilisez une fiche Web, le concepteur affiche un éditeur de balise HTML.}}  Pour accéder au concepteur, cliquez sur l&amp;#039;onglet &amp;#039;&amp;#039;&amp;#039;Conception&amp;#039;&amp;#039;&amp;#039; en bas de l&amp;#039;EDI.&lt;br /&gt;
&lt;br /&gt;
===Composants visuels===&lt;br /&gt;
&lt;br /&gt;
Les composants visuels apparaissent dans la fiche lors de la conception et sont visibles pour l&amp;#039;utilisateur final à l&amp;#039;exécution. Ce sont les boutons, les libellés, les barres d&amp;#039;outils et les zones de liste.&lt;br /&gt;
{{f|vcl|2=&lt;br /&gt;
&lt;br /&gt;
===Aperçu d&amp;#039;une fiche  [[File:FormPreview.png]]===&lt;br /&gt;
&lt;br /&gt;
Une icône d&amp;#039;aperçu en bas à droite du concepteur (pour les fiches VCL) présente le positionnement de votre fiche sur l&amp;#039;écran à l&amp;#039;exécution. Vous pouvez ainsi positionner les fiches de votre application les unes en fonction des autres, au fur et à mesure que vous les concevez. Lorsque vous déplacez la fiche dans la fenêtre d&amp;#039;aperçu, les coordonnées x,y du coin supérieur gauche de la fiche sont affichées. Par exemple, &amp;quot;0,0&amp;quot; représente le coin supérieur gauche de l&amp;#039;écran.&lt;br /&gt;
&lt;br /&gt;
===Concepteur HTML===&lt;br /&gt;
&lt;br /&gt;
Utilisez le &amp;#039;&amp;#039;&amp;#039;concepteur HTML&amp;#039;&amp;#039;&amp;#039; pour visualiser et modifier les fiches Web ou les pages HTML. Ce concepteur comporte un &amp;#039;&amp;#039;&amp;#039;Editeur de balise&amp;#039;&amp;#039;&amp;#039; pour modifier les balises HTML avec la représentation visuelle de la fiche ou de la page. Vous pouvez aussi utiliser &amp;#039;&amp;#039;&amp;#039;l&amp;#039;inspecteur d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039; pour modifier les propriétés des éléments visibles de la page HTML et afficher les propriétés de la balise HTML en cours dans &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de balise&amp;#039;&amp;#039;&amp;#039;. Une boîte à options située au-dessus de &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de balise&amp;#039;&amp;#039;&amp;#039; vous permet d&amp;#039;afficher et de modifier les balises SCRIPT.&lt;br /&gt;
&lt;br /&gt;
Pour créer un nouveau fichier HTML, choisissez {{Menu|Fichier &amp;amp;gt; Nouveau &amp;amp;gt; Autre &amp;amp;gt; Web &amp;amp;gt; Page HTML}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Directives de conception===&lt;br /&gt;
&lt;br /&gt;
Si vous créez un composant pour une fiche, vous pouvez enregistrer un type d&amp;#039;objet, puis indiquer différents points sur ses limites, ou proches d&amp;#039;elles, qui constitueront des points &amp;quot;d&amp;#039;alignement&amp;quot;. Ces points d&amp;#039;alignement sont des traits verticaux ou horizontaux qui traversent les limites d&amp;#039;un contrôle virtuel.&lt;br /&gt;
&lt;br /&gt;
Quand les points d&amp;#039;alignement sont en place, vous pouvez fournir les informations sur les directives de l&amp;#039;UI de façon à ce que chaque composant respecte les prescriptions s&amp;#039;appliquant, par exemple, à la distance entre les contrôles, aux raccourcis, aux libellés prenant la focalisation, à l&amp;#039;ordre de tabulation, au nombre maximal d&amp;#039;éléments (zones de liste, menus), et ainsi de suite. De cette façon, le &amp;#039;&amp;#039;&amp;#039;Concepteur de fiches&amp;#039;&amp;#039;&amp;#039; peut assister le développeur de code dans l&amp;#039;adhésion aux directives établies sur l&amp;#039;UI.&lt;br /&gt;
&lt;br /&gt;
Si l&amp;#039;option &amp;#039;&amp;#039;&amp;#039;Accrocher à la grille&amp;#039;&amp;#039;&amp;#039; est activée (sur {{Menu|Outils &amp;amp;gt; Options &amp;amp;gt; Interface utilisateur &amp;amp;gt; [[Options du Concepteur de fiches|Concepteur de fiches]]}}), ainsi que &amp;#039;&amp;#039;&amp;#039;Utiliser les directives du concepteur&amp;#039;&amp;#039;&amp;#039;, les directives du concepteur sont prioritaires. Cela signifie que si un point de la grille se trouve dans la tolérance du nouvel emplacement et qu&amp;#039;une directive se trouve également dans le voisinage, le contrôle respecte la directive et non la position sur la grille, même si la directive ne coïncide pas avec la position sur la grille. La tolérance d&amp;#039;alignement est déterminée par la taille de la grille. Même si les options &amp;#039;&amp;#039;&amp;#039;Accrocher à la grille&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;Afficher la grille&amp;#039;&amp;#039;&amp;#039; sont désactivées, le Concepteur détermine la tolérance en fonction de la taille de la grille.&lt;br /&gt;
&lt;br /&gt;
==Palette d&amp;#039;outils==&lt;br /&gt;
&lt;br /&gt;
La &amp;#039;&amp;#039;&amp;#039;[[Palette d&amp;#039;outils|Palette d&amp;#039;outils]]&amp;#039;&amp;#039;&amp;#039;, située sur la colonne de droite, contient des éléments qui vous permettent de développer votre application. Les éléments affichés dépendent de la vue en cours. Par exemple, si vous affichez une fiche sur le concepteur, la &amp;#039;&amp;#039;&amp;#039;palette d&amp;#039;outils&amp;#039;&amp;#039;&amp;#039; affiche les composants appropriés à cette fiche. Double-cliquez sur un contrôle pour l&amp;#039;ajouter à votre fiche. Vous pouvez aussi le faire glisser vers une position désirée de la fiche. Si vous visualisez du code dans &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de code&amp;#039;&amp;#039;&amp;#039;, la &amp;#039;&amp;#039;&amp;#039;palette d&amp;#039;outils&amp;#039;&amp;#039;&amp;#039; affiche des segments de code que vous pouvez ajouter à votre application.&lt;br /&gt;
&lt;br /&gt;
===Composants personnalisés===&lt;br /&gt;
&lt;br /&gt;
Outre les composants qui sont installés avec {{Variables|Product}}, vous pouvez ajouter des composants personnalisés ou tiers à &amp;#039;&amp;#039;&amp;#039;la palette d&amp;#039;outils&amp;#039;&amp;#039;&amp;#039; et les enregistrer dans leur propre catégorie.&lt;br /&gt;
&lt;br /&gt;
===Templates de composants===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez créer des templates composés d&amp;#039;un ou de plusieurs composants. Après avoir organisé les composants sur une fiche, défini leurs propriétés et écrit du code pour eux, vous pouvez les enregistrer sous la forme d&amp;#039;un template de composant. Par la suite, en sélectionnant le template dans &amp;#039;&amp;#039;&amp;#039;la palette d&amp;#039;outils&amp;#039;&amp;#039;&amp;#039;, vous pouvez placer les composants préconfigurés sur une fiche en une seule étape&amp;amp;nbsp;; toutes les propriétés et tout le code de gestion d&amp;#039;événement associés sont simultanément ajoutés à votre projet. Vous pouvez repositionner les composants indépendamment les uns des autres, réinitialiser leurs propriétés, et&amp;amp;nbsp;créer ou modifier des gestionnaires d&amp;#039;événements comme si vous aviez positionné chaque composant séparément.&lt;br /&gt;
{{f|componenttoolbar|2=&lt;br /&gt;
&lt;br /&gt;
==Barre d&amp;#039;outils des composants==&lt;br /&gt;
&lt;br /&gt;
La &amp;#039;&amp;#039;&amp;#039;[[Barre d&amp;#039;outils des composants|Barre d&amp;#039;outils des composants]]&amp;#039;&amp;#039;&amp;#039; contient toutes les catégories et tous les composants qui apparaissent sur la &amp;#039;&amp;#039;&amp;#039;palette d&amp;#039;outils&amp;#039;&amp;#039;&amp;#039; régulière (Standard, Accès aux données, et ainsi de suite). Toutefois, la &amp;#039;&amp;#039;&amp;#039;barre d&amp;#039;outils des composants&amp;#039;&amp;#039;&amp;#039; affiche les catégories de composants sous la forme d&amp;#039;un ensemble d&amp;#039;onglets situé sur la barre d&amp;#039;outils au sommet de la fenêtre de l&amp;#039;EDI, similaire à {{Delphi|7}} {{Version|7}} et {{CBuilder|6}} {{Version|6}}. Cliquez sur un onglet de la barre d&amp;#039;outils des composants pour afficher les icônes des composants de cette catégorie. Cliquez ensuite sur une icône pour sélectionner un composant.&lt;br /&gt;
&lt;br /&gt;
Quand la &amp;#039;&amp;#039;&amp;#039;barre d&amp;#039;outils des composants&amp;#039;&amp;#039;&amp;#039; est activée, la &amp;#039;&amp;#039;&amp;#039;palette d&amp;#039;outils&amp;#039;&amp;#039;&amp;#039; est aussi disponible, et vous pouvez utiliser la &amp;#039;&amp;#039;&amp;#039;barre d&amp;#039;outils des composants&amp;#039;&amp;#039;&amp;#039; ou la &amp;#039;&amp;#039;&amp;#039;palette d&amp;#039;outils&amp;#039;&amp;#039;&amp;#039; pour ajouter des composants à votre application. Voir [[Activation de la barre d&amp;#039;outils des composants|Activation de la barre d&amp;#039;outils des composants]].&lt;br /&gt;
&lt;br /&gt;
Pour de plus amples informations sur les différentes barres d&amp;#039;outils disponibles dans l&amp;#039;EDI, voir &amp;#039;&amp;#039;&amp;#039;[[Barres d&amp;#039;outils|Barres d&amp;#039;outils]]&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Inspecteur d&amp;#039;objets==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Inspecteur d&amp;#039;objets|L&amp;#039;inspecteur d&amp;#039;objets]]&amp;#039;&amp;#039;&amp;#039;, situé sur la gauche, vous permet de définir les propriétés de conception et de créer des gestionnaires d&amp;#039;événements pour vos composants. Il fournit la connexion entre l&amp;#039;apparence visuelle de votre application et le code qui lui permet de fonctionner. &amp;#039;&amp;#039;&amp;#039;L&amp;#039;inspecteur d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039; contient deux onglets&amp;amp;nbsp;: &amp;#039;&amp;#039;&amp;#039;Propriétés&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;Evénements&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Utilisez l&amp;#039;onglet &amp;#039;&amp;#039;&amp;#039;Propriétés&amp;#039;&amp;#039;&amp;#039; pour modifier les attributs physiques des composants. Selon votre sélection, certaines catégories d&amp;#039;options vous permettent d&amp;#039;entrer une valeur dans une zone de texte, alors que d&amp;#039;autres attendent que vous sélectionniez une valeur dans une liste déroulante. Pour les opérations booléennes, vous passez de True à False, et vice-versa. Après avoir modifié les attributs physiques de vos composants, vous créez des gestionnaires d&amp;#039;événements qui gèrent les composants.&lt;br /&gt;
&lt;br /&gt;
Utilisez l&amp;#039;onglet &amp;#039;&amp;#039;&amp;#039;Evénements&amp;#039;&amp;#039;&amp;#039; pour spécifier les événements d&amp;#039;un objet spécifique que vous sélectionnez. S&amp;#039;il existe un gestionnaire d&amp;#039;événement, utilisez la liste déroulante pour le sélectionner. Par défaut, certaines options de &amp;#039;&amp;#039;&amp;#039;l&amp;#039;inspecteur d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039; sont repliées. Pour développer les options, cliquez sur le signe plus (+) en regard de la catégorie.&lt;br /&gt;
&lt;br /&gt;
Certains composants non visuels, comme les fournisseurs de données Borland offrent un accès rapide à des éditeurs comme &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de connexion&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de texte de commande&amp;#039;&amp;#039;&amp;#039;. Vous pouvez accéder à ces éditeurs dans la zone &amp;#039;&amp;#039;&amp;#039;Verbe du concepteur&amp;#039;&amp;#039;&amp;#039; en bas de &amp;#039;&amp;#039;&amp;#039;l&amp;#039;inspecteur d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039;. Pour ouvrir les éditeurs, placez votre curseur sur le nom de l&amp;#039;éditeur jusqu&amp;#039;à ce que le curseur prenne la forme d&amp;#039;une main et l&amp;#039;éditeur se change en un lien. Vous pouvez aussi cliquer avec le bouton droit sur le composant non visuel et défiler jusqu&amp;#039;à l&amp;#039;éditeur associé et le sélectionner. Sachez que les composants non visuels n&amp;#039;ont pas tous d&amp;#039;éditeur associé. En plus des éditeurs, cette zone peut aussi afficher des hyperliens pour montrer des éditeurs de composants personnalisés, lancer une page web et afficher des boîtes de dialogue.&lt;br /&gt;
&lt;br /&gt;
==Référentiel d&amp;#039;objets==&lt;br /&gt;
&lt;br /&gt;
Pour simplifier le développement, {{Variables|Product}} propose des templates prédéfinis, des fiches et d&amp;#039;autres éléments auxquels vous avez accès et que vous pouvez utiliser dans vos applications.&lt;br /&gt;
&lt;br /&gt;
===Contenu du référentiel d&amp;#039;objets===&lt;br /&gt;
&lt;br /&gt;
Le &amp;#039;&amp;#039;&amp;#039;[[Référentiel d&amp;#039;objets|Référentiel d&amp;#039;objets]]&amp;#039;&amp;#039;&amp;#039; contient des éléments qui correspondent aux types d&amp;#039;applications que vous pouvez développer. Il contient des templates, des fiches et bien d&amp;#039;autres éléments. Vous pouvez créer des projets tels qu&amp;#039;une bibliothèque de classes, une bibliothèque de contrôles, des applications console et autres en accédant aux templates disponibles.&lt;br /&gt;
&lt;br /&gt;
Pour ouvrir le &amp;#039;&amp;#039;&amp;#039;référentiel d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039;, choisissez &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Fichier &amp;amp;gt; Nouveau &amp;amp;gt; Autre&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;. La boîte de dialogue &amp;#039;&amp;#039;&amp;#039;Nouveaux éléments&amp;#039;&amp;#039;&amp;#039; affiche le contenu du &amp;#039;&amp;#039;&amp;#039;référentiel d’objets&amp;#039;&amp;#039;&amp;#039;. Vous pouvez aussi modifier ou retirer des objets existants du &amp;#039;&amp;#039;&amp;#039;référentiel d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039; en cliquant avec le bouton droit dans le &amp;#039;&amp;#039;&amp;#039;référentiel d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039; afin d&amp;#039;afficher les options d&amp;#039;édition.&lt;br /&gt;
&lt;br /&gt;
===Templates du référentiel d&amp;#039;objets===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez ajouter vos propres objets au &amp;#039;&amp;#039;&amp;#039;référentiel d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039; en tant que templates que vous réutilisez ou partagez avec d&amp;#039;autres développeurs. La réutilisation d&amp;#039;objets vous permet de concevoir des familles d&amp;#039;applications ayant une interface utilisateur et des fonctionnalités communes, afin de réduire les temps de développement et d&amp;#039;améliorer la qualité.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez ajouter dans le &amp;#039;&amp;#039;&amp;#039;référentiel d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039; un projet de démarrage, une démo, un template ou tout autre fichier utile et le rendre accessible depuis le menu Nouveau. Choisissez &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Projet  &amp;amp;gt; Ajouter au référentiel&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;. Sélectionnez votre fichier. Ensuite, lorsque vous sélectionnez la commande &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Fichier &amp;amp;gt; Nouveau&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;, vous pouvez choisir le fichier que vous venez d&amp;#039;ajouter et en utiliser un nouvel exemplaire.&lt;br /&gt;
&lt;br /&gt;
{{Variables|Product}} vous permet de créer plusieurs bibliothèques de templates personnalisées servant de base à la création de futurs projets. Les bibliothèques de templates vous permettent de définir l&amp;#039;apparence des projets et d&amp;#039;ajouter de nouveaux types de projets dans le &amp;#039;&amp;#039;&amp;#039;référentiel d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==Gestionnaire de projets==&lt;br /&gt;
&lt;br /&gt;
Un &amp;#039;&amp;#039;&amp;#039;projet&amp;#039;&amp;#039;&amp;#039; est constitué de plusieurs fichiers d&amp;#039;application. La &amp;#039;&amp;#039;&amp;#039;[[Fenêtre Projets|Fenêtre Projets]]&amp;#039;&amp;#039;&amp;#039;, située dans la colonne supérieure droite, permet de visualiser et d&amp;#039;organiser les fichiers de votre projet, comme les fiches, les exécutables, les assemblages, les objets et les fichiers bibliothèque. Dans le &amp;#039;&amp;#039;&amp;#039;Gestionnaire de projets&amp;#039;&amp;#039;&amp;#039;, vous pouvez ajouter, retirer et renommer des fichiers en utilisant la barre d&amp;#039;outils ou le menu contextuel. Vous pouvez même appeler la boîte de dialogue Options de projet depuis le menu contextuel du &amp;#039;&amp;#039;&amp;#039;Gestionnaire de projets&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
===Groupes de projets===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez combiner des projets associés pour former un &amp;#039;&amp;#039;&amp;#039;groupe de projets&amp;#039;&amp;#039;&amp;#039;. Pour ce faire, cliquez avec le bouton droit sur le noeud groupe de projets par défaut ([[File:Project Group.png]]) dans le &amp;#039;&amp;#039;&amp;#039;Gestionnaire de projets&amp;#039;&amp;#039;&amp;#039; et sélectionnez &amp;#039;&amp;#039;&amp;#039;[[Ajouter un nouveau projet|Ajouter un nouveau projet]]&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;Ajouter un projet existant&amp;#039;&amp;#039;&amp;#039;. La liaison de plusieurs projets en un groupe de projets vous permet de compiler le groupe de projets entier en une seule fois. Mais vous pouvez aussi compiler tout projet unique en cliquant avec le bouton droit sur un noeud de projet et en sélectionnant une des commandes de compilation ou de construction sur le menu contextuel. &lt;br /&gt;
&lt;br /&gt;
Après la création délibérée d&amp;#039;un groupe de projets, vous êtes invité à enregistrer le fichier &amp;lt;code&amp;gt;.groupproj&amp;lt;/code&amp;gt; quand vous quittez l&amp;#039;EDI ou entrez une commande d&amp;#039;enregistrement pour un des projets inclus. Vous pouvez aussi enregistrer explicitement un groupe de projets en utilisant les commandes du menu contextuel.&lt;br /&gt;
&lt;br /&gt;
==Explorateur de données==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Explorateur de données|L&amp;#039;explorateur de données]]&amp;#039;&amp;#039;&amp;#039; permet de parcourir des objets de schéma spécifiques au serveur de base de données, notamment les tables, les champs, les définitions de procédures stockées, les déclencheurs et les index. Les menus contextuels vous permettent de créer et de gérer les connexions aux bases de données. Vous pouvez aussi faire glisser et déposer des données depuis une source de données vers la plupart des fiches pour construire rapidement votre application de base de données.&lt;br /&gt;
&lt;br /&gt;
==Vue Structure==&lt;br /&gt;
&lt;br /&gt;
La &amp;#039;&amp;#039;&amp;#039;[[Vue Structure|Vue Structure]]&amp;#039;&amp;#039;&amp;#039; présente la hiérarchie du code source ou le langage HTML affiché dans &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de code&amp;#039;&amp;#039;&amp;#039;, ou les composants affichés sur le concepteur. Si la vue affiche la structure du code source ou le langage HTML, vous pouvez double-cliquer sur un élément pour accéder à sa déclaration ou à son emplacement dans &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de code&amp;#039;&amp;#039;&amp;#039;. Si la vue affiche des composants, vous pouvez double-cliquer sur un composant pour le sélectionner sur la fiche.&lt;br /&gt;
&lt;br /&gt;
Si votre code contient des erreurs de syntaxe, elles s&amp;#039;affichent dans le dossier &amp;#039;&amp;#039;&amp;#039;Erreurs&amp;#039;&amp;#039;&amp;#039; de la vue &amp;#039;&amp;#039;&amp;#039;Structure&amp;#039;&amp;#039;&amp;#039;. Double-cliquez sur une erreur pour localiser sa source dans &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de code&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez contrôler le contenu et l&amp;#039;aspect de la &amp;#039;&amp;#039;&amp;#039;vue Structure&amp;#039;&amp;#039;&amp;#039; en choisissant {{Menu| Outils &amp;amp;gt; Options &amp;amp;gt; Interface utilisateur &amp;amp;gt; [[Structure|Structure]]}}, puis en modifiant les paramètres.&lt;br /&gt;
&lt;br /&gt;
==[[Audit de code intelligent|Fenêtre de chat IA]]==&lt;br /&gt;
&lt;br /&gt;
La fenêtre de chat IA est une fiche ancrable de l&amp;#039;EDI, qui fonctionne comme n&amp;#039;importe quelle fenêtre de chat LLM. Vous pouvez taper une requête, choisir un moteur et attendre la réponse.&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir utiliser cette fonctionnalité, vous devez toutefois l&amp;#039;activer dans l&amp;#039;option [[Options relatives à l&amp;#039;audit de code intelligent|Audit de code intelligent]]. &lt;br /&gt;
&lt;br /&gt;
==Gestionnaire de l&amp;#039;historique==&lt;br /&gt;
&lt;br /&gt;
Le &amp;#039;&amp;#039;&amp;#039;[[Gestionnaire de l&amp;#039;historique|Gestionnaire de l&amp;#039;historique]]&amp;#039;&amp;#039;&amp;#039;, situé dans le volet central, vous permet de voir et de comparer les versions d&amp;#039;un fichier, y compris les diverses versions sauvegardées, les modifications enregistrées localement et le tampon mémoire des modifications non enregistrées d&amp;#039;un fichier actif. Si le fichier en cours est sous contrôle de version, tous les types des révisions sont disponibles dans le &amp;#039;&amp;#039;&amp;#039;gestionnaire de l&amp;#039;historique&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Intégration de Subversion dans l&amp;#039;EDI|L&amp;#039;intégration de Subversion dans l&amp;#039;EDI]]&amp;#039;&amp;#039;&amp;#039; est implémentée sur le &amp;#039;&amp;#039;&amp;#039;gestionnaire de l&amp;#039;historique&amp;#039;&amp;#039;&amp;#039;, qui affiche les informations Subversion chaque fois qu&amp;#039;elles sont disponibles dans le système de fichiers.&lt;br /&gt;
&lt;br /&gt;
Le &amp;#039;&amp;#039;&amp;#039;gestionnaire de l&amp;#039;historique&amp;#039;&amp;#039;&amp;#039; se trouve à droite de l&amp;#039;onglet &amp;#039;&amp;#039;&amp;#039;Code&amp;#039;&amp;#039;&amp;#039; et contient les pages à onglets suivantes :&lt;br /&gt;
&lt;br /&gt;
*La page &amp;#039;&amp;#039;&amp;#039;Contenu&amp;#039;&amp;#039;&amp;#039; affiche les versions actuelle et précédente du fichier.&lt;br /&gt;
*La page &amp;#039;&amp;#039;&amp;#039;Diff&amp;#039;&amp;#039;&amp;#039; affiche les différences entre les versions sélectionnées du fichier.&lt;br /&gt;
*La page &amp;#039;&amp;#039;&amp;#039;Info&amp;#039;&amp;#039;&amp;#039; affiche tous les libellés et commentaires associés au fichier actif.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez utiliser la barre d&amp;#039;outils du &amp;#039;&amp;#039;&amp;#039;gestionnaire de l&amp;#039;historique&amp;#039;&amp;#039;&amp;#039; pour actualiser les informations de révision, rétablir une version sélectionnée à la version la plus actuelle et synchroniser le défilement entre les visualiseurs source de la page &amp;#039;&amp;#039;&amp;#039;Contenu&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;Diff&amp;#039;&amp;#039;&amp;#039;, et &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de code&amp;#039;&amp;#039;&amp;#039;, et pour la navigation de fenêtre (comme Aller à la différence suivante).&lt;br /&gt;
&lt;br /&gt;
==Editeur de code==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Editeur de code|L&amp;#039;éditeur de code]]&amp;#039;&amp;#039;&amp;#039;, situé dans le volet central, propose un moyen pratique de visualiser et de modifier le code source. C&amp;#039;est un éditeur UTF8 complet et personnalisable qui comprend entre autres les sauvegardes automatiques, l&amp;#039;audit de code, la mise en surbrillance syntaxique, de multiples capacités d&amp;#039;annulation, l&amp;#039;aide contextuelle, les templates dynamiques, la saisie semi-automatique de blocs (achèvement de bloc), la recherche de classe, la recherche d&amp;#039;unités et l&amp;#039;importation d&amp;#039;un espace de nommage.&lt;br /&gt;
&lt;br /&gt;
==Débogueur==&lt;br /&gt;
&lt;br /&gt;
Les débogueurs intégrés vous permettent de trouver et de corriger les erreurs d&amp;#039;exécution et de logique dans votre application {{Variables|Product}}. En utilisant les débogueurs, vous pouvez parcourir le code pas à pas, définir des points d&amp;#039;arrêt et de suivi et inspecter ou modifier les valeurs du programme. Quand vous déboguez votre application, les [[Fenêtres de débogage - Index|fenêtres de débogage]] sont disponibles pour vous aider à gérer la session de débogage et vous donnent des informations sur l&amp;#039;état de votre application.&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Aperçu et page d&amp;#039;accueil|Aperçu et page d&amp;#039;accueil]]&lt;br /&gt;
*[[Référence EDI et utilitaires|Référence EDI et utilitaires]]&lt;br /&gt;
*[[Démarrage d&amp;#039;un projet - Présentation|Démarrage d&amp;#039;un projet - Présentation]]&lt;br /&gt;
*[[Enregistrement des dispositions du bureau|Enregistrement des dispositions du bureau]]&lt;br /&gt;
*[[Concepteur de fiches|Concepteur de fiches]]&lt;br /&gt;
*[[Ajout de composants à une fiche|Ajout de composants à une fiche]]&lt;br /&gt;
*[[Définition des propriétés et des événements|Définition des propriétés et des événements]]&lt;br /&gt;
*[[Editeur de code|Editeur de code]]&lt;br /&gt;
*[[Personnalisation de l&amp;#039;éditeur de code|Personnalisation de l&amp;#039;éditeur de code]]&lt;br /&gt;
*[[Fractionnement de l&amp;#039;éditeur|Fractionnement de l&amp;#039;éditeur]]&lt;br /&gt;
*[[Débogage des applications - Index|Débogage des applications]]&lt;br /&gt;
*[[Utilisation du Gestionnaire de l&amp;#039;historique|Utilisation du Gestionnaire de l&amp;#039;historique]]&lt;br /&gt;
*[[Rubriques de l&amp;#039;explorateur de classes Delphi|Rubriques de l&amp;#039;explorateur de classes Delphi]]&lt;br /&gt;
*[[Rubriques de l&amp;#039;explorateur de classes C++|Rubriques de l&amp;#039;explorateur de classes C++]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Prise en main]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:03 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Pr%C3%A9sentation_de_l%27EDI</comments>
		</item>
		<item>
			<title>Options de la cible</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Options_de_la_cible&amp;diff=223443&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Options_de_la_cible&amp;diff=223443&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Options_de_la_cible&quot; title=&quot;Options de la cible&quot;&gt;Options de la cible&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Boîte de dialogue Options de projet}}&lt;br /&gt;
&lt;br /&gt;
Ce jeu d&amp;#039;options vous permet d&amp;#039;appliquer le jeu d&amp;#039;options de projet défini sur la page en cours à diverses combinaisons de [[Plates-formes cible prises en charge|plate-forme cible]] et configurations de construction (ou à toutes les plates-formes, ou toutes les configurations).&lt;br /&gt;
&lt;br /&gt;
Les options de la cible occupent la ligne supérieure de toutes les pages, associées à la construction et à la compilation, de la boîte de dialogue &amp;#039;&amp;#039;&amp;#039;[[Boîte de dialogue Options de projet|Options de projet]]&amp;#039;&amp;#039;&amp;#039;, comme {{Menu | Projet &amp;amp;gt; Options &amp;amp;gt; [[Compilateur Delphi|Compilateur Delphi]]}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;Options de la cible&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Cible&lt;br /&gt;
|&lt;br /&gt;
La &amp;#039;&amp;#039;&amp;#039;Cible&amp;#039;&amp;#039;&amp;#039; est le nom de la configuration de construction associée aux options définies sur cette page. Le champ Cible affiche la configuration et la plate-forme cible associée, par exemple &amp;#039;&amp;#039;&amp;#039;Configuration Débogage - Plate-forme Windows 32 bits&amp;#039;&amp;#039;&amp;#039; (la configuration cible par défaut pour les applications Windows 32 bits).&lt;br /&gt;
Configurations intégrées que vous pouvez choisir comme cible :&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Toutes les configurations&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Débogage&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Release&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Toutes les configurations de construction que vous avez créées sont listées en plus des configurations intégrées. La configuration de construction par défaut initiale est &amp;#039;&amp;#039;&amp;#039;Débogage&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Les plates-formes cible associées à ces configurations de construction sont celles qui existent sur la &amp;#039;&amp;#039;&amp;#039;[[Fenêtre Projets|Fenêtre Projets]]&amp;#039;&amp;#039;&amp;#039;, sous le noeud [[Présentation des plates-formes cible|Plates-formes cible]] de votre noeud de projet. &lt;br /&gt;
:{{Note| Chaque projet doit inclure au moins une plate-forme cible.}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exemples&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
La sélection d&amp;#039;une &amp;#039;&amp;#039;&amp;#039;Cible&amp;#039;&amp;#039;&amp;#039; applique les options de la page en cours à la configuration sélectionnée sur la plate-forme sélectionnée. Par exemple, voici les résultats quand vous sélectionnez les valeurs suivantes dans la liste déroulante &amp;#039;&amp;#039;&amp;#039;Cible&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Toutes les configurations&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
**Applique les options de la page à chaque combinaison de plate-forme et de configuration.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;Toutes les configurations - Toutes les plates-formes&amp;#039;&amp;#039;&amp;#039; apparaît dans la boîte de dialogue.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Configuration Release&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
**Applique les options de la page à la configuration &amp;#039;&amp;#039;&amp;#039;Release&amp;#039;&amp;#039;&amp;#039; sur chaque combinaison de plate-forme et de configuration.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;Configuration Débogage - Toutes les plates-formes&amp;#039;&amp;#039;&amp;#039; apparaît dans la boîte de dialogue.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Configuration Débogage &amp;amp;gt; Plate-forme Windows 32 bits&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
**Applique les options de la page à la configuration &amp;#039;&amp;#039;&amp;#039;Débogage&amp;#039;&amp;#039;&amp;#039; sur la plate-forme &amp;#039;&amp;#039;&amp;#039;Windows 32 bits&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;Configuration Débogage - Plate-forme Windows 32 bits&amp;#039;&amp;#039;&amp;#039; apparaît dans la boîte de dialogue.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&amp;#039;informations sur les configurations de construction, voir [[Présentation des configurations de construction|Présentation des configurations de construction]].&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Appliquer...&lt;br /&gt;
|&lt;br /&gt;
Affiche la boîte de dialogue &amp;#039;&amp;#039;&amp;#039;[[Appliquer le jeu d&amp;#039;options|Appliquer le jeu d&amp;#039;options]]&amp;#039;&amp;#039;&amp;#039; afin d&amp;#039;appliquer les options d&amp;#039;un jeu d&amp;#039;options nommé existant (fichier &amp;lt;code&amp;gt;.optset&amp;lt;/code&amp;gt;) à la configuration en cours.&lt;br /&gt;
Pour plus d&amp;#039;informations sur les jeux d&amp;#039;options, voir [[Présentation des jeux d&amp;#039;options|Présentation des jeux d&amp;#039;options]].&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Enregistrer...&lt;br /&gt;
|&lt;br /&gt;
Affiche la boîte de dialogue &amp;#039;&amp;#039;&amp;#039;[[Commandes Enregistrer|Enregistrer]]&amp;#039;&amp;#039;&amp;#039;, vous permettant d&amp;#039;enregistrer les paramètres &amp;#039;&amp;#039;&amp;#039;Options de projet&amp;#039;&amp;#039;&amp;#039; en cours sous un fichier jeu d&amp;#039;options (fichier &amp;lt;code&amp;gt;.optset&amp;lt;/code&amp;gt;).&lt;br /&gt;
Pour plus d&amp;#039;informations sur les jeux d&amp;#039;options, voir [[Présentation des jeux d&amp;#039;options|Présentation des jeux d&amp;#039;options]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour changer la valeur d&amp;#039;une option sur la [[Boîte de dialogue Options de projet|boîte de dialogue Options de projet]], cliquez sur le champ valeur, puis entrez une valeur ou cliquez sur la [[Image:ProjectOptionsDownArrow2.jpg|flèche vers le bas]] affichée pour effectuer une sélection parmi les choix disponibles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Boîte de dialogue Options de projet|Boîte de dialogue Options de projet]]&lt;br /&gt;
*[[Eléments communs des pages Options de projet|Eléments communs des pages Options de projet]]&lt;br /&gt;
*[[Activation et configuration de la plate-forme cible|Ajout d&amp;#039;une plate-forme cible à votre projet]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Référence EDI]]&lt;br /&gt;
[[Category:XE2]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:03 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Options_de_la_cible</comments>
		</item>
		<item>
			<title>Sprintf, swprintf</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Sprintf,_swprintf&amp;diff=223441&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Sprintf,_swprintf&amp;diff=223441&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Sprintf,_swprintf&quot; title=&quot;Sprintf, swprintf&quot;&gt;Sprintf, swprintf&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Stdio.h - Index|stdio.h}}&lt;br /&gt;
{{DISPLAYTITLE:sprintf, swprintf}}&amp;lt;ideTag id=&amp;quot;sprintf&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;swprintf&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Fichier d&amp;#039;en-tête&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
stdio.h&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Catégorie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Routines de mémoire et de manipulation de chaînes&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Prototype&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;int sprintf(char *buffer, const char *format[, argument, ...]);&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;int swprintf(wchar_t *buffer, size_t bufsz, const wchar_t *format[, argument, ...]);&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Ecrit la sortie formatée dans une chaîne.&lt;br /&gt;
&lt;br /&gt;
{{Note| Pour plus de détails sur les spécificateurs de format, voir [[Printf, wprintf|printf]].}}&lt;br /&gt;
&lt;br /&gt;
[[Sprintf, swprintf|sprintf]] accepte une suite d&amp;#039;arguments, applique à chacun un spécificateur de format contenu dans la chaîne de format pointée par format, et envoie les données formatées dans une chaîne.&lt;br /&gt;
&lt;br /&gt;
[[Sprintf, swprintf|sprintf]] applique le premier spécificateur de format au premier argument, le second au second, etc. Il doit y avoir autant de spécificateurs de format que d&amp;#039;arguments.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Valeur renvoyée&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
En cas de réussite, [[Sprintf, swprintf|sprintf]] renvoie le nombre d&amp;#039;octets. La valeur renvoyée n&amp;#039;inclut pas l&amp;#039;octet nul terminal dans le décompte.&lt;br /&gt;
&lt;br /&gt;
En cas d&amp;#039;erreur, [[Sprintf, swprintf|sprintf]] renvoie EOF.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exemple&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 #include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;math.h&amp;amp;gt;&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
    char buffer[80];&lt;br /&gt;
    sprintf(buffer, &amp;quot;An approximation of Pi is %f\n&amp;quot;, M_PI);&lt;br /&gt;
    puts(buffer);&lt;br /&gt;
    return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Portabilité&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;POSIX&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;Win32&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;ANSI C&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;ANSI C++&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
sprintf&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
+&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
+&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
+&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
+&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
swprintf&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
+&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
+&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
+&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Spécificateurs de format dans C/C++|Spécificateurs de format dans C/C++]]&lt;br /&gt;
* [[Chaîne de format printf|Chaîne de format printf]]&lt;br /&gt;
* [[Spécificateurs de format printf|Spécificateurs de format printf]]&lt;br /&gt;
*[[Printf, wprintf|printf, wprintf]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Référence C++]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:02 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Sprintf,_swprintf</comments>
		</item>
		<item>
			<title>Sprintf s, swprintf s</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Sprintf_s,_swprintf_s&amp;diff=223439&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Sprintf_s,_swprintf_s&amp;diff=223439&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Sprintf_s,_swprintf_s&quot; title=&quot;Sprintf s, swprintf s&quot;&gt;Sprintf s, swprintf s&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Stdio.h - Index|stdio.h}}&lt;br /&gt;
{{DISPLAYTITLE:sprintf_s, swprintf_s}}&amp;lt;ideTag id=&amp;quot;sprintf_s&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;swprintf_s&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Fichier d&amp;#039;en-tête&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
stdio.h&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Catégorie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Fonctions d&amp;#039;entrée/sortie formatées&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Prototype&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;int sprintf_s(char * restrict s, rsize_t n, const char * restrict format, ...);&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;int swprintf_s(wchar_t* restrict buffer, rsize_t bufsz, const wchar_t* restrict format, ... );&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Remplace [[Sprintf, swprintf|sprintf]] tout en renforçant la sécurité.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;sprintf_s&amp;#039;&amp;#039;&amp;#039; est équivalente à &amp;#039;&amp;#039;&amp;#039;sprintf&amp;#039;&amp;#039;&amp;#039;, sauf pour les contraintes d&amp;#039;exécution qui imposent que &amp;#039;&amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;format&amp;#039;&amp;#039;&amp;#039; ne soient pas des pointeurs null. D&amp;#039;autres contraintes exigent que chaque spécificateur de format &amp;#039;&amp;#039;&amp;#039;%s&amp;#039;&amp;#039;&amp;#039; dans &amp;#039;&amp;#039;&amp;#039;format&amp;#039;&amp;#039;&amp;#039; ait un argument non null et que le spécificateur &amp;#039;&amp;#039;&amp;#039;%n&amp;#039;&amp;#039;&amp;#039; ne soit pas utilisé dans &amp;#039;&amp;#039;&amp;#039;format&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Si une violation de contrainte d&amp;#039;exécution se produit et que &amp;#039;&amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;#039; n&amp;#039;est pas un pointeur null, et que &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; est supérieur à zéro et inférieur à RSIZE_MAX, la fonction place &amp;#039;\0&amp;#039; dans &amp;#039;&amp;#039;&amp;#039;s[0]&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
A l&amp;#039;inverse de [[Snprintf s, snwprintf s|snprintf_s, snwprintf_s]], dans le cas où &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; est plus grand que le tableau pointé par &amp;#039;&amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;#039;, elle déclenche une exception de contrainte d&amp;#039;exécution.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Valeur renvoyée&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
En cas de réussite, &amp;#039;&amp;#039;&amp;#039;sprintf_s&amp;#039;&amp;#039;&amp;#039; renvoie le nombre de caractères, sans inclure le &amp;#039;\0&amp;#039; terminal. &lt;br /&gt;
En cas d&amp;#039;erreur de codage, &amp;#039;&amp;#039;&amp;#039;sprintf_s&amp;#039;&amp;#039;&amp;#039; renvoie une valeur négative. Pour les autres types d&amp;#039;erreurs, zéro est renvoyé.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exemple&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 #include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;math.h&amp;amp;gt;&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
    char buffer[80];&lt;br /&gt;
    sprintf_s(buffer, 40, &amp;quot;An approximation of Pi is %f\n&amp;quot;, M_PI);&lt;br /&gt;
    puts(buffer);&lt;br /&gt;
    return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Portabilité&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!    &amp;#039;&amp;#039;&amp;#039;POSIX&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;Win32&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;ANSI C&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;ANSI C++&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
sprintf_s&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
+&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
+&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
+&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
+&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
swprintf_s&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
+&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
+&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
+&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Spécificateurs de format dans C/C++|Spécificateurs de format dans C/C++]]&lt;br /&gt;
* [[Bibliothèque C sécurisante|Bibliothèque C sécurisante]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Référence C++]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:02 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Sprintf_s,_swprintf_s</comments>
		</item>
		<item>
			<title>Fractionnement de l&#039;éditeur</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Fractionnement_de_l%27%C3%A9diteur&amp;diff=223437&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Fractionnement_de_l%27%C3%A9diteur&amp;diff=223437&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Fractionnement_de_l%27%C3%A9diteur&quot; title=&quot;Fractionnement de l&amp;#039;éditeur&quot;&gt;Fractionnement de l&amp;#039;éditeur&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;La vue [[Fractionnement de l&amp;#039;éditeur|Fractionnement de l&amp;#039;éditeur]] permet d’utiliser plusieurs éditeurs côte à côte, les uns au-dessus des autres, ou de façon combinée, le tout dans une même fenêtre. Cela inclut la possibilité de faire glisser des ensembles d&amp;#039;onglets vers des fenêtres flottantes, puis de les replacer dans l&amp;#039;EDI. &lt;br /&gt;
Elle permet aussi d&amp;#039;avoir plusieurs dispositions personnalisées et offre diverses possibilités de manipulation : disposition simple en deux colonnes, disposition sur plusieurs lignes, ou une configuration particulièrement adaptée à votre flux de travail.&lt;br /&gt;
Vous pouvez travailler en ayant plusieurs onglets ouverts, et ouvrir la même unité dans chacun de ces onglets. Vous pouvez aussi avoir plusieurs onglets ouverts : l&amp;#039;un avec le concepteur de fiche et plusieurs autres avec le code de l&amp;#039;unité correspondante. L&amp;#039;onglet contenant le concepteur de fiche peut aussi être déplacé. &lt;br /&gt;
Il n&amp;#039;y a &amp;#039;&amp;#039;&amp;#039;aucune limite&amp;#039;&amp;#039;&amp;#039; quant au nombre de vues fractionnées, que ce soit horizontalement ou verticalement.&lt;br /&gt;
&lt;br /&gt;
===Utilisation du fractionnement de l&amp;#039;éditeur===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez accéder à la vue Fractionnement de l&amp;#039;éditeur en cliquant avec le bouton droit sur un onglet et en choisissant &amp;#039;&amp;#039;&amp;#039;Fractionner    &amp;amp;gt;&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;Déplacer &amp;amp;gt;&amp;#039;&amp;#039;&amp;#039;. Le fractionnement crée une nouvelle version de l&amp;#039;onglet sélectionné, et le déplacement provoque son ouverture à l&amp;#039;endroit sélectionné dans l&amp;#039;EDI.&lt;br /&gt;
&lt;br /&gt;
[[File:Using-spliteditor.png|=link|400px|border]]&lt;br /&gt;
&lt;br /&gt;
Les raccourcis suivants peuvent être utilisés pour les deux options :&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fractionner en haut :&amp;#039;&amp;#039;&amp;#039; Alt+Maj+T&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fractionner en bas :&amp;#039;&amp;#039;&amp;#039; Alt+Maj+B&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fractionner à droite :&amp;#039;&amp;#039;&amp;#039; Alt+Maj+R&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fractionner à gauche :&amp;#039;&amp;#039;&amp;#039; Alt+Maj+L&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Déplacer en haut :&amp;#039;&amp;#039;&amp;#039; Ctrl+Alt+Maj+T&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Déplacer à gauche :&amp;#039;&amp;#039;&amp;#039; Ctrl+Alt+Maj+L&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Déplacer à droite :&amp;#039;&amp;#039;&amp;#039; Ctrl+Alt+Maj+R&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Déplacer en bas :&amp;#039;&amp;#039;&amp;#039; Ctrl+Alt+Maj+B&lt;br /&gt;
&lt;br /&gt;
Alternativement, vous pouvez utiliser [[Fractionnement de l&amp;#039;éditeur|Fractionnement de l&amp;#039;éditeur]] en faisant glisser un fichier de la vue Projets dans un onglet de l&amp;#039;éditeur. Vous pouvez aussi effectuer un clic droit sur le fichier du projet, puis sélectionner l&amp;#039;option &amp;#039;&amp;#039;&amp;#039;Ouvrir dans&amp;#039;&amp;#039;&amp;#039; et choisir l&amp;#039;onglet de l&amp;#039;éditeur dans lequel vous souhaitez ouvrir le fichier.&lt;br /&gt;
&lt;br /&gt;
Lorsque deux onglets sont dans une fenêtre, chacun a une barre de titre.&lt;br /&gt;
&lt;br /&gt;
Le fractionnement de l&amp;#039;éditeur vous permet de :&lt;br /&gt;
&lt;br /&gt;
*Faire glisser un onglet de l&amp;#039;éditeur, ou un ensemble d&amp;#039;onglets, en faisant glisser la barre de titre et en l&amp;#039;ancrant sur n&amp;#039;importe quel côté de la fenêtre de l&amp;#039;EDI.&lt;br /&gt;
*Le faire glisser et l&amp;#039;ancrer sur n&amp;#039;importe côté de l&amp;#039;éditeur (gauche, droit, haut, bas).&lt;br /&gt;
*Le fusionner avec un ensemble d&amp;#039;onglets en le faisant glisser au centre d&amp;#039;un éditeur existant, y compris une fenêtre flottante d&amp;#039;onglets.&lt;br /&gt;
*Le faire glisser en dehors de sa propre fenêtre (soit un seul onglet ou un ensemble d&amp;#039;onglets).&lt;br /&gt;
&lt;br /&gt;
La plupart des opérations peuvent être réalisées sur des onglets individuels. Il peut s&amp;#039;agir par exemple de déplacer un onglet entre des ensembles d&amp;#039;onglets ancrés en faisant glisser l&amp;#039;onglet individuel d&amp;#039;un emplacement à un autre.&lt;br /&gt;
&lt;br /&gt;
Chaque ensemble d&amp;#039;onglets peut être déplacé à l&amp;#039;extérieur de sa propre fenêtre. Faites glisser la barre de titre pour le déplacer.&lt;br /&gt;
 {{Tip| Vous pouvez appuyer sur Ctrl tout en faisant glisser l&amp;#039;ensemble d&amp;#039;onglets pour vous assurer qu&amp;#039;il ne s&amp;#039;ancre pas.}}&lt;br /&gt;
&lt;br /&gt;
De la même façon, chaque fenêtre peut être ancrée à côté d&amp;#039;un autre ensemble d&amp;#039;onglets. Pour cela, vous devez faire glisser la barre de titre.&lt;br /&gt;
&lt;br /&gt;
{{Note|La plupart des éditeurs/groupes disparaissent de la vue lorsqu&amp;#039;ils sont fermés. Toutefois, la fermeture du premier éditeur (celui qui était auparavant l&amp;#039;éditeur de la fenêtre principale) avec le bouton ‘X’ provoque la fermeture de tous les onglets qu&amp;#039;il contient. L&amp;#039;espace qu&amp;#039;il occupait reste ouvert, car l&amp;#039;éditeur original ne peut pas être fermé. Cela n&amp;#039;a aucune incidence tant que les groupes d&amp;#039;onglets ne sont pas fermés. Il n&amp;#039;y a aucun impact visible lorsque vous créez, déplacez ou ancrez les onglets dans vos tâches.}}&lt;br /&gt;
&lt;br /&gt;
[[File:Split Editor Example.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;C&amp;#039;est l&amp;#039;une des nombreuses façons de configurer la vue Fractionnement de l&amp;#039;éditeur. Elle comporte une fenêtre d&amp;#039;édition sur la gauche, deux à droite, et les volets sont masqués mais apparaissent lorsqu&amp;#039;ils sont survolés par la souris.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===Concepteur et code===&lt;br /&gt;
&lt;br /&gt;
Les vues Fractionnement de l&amp;#039;éditeur permettent de modifier un même fichier dans deux fenêtres d&amp;#039;édition affichées côte à côte, chacune affichant le même contenu de fichier. Lorsque vous tapez dans l&amp;#039;une et que vous faites défiler le texte jusqu&amp;#039;à un emplacement, le texte apparaît dans l&amp;#039;autre fenêtre. Vous pouvez faire défiler les deux fenêtres indépendamment l&amp;#039;une de l&amp;#039;autre, ce qui permet de modifier le fichier à plusieurs endroits. &lt;br /&gt;
Vous pouvez ainsi ouvrir un même fichier dans autant d&amp;#039;onglets que vous le souhaitez.&lt;br /&gt;
{{Note|Gardez toujours à l&amp;#039;esprit qu&amp;#039;il n&amp;#039;y a qu&amp;#039;un seul fichier (module ou tampon de fichier en termes internes) affiché dans plusieurs vues. Ainsi, toute modification effectuée dans l&amp;#039;une de ces vues sera répercutée dans les autres vues (il ne s&amp;#039;agit pas de copier ou de dupliquer une modification). &amp;amp;lt;br /&amp;amp;gt;&lt;br /&gt;
Autrement dit, toute modification de fichier depuis une fenêtre d&amp;#039;édition concerne le fichier lui-même et pas la fenêtre. Cette modification sera répercutée dans les autres vues. }}&lt;br /&gt;
&lt;br /&gt;
===Conseils et astuces===&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Enregistrez&amp;#039;&amp;#039;&amp;#039; la configuration des éditeurs en tant que disposition du bureau. Sinon, vous risquez de passer beaucoup de temps à définir une présentation qui ne sera pas sauvegardée.&lt;br /&gt;
&lt;br /&gt;
{{Notes|&lt;br /&gt;
&lt;br /&gt;
*Lorsque la disposition de bureau est modifiée, la configuration change également (par ex. lorsque l&amp;#039;EDI commence le débogage et passe en &amp;#039;&amp;#039;&amp;#039;Disposition de débogage&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Lorsque vous changez de disposition, tout groupe d&amp;#039;onglets qui ne trouve pas sa place dans la disposition est détaché et devient une fenêtre flottante.}}&lt;br /&gt;
*Activez &amp;#039;&amp;#039;&amp;#039;Options&amp;#039;&amp;#039;&amp;#039; &amp;amp;gt; &amp;#039;&amp;#039;&amp;#039;Enregistrement et récupération&amp;#039;&amp;#039;&amp;#039; &amp;amp;gt; &amp;#039;&amp;#039;&amp;#039;Enregistrer le bureau du projet lors de la fermeture&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;Enregistrer l&amp;#039;état de l&amp;#039;éditeur à la fermeture d&amp;#039;un onglet&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Lorsque vous enregistrez l&amp;#039;état de l&amp;#039;éditeur, vous enregistrez également la position de défilement, les zones réduites ou développées, etc. C&amp;#039;est très pratique lorsque plusieurs fenêtres d&amp;#039;édition du même fichier sont ouvertes. Ainsi, lorsque vous rouvrez votre bureau et rouvrez le projet (ou tout simplement, lorsque vous rouvrez un éditeur précédemment fermé), la nouvelle fenêtre d&amp;#039;édition s&amp;#039;affiche telle qu&amp;#039;elle était au moment de la fermeture.&lt;br /&gt;
*Pensez à désancrer les volets ancrables d&amp;#039;ancienne génération. Ils sont réduits sous forme de petit onglet sur un côté de la fenêtre principale. Vous pouvez les rendre visibles à nouveau en cliquant dessus, et ils restent affichés tant qu’ils ont la focalisation. Pour cela, vous devez cliquer sur le bouton d&amp;#039;épinglage dans la barre de titre du volet, à côté du bouton X. Cette fonctionnalité existe depuis de nombreuses années, mais elle n’était vraiment utile que lorsque l’espace à l&amp;#039;écran était limité. Maintenant que plusieurs fenêtres d&amp;#039;édition peuvent être fractionnées et ancrées ensemble, il devient très pratique de pouvoir désépingler les volets latéraux pour libérer de l’espace horizontal.&lt;br /&gt;
*Pensez à faire un clic droit sur un onglet &amp;#039;&amp;#039;&amp;#039;&amp;amp;gt; Fractionner &amp;amp;gt; A droite&amp;#039;&amp;#039;&amp;#039; (ou &amp;#039;&amp;#039;&amp;#039;A gauche&amp;#039;&amp;#039;&amp;#039;). L&amp;#039;utilisation de plusieurs colonnes est certainement la configuration la plus courante pour les vues fractionnées. Plus vous utiliserez cette fonctionnalité, plus vous constaterez son utilité.&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Présentation de l&amp;#039;EDI|Présentation de l&amp;#039;EDI]]&lt;br /&gt;
*[[Aperçu et page d&amp;#039;accueil|Aperçu et page d&amp;#039;accueil]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:02 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Fractionnement_de_l%27%C3%A9diteur</comments>
		</item>
		<item>
			<title>Audit de code intelligent</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Audit_de_code_intelligent&amp;diff=223435&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Audit_de_code_intelligent&amp;diff=223435&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Audit_de_code_intelligent&quot; title=&quot;Audit de code intelligent&quot;&gt;Audit de code intelligent&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Audit de code intelligent|Smart CodeInsight]] est une architecture ouverte qui vous permet d&amp;#039;utiliser vos moteurs d&amp;#039;IA préférés. En plus des fonctionnalités déjà présentes, {{Product}} vous propose également une intégration de l&amp;#039;interface utilisateur personnalisable :&lt;br /&gt;
&lt;br /&gt;
* Moteur d&amp;#039;IA de base et ToolsAPI.&lt;br /&gt;
*Intégration de l&amp;#039;EDI :&lt;br /&gt;
** [[#Options de configuration|Options de configuration pour les moteurs]].&lt;br /&gt;
** [[#Commandes de menu de l&amp;#039;éditeur|Commandes de menu de l&amp;#039;éditeur permettant d&amp;#039;invoquer des opérations IA]].&lt;br /&gt;
** [[#Fenêtre de chat IA|Fenêtre de chat IA]].&lt;br /&gt;
* Prise en charge des fournisseurs LLM en ligne et hors ligne tels que :&lt;br /&gt;
** OpenAI, Gemini et Claude (en ligne).&lt;br /&gt;
** Ollama (hors ligne).&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
::{{Tip| Ollama est distribué en tant que produit open source sous licence MIT. Les modèles individuels que vous êtes susceptible d&amp;#039;utiliser avec Ollama ont leurs propres licences. La politique d&amp;#039;utilisation &amp;quot;Codellama Acceptable Use Policy&amp;quot; est disponible sur cette page.}}&lt;br /&gt;
::{{Note| Pour les adeptes de ToolsAPI, {{Product}} vous permet de créer votre propre plugin API. Pour plus d&amp;#039;informations, consultez la page [[Create and implement your AI plugin|Créer et implémenter votre plugin IA]].}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{Product}} ne fournit pas d&amp;#039;accès à ces moteurs. L&amp;#039;utilisation de ces services d&amp;#039;IA nécessite que l&amp;#039;utilisateur accepte les conditions d&amp;#039;utilisation de chaque éditeur, reçoive une clé API permettant d&amp;#039;entrer dans la configuration de {{Product}}, et paie les frais de licence de la société d&amp;#039;IA concernée. &lt;br /&gt;
La seule exception concerne Ollama qui peut être utilisé hors ligne gratuitement et être installé en local ou sur un serveur de votre choix.}}&lt;br /&gt;
&lt;br /&gt;
==Options de configuration==&lt;br /&gt;
&lt;br /&gt;
{{Product}} vous permet de configurer et de contrôler pleinement la confidentialité de différentes façons. Vous pouvez ainsi :&lt;br /&gt;
&lt;br /&gt;
* Désactiver la fonctionnalité IA complète à partir d&amp;#039;un paramètre unique.&lt;br /&gt;
* Activer ou désactiver chacun des quatre moteurs.&lt;br /&gt;
* Sélectionner le moteur par défaut de chacun des éléments d&amp;#039;interface utilisateur (fenêtre de chat et menu éditeur).&lt;br /&gt;
&lt;br /&gt;
Toutes ces fonctionnalités peuvent être configurées dans la fenêtre Options de l&amp;#039;EDI. Consultez la page [[Options relatives à l&amp;#039;audit de code intelligent|Configuration de l&amp;#039;audit de code intelligent]] pour plus d&amp;#039;informations sur chaque rubrique.&lt;br /&gt;
&lt;br /&gt;
* Les actions suivantes ont aussi été implémentées pour sécuriser le système.&lt;br /&gt;
* Les clés API sont stockées dans un format chiffré.&lt;br /&gt;
* Vous avez la possibilité d&amp;#039;utiliser un moteur local, hors ligne.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Commandes du menu Editeur==&lt;br /&gt;
&lt;br /&gt;
Le menu Editeur propose des opérations préconfigurées pour le code sélectionné dans l&amp;#039;éditeur. Le but est d&amp;#039;analyser et d&amp;#039;optimiser une partie du code source de votre application.&lt;br /&gt;
&lt;br /&gt;
Le moteur LLM réagit en renvoyant le résultat dans une fenêtre de l&amp;#039;éditeur sous forme de commentaire après le code analysé.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Commandes disponibles :===&lt;br /&gt;
&lt;br /&gt;
Voici les commandes disponibles pour l&amp;#039;audit de code intelligent :&lt;br /&gt;
&lt;br /&gt;
[[Image:Smart CodeInsight-Display.png|450x450px|link=]]&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Chat IA&amp;#039;&amp;#039;&amp;#039; : ouvre la vue [[#Fenêtre de chat IA]].&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Trouver des bogues&amp;#039;&amp;#039;&amp;#039; : recherche des bogues potentiels dans le code sélectionné.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Expliquer le code&amp;#039;&amp;#039;&amp;#039; : explique le code sélectionné.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ajouter un commentaire&amp;#039;&amp;#039;&amp;#039; : ajoute des commentaires au code sélectionné.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Achever le code&amp;#039;&amp;#039;&amp;#039; : termine le code sélectionné.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Optimiser le code&amp;#039;&amp;#039;&amp;#039; : optimise le code sélectionné.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ajouter un test unitaire&amp;#039;&amp;#039;&amp;#039; : ajoute un test unitaire au code sélectionné.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Convertir en assembleur&amp;#039;&amp;#039;&amp;#039; : convertit le code sélectionné en code assembleur.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Convertir en Delphi&amp;#039;&amp;#039;&amp;#039; : convertit le code sélectionné en code Delphi (à partir du code C++ ou assembleur).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Convertir en C++Builder&amp;#039;&amp;#039;&amp;#039; : convertit le code sélectionné en code C++Builder.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Trouver l&amp;#039;en-tête (IA)&amp;#039;&amp;#039;&amp;#039; (dans C++) ou &amp;#039;&amp;#039;&amp;#039;Rechercher une unité&amp;#039;&amp;#039;&amp;#039; (dans Delphi) : ajoute l&amp;#039;unité manquante aux instructions uses d&amp;#039;une classe sélectionnée ou d&amp;#039;un type de données.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Afficher le résultat dans l&amp;#039;éditeur&amp;#039;&amp;#039;&amp;#039; : envoie la sortie dans l&amp;#039;éditeur. ￼&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Afficher le résultat dans le Chat&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; : envoie la sortie dans la fenêtre de chat IA au format Markdown. ￼&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Compagnon RAD AI==&lt;br /&gt;
&lt;br /&gt;
RAD Studio introduit &amp;quot;RAD AI Companion&amp;quot; web, un chat et générateur de code spécifiquement entraîné sur du contenu en lien avec RAD Studio. Le compagnon RAD AI s&amp;#039;active depuis l&amp;#039;EDI en sélectionnant {{Menu| Menu Aide &amp;amp;gt; [http://www.embarcadero.com/radaicompanion RAD AI Companion]}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fenêtre de chat IA==&lt;br /&gt;
&lt;br /&gt;
La fenêtre de chat IA est une fiche ancrable de l&amp;#039;EDI, qui fonctionne comme n&amp;#039;importe quelle fenêtre de chat LLM. Vous pouvez taper une requête, choisir un moteur (ou utiliser le moteur par défaut) et attendre la réponse. Voici un rapide exemple :&lt;br /&gt;
&lt;br /&gt;
[[Image:ai chat window.png|350px|link=]]&lt;br /&gt;
&lt;br /&gt;
La fenêtre de chat comporte une zone de saisie qui fonctionne comme une ligne de commande. Voici les commandes disponibles :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;chatgpt&amp;amp;gt; + Entrée&amp;lt;/code&amp;gt; : active ChatGpt comme moteur d&amp;#039;IA actif (si celui-ci a été activé).&lt;br /&gt;
* &amp;lt;code&amp;gt;gemini&amp;amp;gt; + Entrée&amp;lt;/code&amp;gt; : active Gemini comme moteur d&amp;#039;IA actif (si celui-ci a été activé).&lt;br /&gt;
* &amp;lt;code&amp;gt;claude&amp;amp;gt; + Entrée&amp;lt;/code&amp;gt; : active Claude comme moteur d&amp;#039;IA actif (si celui-ci a été activé).&lt;br /&gt;
* &amp;lt;code&amp;gt;ollama&amp;amp;gt; + Entrée&amp;lt;/code&amp;gt; : active Ollama comme moteur d&amp;#039;IA actif (si celui-ci a été activé).&lt;br /&gt;
* &amp;lt;code&amp;gt;clear&amp;amp;gt; + Entrée&amp;lt;/code&amp;gt; : efface la zone de réponse.&lt;br /&gt;
* &amp;lt;code&amp;gt;stop&amp;amp;gt; + Entrée&amp;lt;/code&amp;gt; : arrête la génération de la réponse (équivalent à un clic sur le bouton Stop).&lt;br /&gt;
* &amp;lt;code&amp;gt;Ctrl + Entrée&amp;lt;/code&amp;gt; : commence à générer la réponse (équivalent à un clic sur le bouton Start).&lt;br /&gt;
&lt;br /&gt;
En plus des requêtes standard, vous pouvez sélectionner un snippet de code spécifique dans la fenêtre de code et poser une &amp;#039;&amp;#039;&amp;#039;nouvelle question&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;demander une explication&amp;#039;&amp;#039;&amp;#039; en utilisant l&amp;#039;une des commandes suivantes :&lt;br /&gt;
&lt;br /&gt;
[[Image:ai smartchat.png|450px|link=]]&lt;br /&gt;
&lt;br /&gt;
*$COL : correspond au &amp;#039;&amp;#039;&amp;#039;numéro de colonne&amp;#039;&amp;#039;&amp;#039; sur lequel le curseur est placé dans la fenêtre éditeur de code active.&lt;br /&gt;
*$ROW : correspond au &amp;#039;&amp;#039;&amp;#039;numéro de ligne&amp;#039;&amp;#039;&amp;#039; sur lequel le curseur est placé dans la fenêtre éditeur de code active.&lt;br /&gt;
*$CURTOKEN : correspond au &amp;#039;&amp;#039;&amp;#039;mot&amp;#039;&amp;#039;&amp;#039; sur lequel le curseur est placé dans la fenêtre éditeur de code active. Cette commande peut être utile pour faire référence à une variable, une méthode ou un identificateur situé à l&amp;#039;emplacement du curseur.&lt;br /&gt;
*$EDNAME : correspond au &amp;#039;&amp;#039;&amp;#039;nom de fichier complet&amp;#039;&amp;#039;&amp;#039; de la fenêtre éditeur de code active. Cette commande peut être très utile si vous avez besoin du nom du  fichier en cours avec son chemin d&amp;#039;accès.&lt;br /&gt;
*$SELECTION : fournit des explications sur le code sélectionné dans l&amp;#039;éditeur actif.&lt;br /&gt;
*$UNIT : fournit des explications sur le code de l&amp;#039;unité.&lt;br /&gt;
&lt;br /&gt;
Consultez la page [[Macros de transfert|Macros de transfert]] pour plus d&amp;#039;informations et d&amp;#039;exemples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Voir aussi===&lt;br /&gt;
&lt;br /&gt;
* [[Options relatives à l&amp;#039;audit de code intelligent|Options relatives à l&amp;#039;audit de code intelligent]]&lt;br /&gt;
* [[Configuration d&amp;#039;Ollama pour l&amp;#039;audit de code intelligent|Configuration d&amp;#039;Ollama]]&lt;br /&gt;
* [[Create and implement your AI plugin|Créer et implémenter votre plugin IA]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:02 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Audit_de_code_intelligent</comments>
		</item>
		<item>
			<title>Options relatives à l&#039;audit de code intelligent</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Options_relatives_%C3%A0_l%27audit_de_code_intelligent&amp;diff=223433&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Options_relatives_%C3%A0_l%27audit_de_code_intelligent&amp;diff=223433&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Options_relatives_%C3%A0_l%27audit_de_code_intelligent&quot; title=&quot;Options relatives à l&amp;#039;audit de code intelligent&quot;&gt;Options relatives à l&amp;#039;audit de code intelligent&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Options de l&amp;#039;EDI}}&lt;br /&gt;
{{Menu| Outils &amp;amp;gt; Options &amp;amp;gt; EDI &amp;amp;gt; [[Audit de code intelligent|Audit de code intelligent]]}}&lt;br /&gt;
&lt;br /&gt;
Vous pouvez configurer l&amp;#039;intégration de &amp;#039;&amp;#039;&amp;#039;l&amp;#039;audit de code intelligent&amp;#039;&amp;#039;&amp;#039; dans la partie Audit de code intelligent de la fenêtre Options des outils, comme indiqué dans l&amp;#039;image ci-dessous.&lt;br /&gt;
&lt;br /&gt;
[[File:Smart codeinsight options available.png|600px|link=]]&lt;br /&gt;
&lt;br /&gt;
Sur cette fenêtre, vous pouvez configurer l&amp;#039;intégration IA à partir des champs suivants :&lt;br /&gt;
&lt;br /&gt;
*La case à cocher &amp;#039;&amp;#039;&amp;#039;Activer le moteur IA&amp;#039;&amp;#039;&amp;#039; permet d&amp;#039;activer la fonctionnalité.&lt;br /&gt;
*Les zones de liste déroulante &amp;#039;&amp;#039;&amp;#039;IA par défaut pour l&amp;#039;éditeur&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;IA par défaut pour la fenêtre de Chat&amp;#039;&amp;#039;&amp;#039; vous permettent de choisir l&amp;#039;IA disponible pour chacun des éléments.&lt;br /&gt;
&lt;br /&gt;
De plus, dans la section &amp;#039;&amp;#039;&amp;#039;Plugins&amp;#039;&amp;#039;&amp;#039;, vous pouvez configurer chacun des moteurs IA dans son onglet en spécifiant ses propres paramètres de configuration. Vous trouverez ci-dessous les options initiales suggérées pour chacun des moteurs :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:12%&amp;quot; |Configuration&lt;br /&gt;
! style=&amp;quot;width:22%&amp;quot; |ChatGPT&lt;br /&gt;
!Ollama**&lt;br /&gt;
! style=&amp;quot;width:22%&amp;quot; |Gemini&lt;br /&gt;
! style=&amp;quot;width:22%&amp;quot; |Claude&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;BaseURL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;https://api.openai.com/v1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Dépend de l&amp;#039;installation.&lt;br /&gt;
Si c&amp;#039;est un &amp;quot;localhost&amp;quot; avec l&amp;#039;option par défaut, l&amp;#039;URL de base est &amp;lt;nowiki&amp;gt;http://localhost:11434/&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
|&amp;lt;nowiki&amp;gt;https://generativelanguage.&amp;lt;/nowiki&amp;gt;{{#tag:wbr|}}&amp;lt;nowiki&amp;gt;googleapis.com/v1beta&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;https://api.anthropic.com/v1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;APIKey&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|[https://platform.openai.com/account/api-keys Clé API dans OpenAI]&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|    [https://console.cloud.google.com/apis/dashboard Clé API dans l&amp;#039;API et les Services Google Cloud]&lt;br /&gt;
|[https://console.anthropic.com/settings/keys Clé API dans Anthropic]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Model*&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|gpt-4&lt;br /&gt;
|codellama&lt;br /&gt;
|models/gemini-pro&lt;br /&gt;
|claude-3-5-sonnet-20240620&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Timeout&amp;#039;&amp;#039;&amp;#039; (milliseconds)&lt;br /&gt;
|30.000&lt;br /&gt;
|30.000&lt;br /&gt;
|30.000&lt;br /&gt;
|30.000&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Maxtoken&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|2048&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|2048&lt;br /&gt;
|1024&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Temperature&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|0.1&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|0.9&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|    &amp;#039;&amp;#039;&amp;#039;TopP&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|1&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|    &amp;#039;&amp;#039;&amp;#039;TopK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|1&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|    &amp;#039;&amp;#039;&amp;#039;Anthropic Version&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|2023-06-01&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Une fois la configuration terminée, vous pouvez utiliser le bouton &amp;#039;&amp;#039;&amp;#039;Tester la connexion&amp;#039;&amp;#039;&amp;#039; pour tester la configuration sans avoir besoin de lancer le chat.&lt;br /&gt;
&lt;br /&gt;
{{Note| &amp;#039;&amp;#039;&amp;#039;(*)&amp;#039;&amp;#039;&amp;#039; RAD Studio suggère une liste de modèles disponibles, obtenus depuis le moteur d&amp;#039;IA précédemment configuré. Cette fonctionnalité est disponible pour tous les moteurs d&amp;#039;IA, à l&amp;#039;exception de Claude. }}&lt;br /&gt;
&lt;br /&gt;
{{Attention| &amp;#039;&amp;#039;&amp;#039;(**)&amp;#039;&amp;#039;&amp;#039; Si vous configurez Ollama, vous pouvez utiliser une image Docker pour l&amp;#039;installer. Pour plus d&amp;#039;informations, consultez la page Configuration d&amp;#039;Ollama pour l&amp;#039;audit de code intelligent}}&lt;br /&gt;
{{Tip|Pour rendre le moteur opérationnel, vous devez effectuer les étapes suivantes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;Configurer un moteur (l&amp;#039;un de ceux mentionnés ci-dessus).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Activer la case à cocher &amp;#039;&amp;#039;&amp;#039;Activé&amp;#039;&amp;#039;&amp;#039; de ce moteur d&amp;#039;IA.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Choisir le moteur pour l&amp;#039;éditeur et pour la fenêtre de chat.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Voir aussi===&lt;br /&gt;
* [[Page d&amp;#039;accueil|Page Bienvenue]]&lt;br /&gt;
* [[Mise à niveau des projets|Mise à niveau des projets]]&lt;br /&gt;
* [[Audit de code intelligent|Audit de code intelligent]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:02 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Options_relatives_%C3%A0_l%27audit_de_code_intelligent</comments>
		</item>
		<item>
			<title>Barre de défilement</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Barre_de_d%C3%A9filement&amp;diff=223431&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Barre_de_d%C3%A9filement&amp;diff=223431&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Barre_de_d%C3%A9filement&quot; title=&quot;Barre de défilement&quot;&gt;Barre de défilement&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Options de l&amp;#039;éditeur}}&lt;br /&gt;
&lt;br /&gt;
{{Menu|Outils &amp;amp;gt; Options &amp;amp;gt; Editeur &amp;amp;gt; Barre de défilement}}&lt;br /&gt;
&lt;br /&gt;
Les annotations de la [[Barre de défilement|barre de défilement]] permettent d&amp;#039;avoir une vue globale de votre code source et de suivre facilement des éléments particuliers.&lt;br /&gt;
&lt;br /&gt;
Utilisez cette page pour configurer les annotations.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &amp;#039;&amp;#039;&amp;#039;Elément&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
! &amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Appliquer les couleurs du thème de l&amp;#039;éditeur à la barre de défilement&lt;br /&gt;
|&lt;br /&gt;
Permet à la barre de défilement d&amp;#039;utiliser les couleurs du thème de l&amp;#039;EDI&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Activer les annotations de la barre de défilement&lt;br /&gt;
|&lt;br /&gt;
Active les options d&amp;#039;annotation de la barre de défilement&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Annotations de la barre de défilement&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Activé&lt;br /&gt;
|&lt;br /&gt;
Case à cocher qui active ou désactive toutes les fonctionnalités permettant d&amp;#039;afficher des marques sur la barre de défilement&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Nom &lt;br /&gt;
|&lt;br /&gt;
Options d&amp;#039;annotation : Audit d&amp;#039;erreur, Parties modifiées, Résultats de la recherche et Signets &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Début (0 – 15)&lt;br /&gt;
|&lt;br /&gt;
Intervalle de 0 à 15 définissant la position de départ de la barre de défilement&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Largeur (0 – 15)&lt;br /&gt;
|&lt;br /&gt;
Intervalle de 0 à 15 définissant la largeur de la barre de défilement&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Aperçu&lt;br /&gt;
|&lt;br /&gt;
Affiche un aperçu de la barre de défilement telle qu&amp;#039;elle sera avec les paramètres de &amp;#039;&amp;#039;&amp;#039;début&amp;#039;&amp;#039;&amp;#039; et de &amp;#039;&amp;#039;&amp;#039;largeur&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Cliquez sur la barre de défilement pour accéder à l&amp;#039;emplacement&lt;br /&gt;
|&lt;br /&gt;
Accède directement à la position voulue en cliquant sur la barre de défilement&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
* [[Options de l&amp;#039;éditeur|Editeur]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:02 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Barre_de_d%C3%A9filement</comments>
		</item>
		<item>
			<title>Packages d&#039;exécution (Options)</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Packages_d%27ex%C3%A9cution_(Options)&amp;diff=223429&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Packages_d%27ex%C3%A9cution_(Options)&amp;diff=223429&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Packages_d%27ex%C3%A9cution_(Options)&quot; title=&quot;Packages d&amp;#039;exécution (Options)&quot;&gt;Packages d&amp;#039;exécution (Options)&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Packages (Options)}}&amp;lt;ideTag id=&amp;quot;hcORuntimePackages&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt; &amp;#039;&amp;#039;&amp;#039;Projet &amp;amp;gt; Options &amp;amp;gt; Packages &amp;amp;gt; Packages d&amp;#039;exécution&amp;#039;&amp;#039;&amp;#039; &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisez cette page pour spécifier les packages d&amp;#039;exécution requis par votre projet.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &amp;#039;&amp;#039;&amp;#039;Options&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
! &amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Cible, Appliquer, Enregistrer&lt;br /&gt;
|&lt;br /&gt;
Voir [[Options de la cible|Options de la cible]].&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Eléments communs&lt;br /&gt;
|&lt;br /&gt;
Voir [[Eléments communs des pages Options de projet|Eléments communs des pages Options de projet]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &amp;#039;&amp;#039;&amp;#039;Elément&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
! &amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Lier avec les packages d&amp;#039;exécution&lt;br /&gt;
|&lt;br /&gt;
Lie dynamiquement les packages d&amp;#039;exécution dans votre projet.&lt;br /&gt;
Par défaut = True pour C++, False pour {{Delphi}}.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Packages d&amp;#039;exécution &amp;lt;br /&amp;gt;&amp;#039;&amp;#039;&amp;#039;({{Delphi}})&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Bibliothèques d&amp;#039;importation des packages d&amp;#039;exécution &amp;lt;br /&amp;gt;&amp;#039;&amp;#039;&amp;#039;(C++)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|&lt;br /&gt;
Détermine les packages d&amp;#039;exécution à utiliser quand le fichier exécutable est créé. Pour visualiser et modifier la liste des packages d&amp;#039;exécution, cliquez sur le bouton [[Image:ProjectOptionsEllipsis.jpg|Points de suspension]]. (Assurez-vous que le champ [[Options de la cible|Configuration de la cible]] est défini sur la configuration de construction dont la liste est héritée.)&lt;br /&gt;
La boîte de dialogue affiche des listes supplémentaires de packages d&amp;#039;exécution qui sont associées à différentes combinaisons de configuration et de plate-forme, telles que ces valeurs par défaut :&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; Pour {{Delphi}} : &amp;lt;br /&amp;gt;&amp;lt;source&amp;gt;&lt;br /&gt;
 Value from &amp;quot;Debug configuration - All platforms&amp;quot;&lt;br /&gt;
 Value from &amp;quot;All configurations - 32-bit Windows platform&amp;quot;&lt;br /&gt;
 Value from &amp;quot;All configurations - All platforms&amp;quot;&amp;lt;/source&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Pour C++ : &amp;lt;br /&amp;gt;&amp;lt;source&amp;gt;&lt;br /&gt;
 Value from &amp;quot;Debug configuration - All platforms&amp;quot;&lt;br /&gt;
 Value from &amp;quot;All configurations - 64-bit Windows (Modern) platform&amp;quot;&lt;br /&gt;
 Value from &amp;quot;All configurations - All platforms&amp;quot;&amp;lt;/source&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au fur et à mesure que vous installez ou désinstallez des packages, la liste des packages d&amp;#039;exécution est mise à jour. Le produit ajoute automatiquement les packages d&amp;#039;exécution qui sont requis par les packages de conception installés.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
Bouton [[Image:ProjectOptionsEllipsis.jpg|Points de suspension]]&lt;br /&gt;
|&lt;br /&gt;
Affiche la boîte de dialogue &amp;#039;&amp;#039;&amp;#039;Packages d&amp;#039;exécution&amp;#039;&amp;#039;&amp;#039;, vous permettant d&amp;#039;ajouter, de remplacer ou de supprimer des packages d&amp;#039;exécution. Cette boîte de dialogue est une [[Boîte de dialogue liste-ordonnée|boîte de dialogue &amp;lt;liste ordonnée&amp;gt;]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
* [[Packages d&amp;#039;exécution|Packages d&amp;#039;exécution]]&lt;br /&gt;
* [[Choix des packages d&amp;#039;exécution à utiliser|Choix des packages d&amp;#039;exécution à utiliser]]&lt;br /&gt;
* [[Chargement des packages dans une application|Chargement des packages dans une application]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Référence RAD Studio]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:02 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Packages_d%27ex%C3%A9cution_(Options)</comments>
		</item>
		<item>
			<title>Présentation de RAD Server</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Pr%C3%A9sentation_de_RAD_Server&amp;diff=223427&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Pr%C3%A9sentation_de_RAD_Server&amp;diff=223427&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Pr%C3%A9sentation_de_RAD_Server&quot; title=&quot;Présentation de RAD Server&quot;&gt;Présentation de RAD Server&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Qu&amp;#039;est-ce que RAD Server ?==&lt;br /&gt;
&lt;br /&gt;
RAD Server est une application clés en main qui permet de construire et déployer des services basés sur des applications. RAD Server permet aux développeurs de construire rapidement de nouveaux back-ends ou de migrer des logiques métier client/serveur C++ ou Delphi vers des architectures basées sur des services modernes, ouverts, sans états, sécurisés et évolutifs. &lt;br /&gt;
&lt;br /&gt;
La facilité de développement, de déploiement et d&amp;#039;utilisation de RAD Server en fait la solution idéale pour les éditeurs indépendants (ISV) et OEM qui conçoivent des solutions destinées à être redéployées. RAD Server vous permet d&amp;#039;utiliser votre code existant et de le convertir en points de terminaison de l&amp;#039;API REST.&lt;br /&gt;
&lt;br /&gt;
===RAD Server offre de nombreuses fonctionnalités :===&lt;br /&gt;
&lt;br /&gt;
*Développement multi-niveaux (multi-tier) simplifié : les intégrations fournissent une connectivité prête à l&amp;#039;emploi avec les serveurs, les applications et les services externes.&lt;br /&gt;
*Construisez rapidement vos fiches UX pour les plates-formes de bureau et mobiles dans RAD Studio, Delphi ou C++Builder.&lt;br /&gt;
*Gérez vos API et utilisateurs, et analysez l&amp;#039;utilisation et l&amp;#039;activité API via le portail de gestion d&amp;#039;applications RAD Server.&lt;br /&gt;
*Hébergez RAD Server sur un serveur Windows privé &amp;quot;on prem&amp;quot; ou sur hôte dans le cloud via Amazon, Rackspace ou Azure Clouds.&lt;br /&gt;
*Déployez votre code Delphi et C++ sur RAD Server en créant des points de terminaison API REST/JSON automatiques pour vos clients.&lt;br /&gt;
*Connectez RAD Server à vos bases de données d&amp;#039;entreprise, services cloud et périphériques IoT pour étendre votre application.&lt;br /&gt;
*Une collection de services intégrés prêts à l&amp;#039;emploi pour décupler les possibilités de votre application.&lt;br /&gt;
*Inclut des fonctions essentielles comme les services d&amp;#039;annuaire d&amp;#039;utilisateurs et la gestion des utilisateurs, le suivi de l&amp;#039;emplacement de l&amp;#039;utilisateur et le stockage intégré des données.&lt;br /&gt;
*Configurez des groupes d&amp;#039;utilisateurs et ajoutez des utilisateurs via le portail RAD Server ou importez-les depuis LDAP. Assignez des droits d&amp;#039;accès API pour contrôler les fonctionnalités auxquelles ont accès les différents groupes d&amp;#039;utilisateurs.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nouveau&amp;#039;&amp;#039;&amp;#039; : Prise en charge multi-client de RAD Server dans la version 10.2 : une seule instance RAD Server avec une seule connexion de base de données RAD Server peut prendre en charge plusieurs clients (tenants) isolés. Pour plus d&amp;#039;informations, voir la rubrique [[Support multi-client RAD Server|Prise en charge multi-client de RAD Server]].&lt;br /&gt;
&lt;br /&gt;
==Comparaison avec DataSnap==&lt;br /&gt;
&lt;br /&gt;
Avant RAD Server, les développeurs devaient construire des serveurs d&amp;#039;applications back-end Delphi et C++Builder en utilisant des toolkits pour serveur comme DataSnap qui fournissaient quelques blocs de construction basiques pour les infrastructures multi-niveaux, mais laissaient une bonne partie du développement à la charge des programmeurs. Avec RAD Server, les développeurs peuvent simplement charger des méthodes métier logiques Delphi et C++ dans RAD Server puis simplement ajouter des utilisateurs.&lt;br /&gt;
&lt;br /&gt;
==Technologies intégrées==&lt;br /&gt;
&lt;br /&gt;
{{Product}} {{Version}} inclut des fonctionnalités développeur pour RAD Server destinées au développement des &amp;#039;&amp;#039;&amp;#039;points de terminaison REST et du suivi des emplacements&amp;#039;&amp;#039;&amp;#039;, des &amp;#039;&amp;#039;&amp;#039;IoT Edgeware&amp;#039;&amp;#039;&amp;#039; via les technologies Enterprise Mobility Services, BeaconFence, ThingPoint, et ThingConnect.&lt;br /&gt;
&lt;br /&gt;
===Création, publication et gestion simplifiées des points de terminaison API REST===&lt;br /&gt;
&lt;br /&gt;
RAD Server facilite et accélère la construction de serveurs back-end flexibles pour votre solution d&amp;#039;application multi-niveau. Il suffit aux développeurs de charger la logique métier Delphi et C++ dans le serveur pour générer des points de terminaison API REST/JSON gérés.&lt;br /&gt;
&lt;br /&gt;
Pour développer des &amp;#039;&amp;#039;&amp;#039;points de terminaison REST&amp;#039;&amp;#039;&amp;#039; pour RAD Server, les développeurs utilisent les composants EMS [[RAD Server (EMS)|RAD Server (EMS)]] disponibles dans la palette d&amp;#039;outils sous la catégorie &amp;quot;Enterprise Mobility Services&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Points d&amp;#039;accès IoT d&amp;#039;entreprise===&lt;br /&gt;
&lt;br /&gt;
IoT Edgeware étend la fonctionnalité de publication de points de terminaison REST et fournit un point d&amp;#039;accès d&amp;#039;entreprise entre les gadgets et les périphériques distants. IoT Edgeware vous permet de stocker, filtrer et traiter localement de grandes quantités de données IoT collectées dans la périphérie tout en garantissant que seules les données critiques sont synchronisées avec le référentiel central.&lt;br /&gt;
&lt;br /&gt;
Pour développer des composants &amp;#039;&amp;#039;&amp;#039;IoT Edgeware&amp;#039;&amp;#039;&amp;#039; pour RAD Server, les développeurs utilisent [[Présentation des ThingPoint|ThingPoint]], une extension d&amp;#039;EMS qui est représentée avec TEMSEdgeService dans la catégorie &amp;quot;Enterprise Mobility Services&amp;quot; de la palette d&amp;#039;outils dans l&amp;#039;EDI.&lt;br /&gt;
&lt;br /&gt;
===Solution Proximité/Emplacement en intérieur et en extérieur===&lt;br /&gt;
&lt;br /&gt;
Faites le suivi des mouvements utilisateur aussi bien à [https://www.youtube.com/watch?v=1_cWnDmvxJk l&amp;#039;intérieur qu&amp;#039;à l&amp;#039;extérieur], et répondez aux événements de proximité lorsque l&amp;#039;utilisateur entre dans une zone beacon personnalisée ou en sort, ou lorsqu&amp;#039;il approche des points beacon désignés.&lt;br /&gt;
&lt;br /&gt;
Pour développer des composants &amp;#039;&amp;#039;&amp;#039;Suivi des emplacements&amp;#039;&amp;#039;&amp;#039;, les développeurs utilisent les composants [[BeaconFence|BeaconFence]] disponibles en téléchargement via le [[Gestionnaire de packages GetIt|Gestionnaire de packages GetIt]].&lt;br /&gt;
&lt;br /&gt;
===Framework de connectivité des périphériques intelligents IoT===&lt;br /&gt;
&lt;br /&gt;
RAD Server facilite la connexion à une large gamme de périphériques sans fil et de capteurs ou détecteurs dans votre solution d&amp;#039;application, même dans des emplacements difficiles d&amp;#039;accès.  Les développeurs ont accès à plus de 50 composants pré-construits pour de nombreux périphériques IoT Bluetooth LE et Z-Wave appliqués à la santé, au sport et à la domotique.&lt;br /&gt;
&lt;br /&gt;
Pour connecter les périphériques IoT à des clients ou à RAD Server [[Présentation des ThingPoint|ThingPoint Edgeware]], les développeurs peuvent utiliser les composants IoT [[Iot:ThingConnect Devices|ThingConnect]], disponibles en téléchargement via le Gestionnaire de packages GetIt (via &amp;lt;code&amp;gt;Outils &amp;amp;gt; Gestionnaire de packages GetIt &amp;amp;gt; Internet of Things&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==Evaluation==&lt;br /&gt;
&lt;br /&gt;
Les versions Enterprise et Architect de Rad Studio (y compris l&amp;#039;édition d&amp;#039;évaluation) incluent une version développeur de RAD Server avec une licence de développement. Le déploiement d&amp;#039;une solution RAD Server pour des clients requiert une licence de déploiement distincte, qui peut être incluse avec l&amp;#039;édition de votre produit ou achetée séparément.&lt;br /&gt;
&lt;br /&gt;
La version Professionnel de RAD Studio et les versions CE de Delphi et C++Builder n&amp;#039;incluent pas la prise en charge de RAD Server.&lt;br /&gt;
&lt;br /&gt;
==Environnement de production==&lt;br /&gt;
&lt;br /&gt;
[[RAD Server Database Requirements for a Production Environment on Windows|&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Cliquez ici&amp;#039;&amp;#039;&amp;#039;]] pour visualiser les étapes relatives au déploiement de RAD Server dans un environnement de production.&lt;br /&gt;
&lt;br /&gt;
Vous devez entrer la licence RAD Server.&lt;br /&gt;
&lt;br /&gt;
Pour les ressources personnalisées, vous pouvez utiliser un outil tel que [http://www.dependencywalker.com http://www.dependencywalker.com] pour déterminer les dépendances bpl de chaque ressource personnalisée.&lt;br /&gt;
&lt;br /&gt;
==Ressources pour démarrer==&lt;br /&gt;
&lt;br /&gt;
Nous vous invitons à regarder la rediffusion du webinar RAD Server Deep Dive, divisé en plusieurs chapitres : [https://www.youtube.com/playlist?list=PLwUPJvR9mZHgccq4EfTcsCngRqpTmm_wn https://www.youtube.com/playlist?list=PLwUPJvR9mZHgccq4EfTcsCngRqpTmm_wn]&lt;br /&gt;
&lt;br /&gt;
Les diapositives et les projets de démonstration utilisés dans le webinar peuvent être téléchargés [http://cc.embarcadero.com/item/30579 ici].&lt;br /&gt;
&lt;br /&gt;
Des tutoriels présentant les différentes technologies intégrées dans &amp;#039;&amp;#039;&amp;#039;RAD Server&amp;#039;&amp;#039;&amp;#039; sont disponibles en cliquant sur les liens docwiki ci-dessus.&lt;br /&gt;
&lt;br /&gt;
Pour plus de vidéos de présentation, consultez notre [https://www.youtube.com/results?search_query=rad+server+embarcadero chaîne YouTube].&lt;br /&gt;
&lt;br /&gt;
===Projets exemples===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Publication de points de terminaison REST et IoT Edgeware&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*Les exemples de code Delphi et C++ se trouvent dans {{CodeSamplesRepositories}}. Selon la version RAD Studio dont vous disposez, vous pouvez effectuer une recherche par nom dans les répertoires exemple.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Composants pour les périphériques ThingConnect IoT&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*Pour chaque pack de composants IoT installé via le Gestionnaire de packages GetIt, vous pouvez trouver les projets exemples en accédant à : &amp;lt;code&amp;gt;C:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Internet of Things\Object Pascal\Thing Connect&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Suivi de l&amp;#039;emplacement&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*Une fois le pack de composants BeaconFence installé via le Gestionnaire de packages GetIt, vous pouvez trouver les projets exemples en accédant à : &amp;lt;code&amp;gt;C:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Internet of Things\Object Pascal\Beacon Fence&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EULA==&lt;br /&gt;
&lt;br /&gt;
Le contrat de licence (EULA) de RAD Server est consultable en cliquant [http://embarcadero.com/products/rad-server/rad-server-eula ici].&lt;br /&gt;
&lt;br /&gt;
==Page produit de RAD Server==&lt;br /&gt;
&lt;br /&gt;
Pour une liste détaillée des fonctionnalités, consultez la [https://www.embarcadero.com/products/rad-server&amp;#039;&amp;#039;&amp;#039; page produit de RAD Server&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Support multi-client RAD Server|Support multi-client de RAD Server]]&lt;br /&gt;
*[[Modification manuelle de la configuration du moteur RAD Server|Modification manuelle de la configuration du moteur RAD Server]]&lt;br /&gt;
*[[Interface utilisateur de la console RAD Server|Interface utilisateur de la console RAD Server]]&lt;br /&gt;
*[[Application RAD Server Management Console|Application RAD Server Management Console]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:01 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Pr%C3%A9sentation_de_RAD_Server</comments>
		</item>
		<item>
			<title>Propriétés de projet</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Propri%C3%A9t%C3%A9s_de_projet&amp;diff=223425&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Propri%C3%A9t%C3%A9s_de_projet&amp;diff=223425&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Propri%C3%A9t%C3%A9s_de_projet&quot; title=&quot;Propriétés de projet&quot;&gt;Propriétés de projet&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Options C++}}&lt;br /&gt;
{{Parent|Boîte de dialogue Options de projet}}&lt;br /&gt;
&lt;br /&gt;
{{Menu|Outils &amp;amp;gt; Options &amp;amp;gt; Langage &amp;amp;gt; Options C++ &amp;amp;gt; Propriétés de projet}}&lt;br /&gt;
&lt;br /&gt;
{{Menu|Projet &amp;amp;gt; Options &amp;amp;gt; Propriétés de projet}}&lt;br /&gt;
&lt;br /&gt;
Définit les propriétés qui contrôlent certains aspects de la façon dont l&amp;#039;EDI gère un nouveau projet C++Builder :&lt;br /&gt;
&lt;br /&gt;
*La page &amp;#039;&amp;#039;&amp;#039;Options de projet&amp;#039;&amp;#039;&amp;#039; contrôle les paramètres C++ pour le projet en cours uniquement.&lt;br /&gt;
*La page &amp;#039;&amp;#039;&amp;#039;Options des outils&amp;#039;&amp;#039;&amp;#039; contrôle les paramètres C++ par défaut pour les nouveaux projets uniquement.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;Options des propriétés de projet C++&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|Utiliser la vérification d&amp;#039;auto-dépendance, si disponible&lt;br /&gt;
|Lorsqu&amp;#039;un fichier objet existe déjà pour un fichier source, un outil crée un nouveau fichier objet si la date de modification du source est plus récente que celle du fichier objet. Quand cette option est cochée, l&amp;#039;outil construit un nouveau fichier objet si l&amp;#039;un des fichiers d&amp;#039;inclusion dont dépend un fichier source a une date de modification plus récente que celle du fichier objet. Si elle n&amp;#039;est pas cochée, l&amp;#039;outil ne vérifie pas tous les fichiers d&amp;#039;inclusion. L&amp;#039;activation de cette option garantit des constructions plus précises. Valeur par défaut = &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|Vérifier les bibliothèques et les importations de packages&lt;br /&gt;
|Si cette option est cochée, vérifie que toutes les bibliothèques associées aux packages peuvent être trouvées avant la liaison. Si un fichier n&amp;#039;est pas trouvé, affiche un dialogue demandant à l&amp;#039;utilisateur l&amp;#039;emplacement et met à jour les chemins d&amp;#039;inclusion en conséquence. Lorsque cette option n&amp;#039;est pas cochée, cette vérification n&amp;#039;a pas lieu. Valeur par défaut = &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Gérer les chemins de bibliothèques et d&amp;#039;inclusion&lt;br /&gt;
|&lt;br /&gt;
Quand un utilisateur ajoute des fichiers au projet (et que cette option est cochée), ajoute les chemins de ces fichiers aux options de chemin d&amp;#039;inclusion appropriées pour garantir que le compilateur/lieur trouvera les fichiers. Si elle n&amp;#039;est pas cochée, ne met pas à jour automatiquement les chemins d&amp;#039;inclusion. C&amp;#039;est alors l&amp;#039;utilisateur qui garantit que les chemins de bibliothèques et d&amp;#039;inclusion sont corrects. Valeur par défaut = &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Afficher les dépendances d&amp;#039;en-tête dans le gestionnaire de projets&lt;br /&gt;
|&lt;br /&gt;
Si cette option est cochée, crée et affiche la liste de tous les fichiers d&amp;#039;en-tête dont dépend un fichier C/C++ dans le gestionnaire de projets, si les informations sont disponibles. Si elle n&amp;#039;est pas cochée, ne génère pas la liste. Valeur par défaut = &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Fichiers d&amp;#039;index pour &amp;#039;Définitions et références&amp;#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
(Prise en charge pour les plates-formes cible Windows 64 bits, iOS et Android)&lt;br /&gt;
|&lt;br /&gt;
Sur la page &amp;#039;&amp;#039;&amp;#039;Options de projet&amp;#039;&amp;#039;&amp;#039;, active la prise en charge de l&amp;#039;indexeur (&amp;#039;&amp;#039;&amp;#039;[[Rechercher les définitions et les références (C++)|Rechercher les références (C++)]]&amp;#039;&amp;#039;&amp;#039;) pour le projet C++ en cours. Une fois activée, vous accédez aux commandes &amp;#039;&amp;#039;&amp;#039;Chercher&amp;#039;&amp;#039;&amp;#039; depuis le [[Menu contextuel de l&amp;#039;éditeur de code|menu contextuel de l&amp;#039;éditeur de code]]. Valeur par défaut = &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&lt;br /&gt;
Sur la page &amp;#039;&amp;#039;&amp;#039;Options des outils&amp;#039;&amp;#039;&amp;#039;, active &amp;#039;&amp;#039;&amp;#039;[[Rechercher les définitions et les références (C++)|Chercher les références (C++)]]&amp;#039;&amp;#039;&amp;#039; pour tous vos projets C++.&lt;br /&gt;
Lorsque vous activez cette option, une base de données SQLite est créée dans le dossier de projet en cours.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Afficher les messages généraux&lt;br /&gt;
|&lt;br /&gt;
Affiche [[Messages d&amp;#039;information (C++)|tous les messages]] des outils sans filtrage. Valeur par défaut = &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Mappage de _TCHAR en &amp;lt;br /&amp;gt; &lt;br /&gt;
(seulement dans la page Outils &amp;amp;gt; Options)&lt;br /&gt;
|&lt;br /&gt;
Spécifie que le &amp;lt;code&amp;gt;typedef _TCHAR&amp;lt;/code&amp;gt; migre vers une définition étroite &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;AnsiString&amp;lt;/code&amp;gt;) ou vers une définition étendue &amp;lt;code&amp;gt;wchar_t&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;UnicodeString&amp;lt;/code&amp;gt;). Quand vous définissez cette option sur &amp;lt;code&amp;gt;wchar_t&amp;lt;/code&amp;gt;, il définit alors les &amp;lt;code&amp;gt;UNICODE&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;_UNICODE&amp;lt;/code&amp;gt; en projets et migre vers les définitions étendues de la bibliothèque standard et des fonctions de l&amp;#039;API. Valeur par défaut = &amp;lt;code&amp;gt;wchar_t&amp;lt;/code&amp;gt;. Voir [[Mappage TCHAR|Mappage _TCHAR]].&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span id=&amp;quot;separate-process&amp;quot;&amp;gt;Exécuter le compilateur C++ dans un processus distinct&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
(disponible uniquement dans la page Options de projet)&lt;br /&gt;
|&lt;br /&gt;
Démarre un processus de compilation distinct, en dehors de l&amp;#039;EDI, quand vous exécutez une commande Make ou Construire. Cette option est utile pour la compilation de gros projets qui produisent des erreurs de dépassement de la mémoire du compilateur quand l&amp;#039;exécution de ce dernier s&amp;#039;effectue in-process (en utilisant la commande Make ou Construire). Un dialogue &amp;#039;&amp;#039;&amp;#039;d&amp;#039;enregistrement de fichiers&amp;#039;&amp;#039;&amp;#039; vous invite à enregistrer votre projet avant la compilation, sauf si vous l&amp;#039;avez déjà enregistré.&lt;br /&gt;
Si vous utilisez [[Compilateurs C++ améliorés par Clang|compilateur C++ amélioré par Clang]], vous pouvez utiliser l&amp;#039;option &amp;quot;Exécuter le compilateur C++ dans un processus distinct&amp;quot; en combinaison avec l&amp;#039;option [[Compilateur C++#batch-compilation|&amp;quot;Activer la compilation groupée&amp;quot;]] pour activer la [[Compilateurs C++ améliorés par Clang#Utilisation de la compilation parallèle|compilation parallèle.]].&lt;br /&gt;
&amp;quot;Nombre de sous-processus&amp;quot; détermine le nombre de sous-processus que le compilateur peut générer pour effectuer la compilation parallèle. Ce nombre ne peut pas être supérieur au nombre de coeurs de votre processeur.&lt;br /&gt;
Par défaut, cette option est désactivée.&lt;br /&gt;
|-&lt;br /&gt;
|Nombre de sous-processus&lt;br /&gt;
|Aussi connu sous la forme de {{Code|--jobs}}. Cette commande exécute plusieurs processus du compilateur C++ à la fois, selon votre configuration. Cette option est toujours activée lorsque vous choisissez une compilation en groupe (compilation batch).&lt;br /&gt;
Pour plus d&amp;#039;informations, consultez la page [[BCC64X|BCC64X]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Mappage TCHAR|Mappage _TCHAR]]&lt;br /&gt;
*[[Menu contextuel de l&amp;#039;éditeur de code|Menu contextuel de l&amp;#039;éditeur de code]]&lt;br /&gt;
*[[Rechercher les définitions et les références (C++)|Chercher les références (C++)]]&lt;br /&gt;
**[[Aller aux éléments associés (C++)|Aller aux éléments associés (C++)]]&lt;br /&gt;
**[[Show Type Hierarchy (C++)|Afficher la hiérarchie des types (C++)]]&lt;br /&gt;
**[[Go to Type Declaration (C++)|Aller à la déclaration de type (C++)]]&lt;br /&gt;
**[[Show Base Types (C++)|Afficher les types de base (C++)]]&lt;br /&gt;
**[[Show Derived Types (C++)|Afficher les types dérivés (C++)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Référence RAD Studio]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:01 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Propri%C3%A9t%C3%A9s_de_projet</comments>
		</item>
		<item>
			<title>Pragma alias</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Pragma_alias&amp;diff=223423&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Pragma_alias&amp;diff=223423&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Pragma_alias&quot; title=&quot;Pragma alias&quot;&gt;Pragma alias&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{DISPLAYTITLE:#pragma alias}}&lt;br /&gt;
{{Parent|Présentation des directives pragma - Index}}&lt;br /&gt;
&lt;br /&gt;
==Syntaxe &amp;lt;span style=&amp;quot;font-size: 60%&amp;quot;&amp;gt;(voir [[Pseudo-grammaire|Pseudo-grammaire]])&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Chaîne d&amp;#039;outils classique&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&lt;br /&gt;
 #pragma alias &amp;quot;aliasName&amp;quot; = &amp;quot;substituteName&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Chaîne d&amp;#039;outils Clang&amp;#039;&amp;#039;&amp;#039; :&amp;amp;lt;br /&amp;amp;gt;&lt;br /&gt;
la directive &amp;lt;code&amp;gt;#pragma alias&amp;lt;/code&amp;gt; n&amp;#039;est pas supportée par les compilateurs [[BCC64X|BCC64X]] et [[Compilateurs Win32 améliorés par Clang|BCC32C]]. A la place, vous pouvez laisser un commentaire pour le lieur en procédant comme suit :&amp;amp;lt;br /&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #pragma comment(linker, &amp;quot;/alternatename:&amp;amp;lt;name1&amp;amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;amp;lt;name2&amp;amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;#pragma alias&amp;lt;/code&amp;gt; indique au lieur que deux noms d&amp;#039;identificateurs sont équivalents. Les deux identificateurs doivent être saisis entre guillemets. Sinon, un avertissement [[W8086 Utilisation incorrecte de l&amp;#039;alias pragma &amp;quot;NomAlias&amp;quot;=&amp;quot;NomSubstitué&amp;quot; (C++)|W8086 Utilisation incorrecte de l&amp;#039;alias pragma &amp;quot;aliasName&amp;quot;=&amp;quot;substituteName&amp;quot; (C++)]] est émis.&lt;br /&gt;
&lt;br /&gt;
Les alias sont à présent gérés dans des unités distinctes, par deux fichiers .obj, un pour Unicode et un pour non-Unicode. Ces deux fichiers .obj font partie de la bibliothèque VCL.&lt;br /&gt;
&lt;br /&gt;
Le &amp;lt;code&amp;gt;NomAlias&amp;lt;/code&amp;gt; et le &amp;lt;code&amp;gt;NomSubstitué&amp;lt;/code&amp;gt; sont injectés dans leur fichier .obj correspondant, exactement comme ils sont écrits à l&amp;#039;intérieur des guillemets. Le lieur recherche toutes les références à &amp;lt;code&amp;gt;NomAlias&amp;lt;/code&amp;gt; et les lie au &amp;lt;code&amp;gt;NomSubstitué&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Note| Les [[Fichier d&amp;#039;en-tête C++ (*.h, *.hpp)|fichiers .hpp]] générés depuis le code {{Delphi}} utilisent l&amp;#039;alias &amp;lt;code&amp;gt;#pragma&amp;lt;/code&amp;gt; pour la gestion des identificateurs qui sont substantypés différemment dans {{Delphi}} et {{CBuilder}}.}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Référence C++]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:01 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Pragma_alias</comments>
		</item>
		<item>
			<title>Packages pour la nouvelle chaîne d&#039;outils C++</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Packages_pour_la_nouvelle_cha%C3%AEne_d%27outils_C%2B%2B&amp;diff=223421&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Packages_pour_la_nouvelle_cha%C3%AEne_d%27outils_C%2B%2B&amp;diff=223421&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Packages_pour_la_nouvelle_cha%C3%AEne_d%27outils_C%2B%2B&quot; title=&quot;Packages pour la nouvelle chaîne d&amp;#039;outils C++&quot;&gt;Packages pour la nouvelle chaîne d&amp;#039;outils C++&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Référence C++}}&lt;br /&gt;
Les packages sont un concept {{Delphi}} fondamental et ne sont pas parfaitement transposés en C++, ce qui entraîne des problèmes et complexifie les choses lors de l&amp;#039;utilisation des packages.&lt;br /&gt;
&lt;br /&gt;
Par exemple, les unités sous forme de fichier .pas sont un concept de {{Delphi}}. Le C++ possède des unités de traduction, mais ce n&amp;#039;est pas vraiment la même chose. Le code peut exister dans un en-tête sans appartenir à un fichier .cpp spécifique.&lt;br /&gt;
&lt;br /&gt;
Pour gérer cela, vous devez utiliser [[Pragma package|#pragma package(smart_init)]] dans une unité. Cela revient à marquer une unité de compilation comme une unité de style {{Delphi}} (dans la mesure où ces concepts peuvent être rapprochés) dans le sens utilisé par ce document et les articles associés.&lt;br /&gt;
&lt;br /&gt;
Veuillez consulter les sections suivantes pour mieux comprendre le sujet.&lt;br /&gt;
&lt;br /&gt;
==Initialisation et finalisation des unités==&lt;br /&gt;
&lt;br /&gt;
Dans la nouvelle chaîne d&amp;#039;outils, {{Product}} améliore considérablement la gestion des packages dans un but d&amp;#039;assurer un comportement cohérent lors de la liaison statique et dynamique de packages.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&amp;#039;informations, consultez la page [[Initialisation et Finalisation d&amp;#039;unités pour la nouvelle chaîne d&amp;#039;outils C++|Initialisation et Finalisation d&amp;#039;unités pour la nouvelle chaîne d&amp;#039;outils C++]].&lt;br /&gt;
&lt;br /&gt;
==Importation et exportation de packages==&lt;br /&gt;
&lt;br /&gt;
Pour comprendre l&amp;#039;effet du modificateur PACKAGE ou [[Declspec(package)|__declspec(package)]], consultez la page [[Importation et exportation de package pour la nouvelle chaîne d&amp;#039;outils C++|Importation et exportation de packages]].&lt;br /&gt;
&lt;br /&gt;
==Unités faiblement packagées de Delphi==&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de savoir pourquoi les [[Utilisation de la directive de packaging faible|unités faiblement packagées sont différentes des unités normales]].&lt;br /&gt;
&lt;br /&gt;
==Avertissement de compatibilité==&lt;br /&gt;
&lt;br /&gt;
Les BPL (packages C++) créés avec l&amp;#039;ancienne chaîne d&amp;#039;outils sont incompatibles avec les applications construites avec la nouvelle chaîne d&amp;#039;outils et inversement. Autrement dit, pour les applications {{code|Windows 64 bits (Moderne)}}, assurez-vous d&amp;#039;utiliser des packages C++ compilés avec {{code|Windows 64 bits (Moderne)}}. Ne mélangez pas les chaînes d&amp;#039;outils pour les différents fichiers qui composent votre application.&lt;br /&gt;
&lt;br /&gt;
Cette limitation s&amp;#039;applique uniquement aux packages C++, car les packages construits par Delphi sont compatibles avec les deux chaînes d&amp;#039;outils. Ainsi, les packages Delphi peuvent être utilisés aussi bien par [[BCC64|Win64 (Ancien)]] que par [[BCC64X|Win64 Moderne]]. L&amp;#039;inverse fonctionne également : les apps Delphi peuvent [[Chargement des packages avec la fonction LoadPackage|charger des packages]] construits avec Win64 (Ancien) ou Win64 (Moderne). Toutefois, Win64 (Ancien) ne peut pas charger des packages construits par Win64 Moderne, et Win64 Moderne ne peut pas charger des packages construits par Win64 Ancien. Si vous les mélangez, vous obtiendrez des messages de violation d&amp;#039;accès ou d&amp;#039;autres erreurs.&lt;br /&gt;
&lt;br /&gt;
===Voir aussi===&lt;br /&gt;
&lt;br /&gt;
* [[Initialisation et Finalisation d&amp;#039;unités pour la nouvelle chaîne d&amp;#039;outils C++|Initialisation et Finalisation d&amp;#039;unités pour la nouvelle chaîne d&amp;#039;outils C++]]&lt;br /&gt;
* [[Importation et exportation de package pour la nouvelle chaîne d&amp;#039;outils C++|Importation et exportation de packages pour la nouvelle chaîne d&amp;#039;outils C++]]&lt;br /&gt;
* [[Build Delphi Packages for C++|Construction de packages Delphi pour C++]]&lt;br /&gt;
* [[Utilisation de la directive de packaging faible|Utilisation de la directive de package faible]]&lt;br /&gt;
*[[BCC64X|BCC64X]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 18:13:01 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Packages_pour_la_nouvelle_cha%C3%AEne_d%27outils_C%2B%2B</comments>
		</item>
		<item>
			<title>Importation et exportation de package pour la nouvelle chaîne d&#039;outils C++</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Importation_et_exportation_de_package_pour_la_nouvelle_cha%C3%AEne_d%27outils_C%2B%2B&amp;diff=223419&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Importation_et_exportation_de_package_pour_la_nouvelle_cha%C3%AEne_d%27outils_C%2B%2B&amp;diff=223419&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Importation_et_exportation_de_package_pour_la_nouvelle_cha%C3%AEne_d%27outils_C%2B%2B&quot; title=&quot;Importation et exportation de package pour la nouvelle chaîne d&amp;#039;outils C++&quot;&gt;Importation et exportation de package pour la nouvelle chaîne d&amp;#039;outils C++&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Packages pour la nouvelle chaîne d&amp;#039;outils C++}}&lt;br /&gt;
&lt;br /&gt;
Lorsque le modificateur PACKAGE ou [[Declspec(package)|__declspec(package)]] est utilisé, il est difficile de comprendre quand les éléments sont importés ou exportés. {{Product}} applique des heuristiques et considère qu&amp;#039;une classe est traitée en tant que [[Declspec(dllexport)|__declspec(dllexport)]] lorsque les conditions suivantes sont réunies :&lt;br /&gt;
&lt;br /&gt;
* La classe est marquée comme &amp;lt;code&amp;gt;[[Declspec(package)|__declspec(package)]]&amp;lt;/code&amp;gt; et contient une déclaration de fonction non-inline.&lt;br /&gt;
* Le fichier qui contient la classe est compilé avec l&amp;#039;option &amp;lt;code&amp;gt;-tP&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Sinon, la classe est considérée comme [[Declspec(dllimport)|__declspec(dllimport)]].&lt;br /&gt;
&lt;br /&gt;
En résumé, il s&amp;#039;agit de &amp;#039;&amp;#039;&amp;#039;suppositions&amp;#039;&amp;#039;&amp;#039;. Il n&amp;#039;existe aucun moyen fiable de mapper une déclaration dans un fichier d&amp;#039;en-tête {{CBuilder}} pour savoir s&amp;#039;il doit être exporté ou importé, ce qui justifie l&amp;#039;application d&amp;#039;heuristiques. En règle générale, en présence d&amp;#039;une [[Declspec(package)|macro PACKAGE]] le compilateur suppose que le package essaie d&amp;#039;effectuer une exportation lors de la construction d&amp;#039;un projet de package. Il suppose sinon que c&amp;#039;est une importation.&lt;br /&gt;
&lt;br /&gt;
Notez que nous utilisons des méthodes inline dans nos fichiers HPP. Elles concernent généralement les constructeurs, en raison des différences de disponibilité dans les classes descendantes ({{Delphi}} hérite de tous les constructeurs). Toutefois, ces méthodes n&amp;#039;empêchent pas une classe d&amp;#039;être importée selon les heuristiques. En bref, on retiendra que des heuristiques sont appliquées si [[Declspec(package)|__declspec(package)]] est utilisé.&lt;br /&gt;
&lt;br /&gt;
La raison de ce comportement vient du fait que les packages tentent de transposer un concept {{Delphi}} en {{CBuilder}}, sans y parvenir parfaitement. En règle générale {{Product}} recommande d&amp;#039;utiliser les packages avec prudence. En privilégiant des usages qui correspondent à {{Delphi}} (comme c&amp;#039;est le cas avec les composants), vous aurez plus de chances de réussite que si vous utilisez un package de la même façon qu&amp;#039;une DLL, alors qu&amp;#039;il serait préférable d&amp;#039;utiliser une DLL ou une bibliothèque statique.&lt;br /&gt;
&lt;br /&gt;
===Exemple de code===&lt;br /&gt;
&lt;br /&gt;
{{#tag:syntaxhighlight|&lt;br /&gt;
class PACKAGE TMyComponent&amp;amp;nbsp;: public TComponent {&lt;br /&gt;
public:&lt;br /&gt;
&lt;br /&gt;
    __fastcall TMyComponent(TComponent* Owner);&lt;br /&gt;
    void __fastcall DoSomething();&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
|lang=c++}}Dans cet exemple, la classe TMyComponent utilise la macro PACKAGE (qui est développée en decspec(package).) En conséquence, le compilateur applique des heuristiques pour déterminer si vous souhaitez exporter ou importer la classe.&lt;br /&gt;
&lt;br /&gt;
==Recommandations==&lt;br /&gt;
&lt;br /&gt;
Veuillez prendre en compte les recommandations suivantes lorsque vous utilisez l&amp;#039;importation et l&amp;#039;exportation de packages avec la nouvelle chaîne d&amp;#039;outils C++. Cela vous permettra d&amp;#039;éviter des problèmes.&lt;br /&gt;
&lt;br /&gt;
* Evitez d&amp;#039;utiliser les méthodes générées par défaut ou générées par le compilateur dans une classe marquée comme package. Suivez la [https://en.cppreference.com/w/cpp/language/rule_of_three règle des trois/cinq].&lt;br /&gt;
* En toutes circonstances, vous ne devez pas utiliser les méthodes inline dans les types de vos packages importés ou exportés, même s&amp;#039;ils sont simples. Vous devez explicitement placer toutes les méthodes (y compris le constructeur/destructeur/constructeur de copie, et les [https://en.cppreference.com/w/cpp/language/rule_of_three autres]) dans le fichier .cpp.&lt;br /&gt;
* Nous vous recommandons fortement de ne pas exporter les types de templates, car ils sont par définition &amp;quot;inlinés&amp;quot; et peuvent provoquer des définitions multiples.&lt;br /&gt;
* Soyez prudent avec les dépendances entre unités, et apprenez à maîtriser [[Unit Initialization and Finalization for C++ New Toolchain|l&amp;#039;initialisation et la finalisation des unités]].&lt;br /&gt;
* De manière générale, nous recommandons fortement de ne pas utiliser PACKAGE ou [[Declspec(package)|__declspec(package)]] sauf dans des usages très simples. A la place, nous vous conseillons de marquer manuellement vos types avec [[Declspec(dllimport)|__declspec(dllimport)]] et [[Declspec(dllexport)|__declspec(dllexport)]].&amp;lt;br /&amp;gt; {{Tip|Une autre approche consiste à wrapper les modificateurs dans une macro dont la valeur dépend de l&amp;#039;emplacement de l&amp;#039;en-tête. En d&amp;#039;autres termes, votre projet EXE peut définir une macro afin qu&amp;#039;une importation soit effectuée lorsque l&amp;#039;en-tête est inclus.}}&lt;br /&gt;
* Les packages étant des DLL étendues, ces directives dllimport/dllexport s&amp;#039;appliquent. Le point clé ici est qu&amp;#039;en les marquant explicitement, le compilateur n&amp;#039;a plus besoin de deviner, car il reçoit une directive claire du programmeur lui indiquant d&amp;#039;effectuer une importation ou une exportation. Les packages sont très pratiques pour les composants et utiles pour les types basés sur {{Delphi}}, mais il est préférable d&amp;#039;utiliser des DLL pour l&amp;#039;exécution dynamique. &amp;lt;br /&amp;gt;{{Attention|Notez qu&amp;#039;il n&amp;#039;y a pas d&amp;#039;enracinement de type entre modules dans C++.}}&lt;br /&gt;
&lt;br /&gt;
===Voir aussi===&lt;br /&gt;
&lt;br /&gt;
* [[Packages for C++ New Toolchain|Packages pour la nouvelle chaîne d&amp;#039;outils C++]]&lt;br /&gt;
* [[Unit Initialization and Finalization for C++ New Toolchain|Initialisation et Finalisation d&amp;#039;unités pour la nouvelle chaîne d&amp;#039;outils C++]]&lt;br /&gt;
*[[Declspec(dllimport)|__declspec(dllimport)]]&lt;br /&gt;
*[[Declspec(dllexport)|__declspec(dllexport)]]&lt;br /&gt;
*[[BCC64X|BCC64X]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 17:05:26 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Importation_et_exportation_de_package_pour_la_nouvelle_cha%C3%AEne_d%27outils_C%2B%2B</comments>
		</item>
		<item>
			<title>Audit de code intelligent</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Audit_de_code_intelligent&amp;diff=223417&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Audit_de_code_intelligent&amp;diff=223417&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Audit_de_code_intelligent&quot; title=&quot;Audit de code intelligent&quot;&gt;Audit de code intelligent&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Audit de code intelligent|Smart CodeInsight]] est une architecture ouverte qui vous permet d&amp;#039;utiliser vos moteurs d&amp;#039;IA préférés. En plus des fonctionnalités déjà présentes, {{Product}} vous propose également une intégration de l&amp;#039;interface utilisateur personnalisable :&lt;br /&gt;
&lt;br /&gt;
* Moteur d&amp;#039;IA de base et ToolsAPI.&lt;br /&gt;
*Intégration de l&amp;#039;EDI :&lt;br /&gt;
** [[#Options de configuration|Options de configuration pour les moteurs]].&lt;br /&gt;
** [[#Commandes de menu de l&amp;#039;éditeur|Commandes de menu de l&amp;#039;éditeur permettant d&amp;#039;invoquer des opérations IA]].&lt;br /&gt;
** [[#Fenêtre de chat IA|Fenêtre de chat IA]].&lt;br /&gt;
* Prise en charge des fournisseurs LLM en ligne et hors ligne tels que :&lt;br /&gt;
** OpenAI, Gemini et Claude (en ligne).&lt;br /&gt;
** Ollama (hors ligne).&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
::{{Tip| Ollama est distribué en tant que produit open source sous licence MIT. Les modèles individuels que vous êtes susceptible d&amp;#039;utiliser avec Ollama ont leurs propres licences. La politique d&amp;#039;utilisation &amp;quot;Codellama Acceptable Use Policy&amp;quot; est disponible sur cette page.}}&lt;br /&gt;
::{{Note| Pour les adeptes de ToolsAPI, {{Product}} vous permet de créer votre propre plugin API. Pour plus d&amp;#039;informations, consultez la page [[Create and implement your AI plugin|Créer et implémenter votre plugin IA]].}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{Product}} ne fournit pas d&amp;#039;accès à ces moteurs. L&amp;#039;utilisation de ces services d&amp;#039;IA nécessite que l&amp;#039;utilisateur accepte les conditions d&amp;#039;utilisation de chaque éditeur, reçoive une clé API permettant d&amp;#039;entrer dans la configuration de {{Product}}, et paie les frais de licence de la société d&amp;#039;IA concernée. &lt;br /&gt;
La seule exception concerne Ollama qui peut être utilisé hors ligne gratuitement et être installé en local ou sur un serveur de votre choix.}}&lt;br /&gt;
&lt;br /&gt;
==Options de configuration==&lt;br /&gt;
&lt;br /&gt;
{{Product}} vous permet de configurer et de contrôler pleinement la confidentialité de différentes façons. Vous pouvez ainsi :&lt;br /&gt;
&lt;br /&gt;
* Désactiver la fonctionnalité IA complète à partir d&amp;#039;un paramètre unique.&lt;br /&gt;
* Activer ou désactiver chacun des quatre moteurs.&lt;br /&gt;
* Sélectionner le moteur par défaut de chacun des éléments d&amp;#039;interface utilisateur (fenêtre de chat et menu éditeur).&lt;br /&gt;
&lt;br /&gt;
Toutes ces fonctionnalités peuvent être configurées dans la fenêtre Options de l&amp;#039;EDI. Consultez la page [[Options relatives à l&amp;#039;audit de code intelligent|Configuration de l&amp;#039;audit de code intelligent]] pour plus d&amp;#039;informations sur chaque rubrique.&lt;br /&gt;
&lt;br /&gt;
* Les actions suivantes ont aussi été implémentées pour sécuriser le système.&lt;br /&gt;
* Les clés API sont stockées dans un format chiffré.&lt;br /&gt;
* Vous avez la possibilité d&amp;#039;utiliser un moteur local, hors ligne.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Commandes du menu Editeur==&lt;br /&gt;
&lt;br /&gt;
Le menu Editeur propose des opérations préconfigurées pour le code sélectionné dans l&amp;#039;éditeur. Le but est d&amp;#039;analyser et d&amp;#039;optimiser une partie du code source de votre application.&lt;br /&gt;
&lt;br /&gt;
Le moteur LLM réagit en renvoyant le résultat dans une fenêtre de l&amp;#039;éditeur sous forme de commentaire après le code analysé.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Commandes disponibles :===&lt;br /&gt;
&lt;br /&gt;
Voici les commandes disponibles pour l&amp;#039;audit de code intelligent :&lt;br /&gt;
&lt;br /&gt;
[[Image:Smart CodeInsight-Display.png|450x450px|link=]]&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Chat IA&amp;#039;&amp;#039;&amp;#039; : ouvre la vue [[#Fenêtre de chat IA]].&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Trouver des bogues&amp;#039;&amp;#039;&amp;#039; : recherche des bogues potentiels dans le code sélectionné.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Expliquer le code&amp;#039;&amp;#039;&amp;#039; : explique le code sélectionné.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ajouter un commentaire&amp;#039;&amp;#039;&amp;#039; : ajoute des commentaires au code sélectionné.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Achever le code&amp;#039;&amp;#039;&amp;#039; : termine le code sélectionné.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Optimiser le code&amp;#039;&amp;#039;&amp;#039; : optimise le code sélectionné.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ajouter un test unitaire&amp;#039;&amp;#039;&amp;#039; : ajoute un test unitaire au code sélectionné.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Convertir en assembleur&amp;#039;&amp;#039;&amp;#039; : convertit le code sélectionné en code assembleur.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Convertir en Delphi&amp;#039;&amp;#039;&amp;#039; : convertit le code sélectionné en code Delphi (à partir du code C++ ou assembleur).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Convertir en C++Builder&amp;#039;&amp;#039;&amp;#039; : convertit le code sélectionné en code C++Builder.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Trouver l&amp;#039;en-tête (IA)&amp;#039;&amp;#039;&amp;#039; (dans C++) ou &amp;#039;&amp;#039;&amp;#039;Rechercher une unité&amp;#039;&amp;#039;&amp;#039; (dans Delphi) : ajoute l&amp;#039;unité manquante aux instructions uses d&amp;#039;une classe sélectionnée ou d&amp;#039;un type de données.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Afficher le résultat dans l&amp;#039;éditeur&amp;#039;&amp;#039;&amp;#039; : envoie la sortie dans l&amp;#039;éditeur. ￼&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Afficher le résultat dans le Chat&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; : envoie la sortie dans la fenêtre de chat IA au format Markdown. ￼&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Compagnon RAD AI==&lt;br /&gt;
&lt;br /&gt;
RAD Studio introduit &amp;quot;RAD AI Companion&amp;quot; web, un chat et générateur de code spécifiquement entraîné sur du contenu en lien avec RAD Studio. Le compagnon RAD AI s&amp;#039;active depuis l&amp;#039;EDI en sélectionnant {{Menu| Menu Aide &amp;amp;gt; [http://www.embarcadero.com/radaicompanion RAD AI Companion]}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fenêtre de chat IA==&lt;br /&gt;
&lt;br /&gt;
La fenêtre de chat IA est une fiche ancrable de l&amp;#039;EDI, qui fonctionne comme n&amp;#039;importe quelle fenêtre de chat LLM. Vous pouvez taper une requête, choisir un moteur (ou utiliser le moteur par défaut) et attendre la réponse. Voici un rapide exemple :&lt;br /&gt;
&lt;br /&gt;
[[Image:ai chat window.png|350px|link=]]&lt;br /&gt;
&lt;br /&gt;
La fenêtre de chat comporte une zone de saisie qui fonctionne comme une ligne de commande. Voici les commandes disponibles :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;chatgpt&amp;amp;gt; + Entrée&amp;lt;/code&amp;gt; : active ChatGpt comme moteur d&amp;#039;IA actif (si celui-ci a été activé).&lt;br /&gt;
* &amp;lt;code&amp;gt;gemini&amp;amp;gt; + Entrée&amp;lt;/code&amp;gt; : active Gemini comme moteur d&amp;#039;IA actif (si celui-ci a été activé).&lt;br /&gt;
* &amp;lt;code&amp;gt;claude&amp;amp;gt; + Entrée&amp;lt;/code&amp;gt; : active Claude comme moteur d&amp;#039;IA actif (si celui-ci a été activé).&lt;br /&gt;
* &amp;lt;code&amp;gt;ollama&amp;amp;gt; + Entrée&amp;lt;/code&amp;gt; : active Ollama comme moteur d&amp;#039;IA actif (si celui-ci a été activé).&lt;br /&gt;
* &amp;lt;code&amp;gt;clear&amp;amp;gt; + Entrée&amp;lt;/code&amp;gt; : efface la zone de réponse.&lt;br /&gt;
* &amp;lt;code&amp;gt;stop&amp;amp;gt; + Entrée&amp;lt;/code&amp;gt; : arrête la génération de la réponse (équivalent à un clic sur le bouton Stop).&lt;br /&gt;
* &amp;lt;code&amp;gt;Ctrl + Entrée&amp;lt;/code&amp;gt; : commence à générer la réponse (équivalent à un clic sur le bouton Start).&lt;br /&gt;
&lt;br /&gt;
En plus des requêtes standard, vous pouvez sélectionner un snippet de code spécifique dans la fenêtre de code et poser une &amp;#039;&amp;#039;&amp;#039;nouvelle question&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;demander une explication&amp;#039;&amp;#039;&amp;#039; en utilisant l&amp;#039;une des commandes suivantes :&lt;br /&gt;
&lt;br /&gt;
[[Image:ai smartchat.png|450px|link=]]&lt;br /&gt;
&lt;br /&gt;
*$COL : correspond au &amp;#039;&amp;#039;&amp;#039;numéro de colonne&amp;#039;&amp;#039;&amp;#039; sur lequel le curseur est placé dans la fenêtre éditeur de code active.&lt;br /&gt;
*$ROW : correspond au &amp;#039;&amp;#039;&amp;#039;numéro de ligne&amp;#039;&amp;#039;&amp;#039; sur lequel le curseur est placé dans la fenêtre éditeur de code active.&lt;br /&gt;
*$CURTOKEN : correspond au &amp;#039;&amp;#039;&amp;#039;mot&amp;#039;&amp;#039;&amp;#039; sur lequel le curseur est placé dans la fenêtre éditeur de code active. Cette commande peut être utile pour faire référence à une variable, une méthode ou un identificateur situé à l&amp;#039;emplacement du curseur.&lt;br /&gt;
*$EDNAME : correspond au &amp;#039;&amp;#039;&amp;#039;nom de fichier complet&amp;#039;&amp;#039;&amp;#039; de la fenêtre éditeur de code active. Cette commande peut être très utile si vous avez besoin du nom du  fichier en cours avec son chemin d&amp;#039;accès.&lt;br /&gt;
*$SELECTION : fournit des explications sur le code sélectionné dans l&amp;#039;éditeur actif.&lt;br /&gt;
*$UNIT : fournit des explications sur le code de l&amp;#039;unité.&lt;br /&gt;
&lt;br /&gt;
Consultez la page [[Macros de transfert|Macros de transfert]] pour plus d&amp;#039;informations et d&amp;#039;exemples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Voir aussi===&lt;br /&gt;
&lt;br /&gt;
* [[Options relatives à l&amp;#039;audit de code intelligent|Options relatives à l&amp;#039;audit de code intelligent]]&lt;br /&gt;
* [[Configuring Ollama for Smart CodeInsight|Configuration d&amp;#039;Ollama]]&lt;br /&gt;
* [[Create and implement your AI plugin|Créer et implémenter votre plugin IA]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 17:05:26 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Audit_de_code_intelligent</comments>
		</item>
		<item>
			<title>Options relatives à l&#039;audit de code intelligent</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Options_relatives_%C3%A0_l%27audit_de_code_intelligent&amp;diff=223415&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Options_relatives_%C3%A0_l%27audit_de_code_intelligent&amp;diff=223415&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Options_relatives_%C3%A0_l%27audit_de_code_intelligent&quot; title=&quot;Options relatives à l&amp;#039;audit de code intelligent&quot;&gt;Options relatives à l&amp;#039;audit de code intelligent&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Options de l&amp;#039;EDI}}&lt;br /&gt;
{{Menu| Outils &amp;amp;gt; Options &amp;amp;gt; EDI &amp;amp;gt; [[Audit de code intelligent|Audit de code intelligent]]}}&lt;br /&gt;
&lt;br /&gt;
Vous pouvez configurer l&amp;#039;intégration de &amp;#039;&amp;#039;&amp;#039;l&amp;#039;audit de code intelligent&amp;#039;&amp;#039;&amp;#039; dans la partie Audit de code intelligent de la fenêtre Options des outils, comme indiqué dans l&amp;#039;image ci-dessous.&lt;br /&gt;
&lt;br /&gt;
[[File:Smart codeinsight options available.png|600px|link=]]&lt;br /&gt;
&lt;br /&gt;
Sur cette fenêtre, vous pouvez configurer l&amp;#039;intégration IA à partir des champs suivants :&lt;br /&gt;
&lt;br /&gt;
*La case à cocher &amp;#039;&amp;#039;&amp;#039;Activer le moteur IA&amp;#039;&amp;#039;&amp;#039; permet d&amp;#039;activer la fonctionnalité.&lt;br /&gt;
*Les zones de liste déroulante &amp;#039;&amp;#039;&amp;#039;IA par défaut pour l&amp;#039;éditeur&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;IA par défaut pour la fenêtre de Chat&amp;#039;&amp;#039;&amp;#039; vous permettent de choisir l&amp;#039;IA disponible pour chacun des éléments.&lt;br /&gt;
&lt;br /&gt;
De plus, dans la section &amp;#039;&amp;#039;&amp;#039;Plugins&amp;#039;&amp;#039;&amp;#039;, vous pouvez configurer chacun des moteurs IA dans son onglet en spécifiant ses propres paramètres de configuration. Vous trouverez ci-dessous les options initiales suggérées pour chacun des moteurs :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:12%&amp;quot; |Configuration&lt;br /&gt;
! style=&amp;quot;width:22%&amp;quot; |ChatGPT&lt;br /&gt;
!Ollama**&lt;br /&gt;
! style=&amp;quot;width:22%&amp;quot; |Gemini&lt;br /&gt;
! style=&amp;quot;width:22%&amp;quot; |Claude&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;BaseURL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;https://api.openai.com/v1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Dépend de l&amp;#039;installation.&lt;br /&gt;
Si c&amp;#039;est un &amp;quot;localhost&amp;quot; avec l&amp;#039;option par défaut, l&amp;#039;URL de base est &amp;lt;nowiki&amp;gt;http://localhost:11434/&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
|&amp;lt;nowiki&amp;gt;https://generativelanguage.&amp;lt;/nowiki&amp;gt;&amp;amp;lt;wbr&amp;amp;gt;&amp;lt;nowiki&amp;gt;googleapis.com/v1beta&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;https://api.anthropic.com/v1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;APIKey&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|[https://platform.openai.com/account/api-keys Clé API dans OpenAI]&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|    [https://console.cloud.google.com/apis/dashboard Clé API dans l&amp;#039;API et les Services Google Cloud]&lt;br /&gt;
|[https://console.anthropic.com/settings/keys Clé API dans Anthropic]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Model*&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|gpt-4&lt;br /&gt;
|codellama&lt;br /&gt;
|models/gemini-pro&lt;br /&gt;
|claude-3-5-sonnet-20240620&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Timeout&amp;#039;&amp;#039;&amp;#039; (milliseconds)&lt;br /&gt;
|30.000&lt;br /&gt;
|30.000&lt;br /&gt;
|30.000&lt;br /&gt;
|30.000&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Maxtoken&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|2048&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|2048&lt;br /&gt;
|1024&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Temperature&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|0.1&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|0.9&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|    &amp;#039;&amp;#039;&amp;#039;TopP&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|1&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|    &amp;#039;&amp;#039;&amp;#039;TopK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|1&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|    &amp;#039;&amp;#039;&amp;#039;Anthropic Version&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;background-color:#e6e6e6;&amp;quot; |&lt;br /&gt;
|2023-06-01&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Une fois la configuration terminée, vous pouvez utiliser le bouton &amp;#039;&amp;#039;&amp;#039;Tester la connexion&amp;#039;&amp;#039;&amp;#039; pour tester la configuration sans avoir besoin de lancer le chat.&lt;br /&gt;
&lt;br /&gt;
{{Note| &amp;#039;&amp;#039;&amp;#039;(*)&amp;#039;&amp;#039;&amp;#039; RAD Studio suggère une liste de modèles disponibles, obtenus depuis le moteur d&amp;#039;IA précédemment configuré. Cette fonctionnalité est disponible pour tous les moteurs d&amp;#039;IA, à l&amp;#039;exception de Claude. }}&lt;br /&gt;
&lt;br /&gt;
{{Attention| &amp;#039;&amp;#039;&amp;#039;(**)&amp;#039;&amp;#039;&amp;#039; Si vous configurez Ollama, vous pouvez utiliser une image Docker pour l&amp;#039;installer. Pour plus d&amp;#039;informations, consultez la page Configuration d&amp;#039;Ollama pour l&amp;#039;audit de code intelligent}}&lt;br /&gt;
{{Tip|Pour rendre le moteur opérationnel, vous devez effectuer les étapes suivantes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;Configurer un moteur (l&amp;#039;un de ceux mentionnés ci-dessus).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Activer la case à cocher &amp;#039;&amp;#039;&amp;#039;Activé&amp;#039;&amp;#039;&amp;#039; de ce moteur d&amp;#039;IA.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Choisir le moteur pour l&amp;#039;éditeur et pour la fenêtre de chat.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Voir aussi===&lt;br /&gt;
* [[Page d&amp;#039;accueil|Page Bienvenue]]&lt;br /&gt;
* [[Mise à niveau des projets|Mise à niveau des projets]]&lt;br /&gt;
* [[Audit de code intelligent|Audit de code intelligent]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 17:05:26 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Options_relatives_%C3%A0_l%27audit_de_code_intelligent</comments>
		</item>
		<item>
			<title>Présentation de l&#039;EDI</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Pr%C3%A9sentation_de_l%27EDI&amp;diff=223413&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Pr%C3%A9sentation_de_l%27EDI&amp;diff=223413&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Pr%C3%A9sentation_de_l%27EDI&quot; title=&quot;Présentation de l&amp;#039;EDI&quot;&gt;Présentation de l&amp;#039;EDI&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Introduction à RAD Studio}}&lt;br /&gt;
&lt;br /&gt;
Quand vous démarrez {{Variables|Product}}, l&amp;#039;environnement de développement intégré (EDI) s&amp;#039;ouvre et affiche plusieurs outils et menus. L&amp;#039;EDI vous aide à concevoir visuellement des interfaces utilisateur, à définir les propriétés des objets, à voir et gérer votre application de diverses façons.&lt;br /&gt;
&lt;br /&gt;
Cette rubrique d&amp;#039;aide décrit les outils qui sont disponibles dans l&amp;#039;EDI. Sachez que les outils spécifiques qui sont disponibles varient selon l&amp;#039;édition de {{Variables|Product}} que vous utilisez.&lt;br /&gt;
&lt;br /&gt;
==Page d&amp;#039;accueil==&lt;br /&gt;
&lt;br /&gt;
Lorsque vous ouvrez {{Product}}, les sections de la &amp;#039;&amp;#039;&amp;#039;[[Page d&amp;#039;accueil|page d&amp;#039;accueil]]&amp;#039;&amp;#039;&amp;#039; affichent différents types d&amp;#039;informations utiles et proposent des actions. &lt;br /&gt;
&lt;br /&gt;
La &amp;#039;&amp;#039;&amp;#039;page d&amp;#039;accueil&amp;#039;&amp;#039;&amp;#039; comporte plusieurs cadres que vous pouvez ajouter, supprimer, repositionner ou redimensionner comme vous le souhaitez pour organiser les sections avec les informations que vous considérez comme les plus utiles pour commencer.&lt;br /&gt;
&lt;br /&gt;
Si vous fermez la &amp;#039;&amp;#039;&amp;#039;page d&amp;#039;accueil&amp;#039;&amp;#039;&amp;#039;, vous pouvez la rouvrir en choisissant {{Menu|Voir &amp;amp;gt; Page d&amp;#039;accueil}}.&lt;br /&gt;
&lt;br /&gt;
[[File:Welcome page1.png|border|link=|950px]]&lt;br /&gt;
&lt;br /&gt;
{{Note| Une balise &amp;#039;&amp;#039;&amp;#039;[Administrateur]&amp;#039;&amp;#039;&amp;#039; s&amp;#039;affiche au début du libellé de la barre de titre lorsque vous exécutez &amp;#039;&amp;#039;&amp;#039;l&amp;#039;EDI&amp;#039;&amp;#039;&amp;#039; avec des privilèges élevés.}}&lt;br /&gt;
&lt;br /&gt;
==[[Style EDI|Thème foncé]]==&lt;br /&gt;
&lt;br /&gt;
{{Product}} {{Version}} vous permet de choisir un thème foncé pour l&amp;#039;EDI. Le thème foncé s&amp;#039;applique à un schéma de couleurs complètement différent et fournit une apparence adaptée à une utilisation prolongée ou à un environnement à faible luminosité.&lt;br /&gt;
&lt;br /&gt;
Les options du thème EDI vous permettent de réaliser les actions suivantes :&lt;br /&gt;
&lt;br /&gt;
*Faire correspondre au thème Windows&lt;br /&gt;
*Activer le thème foncé&lt;br /&gt;
*Activer le thème clair&lt;br /&gt;
*Activer le thème Mountain Mist&lt;br /&gt;
*Choisir les couleurs prédéfinies pour l&amp;#039;éditeur et pour l&amp;#039;inspecteur d&amp;#039;objets indépendamment du thème de l&amp;#039;EDI sélectionné.&lt;br /&gt;
*Choisir la couleur de la barre de titre&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux options relatives aux thèmes de l&amp;#039;EDI, choisissez {{Menu|Outils &amp;amp;gt; Options &amp;amp;gt; Interface utilisateur &amp;amp;gt; [[Style EDI|Style de l&amp;#039;EDI]]}} ou cliquez sur le menu déroulant accessible dans la barre supérieure, à côté de la zone de liste déroulante des dispositions.&lt;br /&gt;
&lt;br /&gt;
[[File:Top Bar Menu.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==Options d&amp;#039;accessibilité==&lt;br /&gt;
&lt;br /&gt;
Avec l&amp;#039;EDI, vous pouvez utiliser les outils MSAA (MS Active Accessibility). Vous pouvez activer les outils d&amp;#039;accessibilité de Windows à partir du menu Démarrer via &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Tous les programmes &amp;amp;gt; Accessoires &amp;amp;gt; Accessibilité&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Dispositions du bureau et option d&amp;#039;auto-enregistrement Bureau du projet==&lt;br /&gt;
&lt;br /&gt;
La disposition du bureau par défaut de l&amp;#039;EDI comporte les outils les plus fréquemment utilisés ({{Menu|Outils &amp;amp;gt; Options &amp;amp;gt; EDI &amp;amp;gt; [[Bureau et disposition|Bureau et Disposition]]}}). Vous pouvez utiliser le menu Voir pour afficher ou masquer certains outils. Vous pouvez aussi personnaliser votre bureau en déplaçant et en supprimant des éléments, et [[Enregistrement des dispositions du bureau|enregistrer les dispositions du bureau]] qui vous conviennent le mieux.&lt;br /&gt;
&lt;br /&gt;
Les paramètres du bureau sont enregistrés dans un fichier &amp;lt;code&amp;gt;.dsk&amp;lt;/code&amp;gt;, et l&amp;#039;option &amp;#039;&amp;#039;&amp;#039;d&amp;#039;enregistrement automatique du bureau du projet&amp;#039;&amp;#039;&amp;#039; (sur {{Menu|Outils &amp;amp;gt; Options &amp;amp;gt; EDI &amp;amp;gt; [[Saving and Recovering|Enregistrement et récupération]]}}) permet d&amp;#039;enregistrer un fichier &amp;lt;code&amp;gt;.dsk&amp;lt;/code&amp;gt; pour le projet en cours.  Le fichier &amp;lt;code&amp;gt;.dsk&amp;lt;/code&amp;gt; conserve aussi les points d&amp;#039;arrêt et les points de suivi en cours. Le fichier &amp;lt;code&amp;gt;&amp;amp;lt;monprojet&amp;amp;gt;.dsk&amp;lt;/code&amp;gt; est enregistré dans votre dossier projet. Voir [[Enregistrement des dispositions du bureau|Enregistrement des dispositions du bureau]].&lt;br /&gt;
&lt;br /&gt;
==Onglets Editeur==&lt;br /&gt;
&lt;br /&gt;
La partie centrale de la fenêtre principale de l&amp;#039;EDI affiche une série d&amp;#039;onglets avec plusieurs fichiers code source et d&amp;#039;autres éléments ouverts. Il s&amp;#039;agit de l&amp;#039;espace de travail central. Les onglets contiennent généralement du code source ou un concepteur de fiches, mais ils peuvent aussi contenir un éditeur spécial ou des panneaux d&amp;#039;information, qui ont tous des couleurs différentes pour que vous puissiez les différencier des onglets normaux de code/concepteur.&lt;br /&gt;
&lt;br /&gt;
[[File:Welcome screen tabs.png|link=|550px]]&lt;br /&gt;
&lt;br /&gt;
Les onglets peuvent être déplacés hors de leur fenêtre ou dupliqués en cliquant dessus avec le bouton droit et en sélectionnant &amp;#039;&amp;#039;&amp;#039;Déplacer &amp;amp;gt;&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;Fractionner &amp;amp;gt;&amp;#039;&amp;#039;&amp;#039; à gauche, à droite, en haut ou en bas de l&amp;#039;EDI. Pour de plus amples informations, voir [[Fractionnement de l&amp;#039;éditeur|Fractionnement de l&amp;#039;éditeur]].&lt;br /&gt;
&lt;br /&gt;
Vous pouvez modifier le comportement de l&amp;#039;onglet (comme le bouton Fermer ou la fermeture automatique des onglets) ou l&amp;#039;affichage des couleurs sur la page de l&amp;#039;onglet [[IDE Options|Options de l&amp;#039;EDI]].&lt;br /&gt;
&lt;br /&gt;
==Utilisation d&amp;#039;une fiche==&lt;br /&gt;
&lt;br /&gt;
{{f|webdocs|En général, une fiche représente une fenêtre ou une page HTML dans l&amp;#039;interface utilisateur que vous concevez.|En général, une fiche représente une fenêtre dans l&amp;#039;interface utilisateur que vous concevez.}} Au moment de la conception, une fiche est affichée sur la surface du concepteur. Ajoutez des composants de la &amp;#039;&amp;#039;&amp;#039;[[Palette d&amp;#039;outils|Palette d&amp;#039;outils]]&amp;#039;&amp;#039;&amp;#039; sur la fiche pour créer votre interface utilisateur.&lt;br /&gt;
&lt;br /&gt;
{{Variables|Product}} propose une bibliothèque enrichie de fiches, comme décrit dans la section suivante. Sélectionnez la fiche la plus adaptée à la conception de votre application, qu&amp;#039;il s&amp;#039;agisse d&amp;#039;une application Web proposant des fonctionnalités de logique métier via le Web ou une application Windows proposant le traitement et l&amp;#039;affichage performant de contenu. Pour naviguer entre le concepteur et &amp;#039;&amp;#039;&amp;#039;[[Editeur de code|l&amp;#039;éditeur de code]]&amp;#039;&amp;#039;&amp;#039;, cliquez sur leur onglet respectif en bas de l&amp;#039;EDI.&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux fiches, choisissez &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Fichier &amp;amp;gt; Nouveau &amp;amp;gt; Autre&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;.&lt;br /&gt;
{{f|vcl|2=&lt;br /&gt;
&lt;br /&gt;
===Fiches VCL===&lt;br /&gt;
&lt;br /&gt;
Utilisez {{Variables|VCLForms}} pour créer des applications natives utilisant des composants VCL.&lt;br /&gt;
&lt;br /&gt;
Pour créer une application {{Variables|VCLForms}}, choisissez &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt; &amp;#039;&amp;#039;&amp;#039;Fichier &amp;amp;gt; Nouveau &amp;amp;gt; Autre &amp;amp;gt; [[Application Fiches VCL|Application Windows VCL]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Utilisez ensuite les classes de composants VCL pour créer votre application. Pour parcourir la bibliothèque VCL, voir [[lib_fr:Main Page|Référence VCL]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Concepteur de fiches==&lt;br /&gt;
&lt;br /&gt;
Le &amp;#039;&amp;#039;&amp;#039;[[Concepteur de fiches|Concepteur de fiches]]&amp;#039;&amp;#039;&amp;#039;, ou le concepteur, est affiché automatiquement dans le volet central quand vous utilisez une fiche. L&amp;#039;apparence et les fonctionnalités du concepteur dépendent du type de fiche que vous utilisez. {{f|webdocs|Par exemple, si vous utilisez une fiche Web, le concepteur affiche un éditeur de balise HTML.}}  Pour accéder au concepteur, cliquez sur l&amp;#039;onglet &amp;#039;&amp;#039;&amp;#039;Conception&amp;#039;&amp;#039;&amp;#039; en bas de l&amp;#039;EDI.&lt;br /&gt;
&lt;br /&gt;
===Composants visuels===&lt;br /&gt;
&lt;br /&gt;
Les composants visuels apparaissent dans la fiche lors de la conception et sont visibles pour l&amp;#039;utilisateur final à l&amp;#039;exécution. Ce sont les boutons, les libellés, les barres d&amp;#039;outils et les zones de liste.&lt;br /&gt;
{{f|vcl|2=&lt;br /&gt;
&lt;br /&gt;
===Aperçu d&amp;#039;une fiche  [[File:FormPreview.png]]===&lt;br /&gt;
&lt;br /&gt;
Une icône d&amp;#039;aperçu en bas à droite du concepteur (pour les fiches VCL) présente le positionnement de votre fiche sur l&amp;#039;écran à l&amp;#039;exécution. Vous pouvez ainsi positionner les fiches de votre application les unes en fonction des autres, au fur et à mesure que vous les concevez. Lorsque vous déplacez la fiche dans la fenêtre d&amp;#039;aperçu, les coordonnées x,y du coin supérieur gauche de la fiche sont affichées. Par exemple, &amp;quot;0,0&amp;quot; représente le coin supérieur gauche de l&amp;#039;écran.&lt;br /&gt;
&lt;br /&gt;
===Concepteur HTML===&lt;br /&gt;
&lt;br /&gt;
Utilisez le &amp;#039;&amp;#039;&amp;#039;concepteur HTML&amp;#039;&amp;#039;&amp;#039; pour visualiser et modifier les fiches Web ou les pages HTML. Ce concepteur comporte un &amp;#039;&amp;#039;&amp;#039;Editeur de balise&amp;#039;&amp;#039;&amp;#039; pour modifier les balises HTML avec la représentation visuelle de la fiche ou de la page. Vous pouvez aussi utiliser &amp;#039;&amp;#039;&amp;#039;l&amp;#039;inspecteur d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039; pour modifier les propriétés des éléments visibles de la page HTML et afficher les propriétés de la balise HTML en cours dans &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de balise&amp;#039;&amp;#039;&amp;#039;. Une boîte à options située au-dessus de &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de balise&amp;#039;&amp;#039;&amp;#039; vous permet d&amp;#039;afficher et de modifier les balises SCRIPT.&lt;br /&gt;
&lt;br /&gt;
Pour créer un nouveau fichier HTML, choisissez {{Menu|Fichier &amp;amp;gt; Nouveau &amp;amp;gt; Autre &amp;amp;gt; Web &amp;amp;gt; Page HTML}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Directives de conception===&lt;br /&gt;
&lt;br /&gt;
Si vous créez un composant pour une fiche, vous pouvez enregistrer un type d&amp;#039;objet, puis indiquer différents points sur ses limites, ou proches d&amp;#039;elles, qui constitueront des points &amp;quot;d&amp;#039;alignement&amp;quot;. Ces points d&amp;#039;alignement sont des traits verticaux ou horizontaux qui traversent les limites d&amp;#039;un contrôle virtuel.&lt;br /&gt;
&lt;br /&gt;
Quand les points d&amp;#039;alignement sont en place, vous pouvez fournir les informations sur les directives de l&amp;#039;UI de façon à ce que chaque composant respecte les prescriptions s&amp;#039;appliquant, par exemple, à la distance entre les contrôles, aux raccourcis, aux libellés prenant la focalisation, à l&amp;#039;ordre de tabulation, au nombre maximal d&amp;#039;éléments (zones de liste, menus), et ainsi de suite. De cette façon, le &amp;#039;&amp;#039;&amp;#039;Concepteur de fiches&amp;#039;&amp;#039;&amp;#039; peut assister le développeur de code dans l&amp;#039;adhésion aux directives établies sur l&amp;#039;UI.&lt;br /&gt;
&lt;br /&gt;
Si l&amp;#039;option &amp;#039;&amp;#039;&amp;#039;Accrocher à la grille&amp;#039;&amp;#039;&amp;#039; est activée (sur {{Menu|Outils &amp;amp;gt; Options &amp;amp;gt; Interface utilisateur &amp;amp;gt; [[Options du Concepteur de fiches|Concepteur de fiches]]}}), ainsi que &amp;#039;&amp;#039;&amp;#039;Utiliser les directives du concepteur&amp;#039;&amp;#039;&amp;#039;, les directives du concepteur sont prioritaires. Cela signifie que si un point de la grille se trouve dans la tolérance du nouvel emplacement et qu&amp;#039;une directive se trouve également dans le voisinage, le contrôle respecte la directive et non la position sur la grille, même si la directive ne coïncide pas avec la position sur la grille. La tolérance d&amp;#039;alignement est déterminée par la taille de la grille. Même si les options &amp;#039;&amp;#039;&amp;#039;Accrocher à la grille&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;Afficher la grille&amp;#039;&amp;#039;&amp;#039; sont désactivées, le Concepteur détermine la tolérance en fonction de la taille de la grille.&lt;br /&gt;
&lt;br /&gt;
==Palette d&amp;#039;outils==&lt;br /&gt;
&lt;br /&gt;
La &amp;#039;&amp;#039;&amp;#039;[[Palette d&amp;#039;outils|Palette d&amp;#039;outils]]&amp;#039;&amp;#039;&amp;#039;, située sur la colonne de droite, contient des éléments qui vous permettent de développer votre application. Les éléments affichés dépendent de la vue en cours. Par exemple, si vous affichez une fiche sur le concepteur, la &amp;#039;&amp;#039;&amp;#039;palette d&amp;#039;outils&amp;#039;&amp;#039;&amp;#039; affiche les composants appropriés à cette fiche. Double-cliquez sur un contrôle pour l&amp;#039;ajouter à votre fiche. Vous pouvez aussi le faire glisser vers une position désirée de la fiche. Si vous visualisez du code dans &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de code&amp;#039;&amp;#039;&amp;#039;, la &amp;#039;&amp;#039;&amp;#039;palette d&amp;#039;outils&amp;#039;&amp;#039;&amp;#039; affiche des segments de code que vous pouvez ajouter à votre application.&lt;br /&gt;
&lt;br /&gt;
===Composants personnalisés===&lt;br /&gt;
&lt;br /&gt;
Outre les composants qui sont installés avec {{Variables|Product}}, vous pouvez ajouter des composants personnalisés ou tiers à &amp;#039;&amp;#039;&amp;#039;la palette d&amp;#039;outils&amp;#039;&amp;#039;&amp;#039; et les enregistrer dans leur propre catégorie.&lt;br /&gt;
&lt;br /&gt;
===Templates de composants===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez créer des templates composés d&amp;#039;un ou de plusieurs composants. Après avoir organisé les composants sur une fiche, défini leurs propriétés et écrit du code pour eux, vous pouvez les enregistrer sous la forme d&amp;#039;un template de composant. Par la suite, en sélectionnant le template dans &amp;#039;&amp;#039;&amp;#039;la palette d&amp;#039;outils&amp;#039;&amp;#039;&amp;#039;, vous pouvez placer les composants préconfigurés sur une fiche en une seule étape&amp;amp;nbsp;; toutes les propriétés et tout le code de gestion d&amp;#039;événement associés sont simultanément ajoutés à votre projet. Vous pouvez repositionner les composants indépendamment les uns des autres, réinitialiser leurs propriétés, et&amp;amp;nbsp;créer ou modifier des gestionnaires d&amp;#039;événements comme si vous aviez positionné chaque composant séparément.&lt;br /&gt;
{{f|componenttoolbar|2=&lt;br /&gt;
&lt;br /&gt;
==Barre d&amp;#039;outils des composants==&lt;br /&gt;
&lt;br /&gt;
La &amp;#039;&amp;#039;&amp;#039;[[Barre d&amp;#039;outils des composants|Barre d&amp;#039;outils des composants]]&amp;#039;&amp;#039;&amp;#039; contient toutes les catégories et tous les composants qui apparaissent sur la &amp;#039;&amp;#039;&amp;#039;palette d&amp;#039;outils&amp;#039;&amp;#039;&amp;#039; régulière (Standard, Accès aux données, et ainsi de suite). Toutefois, la &amp;#039;&amp;#039;&amp;#039;barre d&amp;#039;outils des composants&amp;#039;&amp;#039;&amp;#039; affiche les catégories de composants sous la forme d&amp;#039;un ensemble d&amp;#039;onglets situé sur la barre d&amp;#039;outils au sommet de la fenêtre de l&amp;#039;EDI, similaire à {{Delphi|7}} {{Version|7}} et {{CBuilder|6}} {{Version|6}}. Cliquez sur un onglet de la barre d&amp;#039;outils des composants pour afficher les icônes des composants de cette catégorie. Cliquez ensuite sur une icône pour sélectionner un composant.&lt;br /&gt;
&lt;br /&gt;
Quand la &amp;#039;&amp;#039;&amp;#039;barre d&amp;#039;outils des composants&amp;#039;&amp;#039;&amp;#039; est activée, la &amp;#039;&amp;#039;&amp;#039;palette d&amp;#039;outils&amp;#039;&amp;#039;&amp;#039; est aussi disponible, et vous pouvez utiliser la &amp;#039;&amp;#039;&amp;#039;barre d&amp;#039;outils des composants&amp;#039;&amp;#039;&amp;#039; ou la &amp;#039;&amp;#039;&amp;#039;palette d&amp;#039;outils&amp;#039;&amp;#039;&amp;#039; pour ajouter des composants à votre application. Voir [[Activation de la barre d&amp;#039;outils des composants|Activation de la barre d&amp;#039;outils des composants]].&lt;br /&gt;
&lt;br /&gt;
Pour de plus amples informations sur les différentes barres d&amp;#039;outils disponibles dans l&amp;#039;EDI, voir &amp;#039;&amp;#039;&amp;#039;[[Barres d&amp;#039;outils|Barres d&amp;#039;outils]]&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Inspecteur d&amp;#039;objets==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Inspecteur d&amp;#039;objets|L&amp;#039;inspecteur d&amp;#039;objets]]&amp;#039;&amp;#039;&amp;#039;, situé sur la gauche, vous permet de définir les propriétés de conception et de créer des gestionnaires d&amp;#039;événements pour vos composants. Il fournit la connexion entre l&amp;#039;apparence visuelle de votre application et le code qui lui permet de fonctionner. &amp;#039;&amp;#039;&amp;#039;L&amp;#039;inspecteur d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039; contient deux onglets&amp;amp;nbsp;: &amp;#039;&amp;#039;&amp;#039;Propriétés&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;Evénements&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Utilisez l&amp;#039;onglet &amp;#039;&amp;#039;&amp;#039;Propriétés&amp;#039;&amp;#039;&amp;#039; pour modifier les attributs physiques des composants. Selon votre sélection, certaines catégories d&amp;#039;options vous permettent d&amp;#039;entrer une valeur dans une zone de texte, alors que d&amp;#039;autres attendent que vous sélectionniez une valeur dans une liste déroulante. Pour les opérations booléennes, vous passez de True à False, et vice-versa. Après avoir modifié les attributs physiques de vos composants, vous créez des gestionnaires d&amp;#039;événements qui gèrent les composants.&lt;br /&gt;
&lt;br /&gt;
Utilisez l&amp;#039;onglet &amp;#039;&amp;#039;&amp;#039;Evénements&amp;#039;&amp;#039;&amp;#039; pour spécifier les événements d&amp;#039;un objet spécifique que vous sélectionnez. S&amp;#039;il existe un gestionnaire d&amp;#039;événement, utilisez la liste déroulante pour le sélectionner. Par défaut, certaines options de &amp;#039;&amp;#039;&amp;#039;l&amp;#039;inspecteur d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039; sont repliées. Pour développer les options, cliquez sur le signe plus (+) en regard de la catégorie.&lt;br /&gt;
&lt;br /&gt;
Certains composants non visuels, comme les fournisseurs de données Borland offrent un accès rapide à des éditeurs comme &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de connexion&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de texte de commande&amp;#039;&amp;#039;&amp;#039;. Vous pouvez accéder à ces éditeurs dans la zone &amp;#039;&amp;#039;&amp;#039;Verbe du concepteur&amp;#039;&amp;#039;&amp;#039; en bas de &amp;#039;&amp;#039;&amp;#039;l&amp;#039;inspecteur d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039;. Pour ouvrir les éditeurs, placez votre curseur sur le nom de l&amp;#039;éditeur jusqu&amp;#039;à ce que le curseur prenne la forme d&amp;#039;une main et l&amp;#039;éditeur se change en un lien. Vous pouvez aussi cliquer avec le bouton droit sur le composant non visuel et défiler jusqu&amp;#039;à l&amp;#039;éditeur associé et le sélectionner. Sachez que les composants non visuels n&amp;#039;ont pas tous d&amp;#039;éditeur associé. En plus des éditeurs, cette zone peut aussi afficher des hyperliens pour montrer des éditeurs de composants personnalisés, lancer une page web et afficher des boîtes de dialogue.&lt;br /&gt;
&lt;br /&gt;
==Référentiel d&amp;#039;objets==&lt;br /&gt;
&lt;br /&gt;
Pour simplifier le développement, {{Variables|Product}} propose des templates prédéfinis, des fiches et d&amp;#039;autres éléments auxquels vous avez accès et que vous pouvez utiliser dans vos applications.&lt;br /&gt;
&lt;br /&gt;
===Contenu du référentiel d&amp;#039;objets===&lt;br /&gt;
&lt;br /&gt;
Le &amp;#039;&amp;#039;&amp;#039;[[Référentiel d&amp;#039;objets|Référentiel d&amp;#039;objets]]&amp;#039;&amp;#039;&amp;#039; contient des éléments qui correspondent aux types d&amp;#039;applications que vous pouvez développer. Il contient des templates, des fiches et bien d&amp;#039;autres éléments. Vous pouvez créer des projets tels qu&amp;#039;une bibliothèque de classes, une bibliothèque de contrôles, des applications console et autres en accédant aux templates disponibles.&lt;br /&gt;
&lt;br /&gt;
Pour ouvrir le &amp;#039;&amp;#039;&amp;#039;référentiel d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039;, choisissez &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Fichier &amp;amp;gt; Nouveau &amp;amp;gt; Autre&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;. La boîte de dialogue &amp;#039;&amp;#039;&amp;#039;Nouveaux éléments&amp;#039;&amp;#039;&amp;#039; affiche le contenu du &amp;#039;&amp;#039;&amp;#039;référentiel d’objets&amp;#039;&amp;#039;&amp;#039;. Vous pouvez aussi modifier ou retirer des objets existants du &amp;#039;&amp;#039;&amp;#039;référentiel d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039; en cliquant avec le bouton droit dans le &amp;#039;&amp;#039;&amp;#039;référentiel d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039; afin d&amp;#039;afficher les options d&amp;#039;édition.&lt;br /&gt;
&lt;br /&gt;
===Templates du référentiel d&amp;#039;objets===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez ajouter vos propres objets au &amp;#039;&amp;#039;&amp;#039;référentiel d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039; en tant que templates que vous réutilisez ou partagez avec d&amp;#039;autres développeurs. La réutilisation d&amp;#039;objets vous permet de concevoir des familles d&amp;#039;applications ayant une interface utilisateur et des fonctionnalités communes, afin de réduire les temps de développement et d&amp;#039;améliorer la qualité.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez ajouter dans le &amp;#039;&amp;#039;&amp;#039;référentiel d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039; un projet de démarrage, une démo, un template ou tout autre fichier utile et le rendre accessible depuis le menu Nouveau. Choisissez &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Projet  &amp;amp;gt; Ajouter au référentiel&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;. Sélectionnez votre fichier. Ensuite, lorsque vous sélectionnez la commande &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Fichier &amp;amp;gt; Nouveau&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;, vous pouvez choisir le fichier que vous venez d&amp;#039;ajouter et en utiliser un nouvel exemplaire.&lt;br /&gt;
&lt;br /&gt;
{{Variables|Product}} vous permet de créer plusieurs bibliothèques de templates personnalisées servant de base à la création de futurs projets. Les bibliothèques de templates vous permettent de définir l&amp;#039;apparence des projets et d&amp;#039;ajouter de nouveaux types de projets dans le &amp;#039;&amp;#039;&amp;#039;référentiel d&amp;#039;objets&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==Gestionnaire de projets==&lt;br /&gt;
&lt;br /&gt;
Un &amp;#039;&amp;#039;&amp;#039;projet&amp;#039;&amp;#039;&amp;#039; est constitué de plusieurs fichiers d&amp;#039;application. La &amp;#039;&amp;#039;&amp;#039;[[Fenêtre Projets|Fenêtre Projets]]&amp;#039;&amp;#039;&amp;#039;, située dans la colonne supérieure droite, permet de visualiser et d&amp;#039;organiser les fichiers de votre projet, comme les fiches, les exécutables, les assemblages, les objets et les fichiers bibliothèque. Dans le &amp;#039;&amp;#039;&amp;#039;Gestionnaire de projets&amp;#039;&amp;#039;&amp;#039;, vous pouvez ajouter, retirer et renommer des fichiers en utilisant la barre d&amp;#039;outils ou le menu contextuel. Vous pouvez même appeler la boîte de dialogue Options de projet depuis le menu contextuel du &amp;#039;&amp;#039;&amp;#039;Gestionnaire de projets&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
===Groupes de projets===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez combiner des projets associés pour former un &amp;#039;&amp;#039;&amp;#039;groupe de projets&amp;#039;&amp;#039;&amp;#039;. Pour ce faire, cliquez avec le bouton droit sur le noeud groupe de projets par défaut ([[File:Project Group.png]]) dans le &amp;#039;&amp;#039;&amp;#039;Gestionnaire de projets&amp;#039;&amp;#039;&amp;#039; et sélectionnez &amp;#039;&amp;#039;&amp;#039;[[Ajouter un nouveau projet|Ajouter un nouveau projet]]&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;Ajouter un projet existant&amp;#039;&amp;#039;&amp;#039;. La liaison de plusieurs projets en un groupe de projets vous permet de compiler le groupe de projets entier en une seule fois. Mais vous pouvez aussi compiler tout projet unique en cliquant avec le bouton droit sur un noeud de projet et en sélectionnant une des commandes de compilation ou de construction sur le menu contextuel. &lt;br /&gt;
&lt;br /&gt;
Après la création délibérée d&amp;#039;un groupe de projets, vous êtes invité à enregistrer le fichier &amp;lt;code&amp;gt;.groupproj&amp;lt;/code&amp;gt; quand vous quittez l&amp;#039;EDI ou entrez une commande d&amp;#039;enregistrement pour un des projets inclus. Vous pouvez aussi enregistrer explicitement un groupe de projets en utilisant les commandes du menu contextuel.&lt;br /&gt;
&lt;br /&gt;
==Explorateur de données==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Explorateur de données|L&amp;#039;explorateur de données]]&amp;#039;&amp;#039;&amp;#039; permet de parcourir des objets de schéma spécifiques au serveur de base de données, notamment les tables, les champs, les définitions de procédures stockées, les déclencheurs et les index. Les menus contextuels vous permettent de créer et de gérer les connexions aux bases de données. Vous pouvez aussi faire glisser et déposer des données depuis une source de données vers la plupart des fiches pour construire rapidement votre application de base de données.&lt;br /&gt;
&lt;br /&gt;
==Vue Structure==&lt;br /&gt;
&lt;br /&gt;
La &amp;#039;&amp;#039;&amp;#039;[[Vue Structure|Vue Structure]]&amp;#039;&amp;#039;&amp;#039; présente la hiérarchie du code source ou le langage HTML affiché dans &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de code&amp;#039;&amp;#039;&amp;#039;, ou les composants affichés sur le concepteur. Si la vue affiche la structure du code source ou le langage HTML, vous pouvez double-cliquer sur un élément pour accéder à sa déclaration ou à son emplacement dans &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de code&amp;#039;&amp;#039;&amp;#039;. Si la vue affiche des composants, vous pouvez double-cliquer sur un composant pour le sélectionner sur la fiche.&lt;br /&gt;
&lt;br /&gt;
Si votre code contient des erreurs de syntaxe, elles s&amp;#039;affichent dans le dossier &amp;#039;&amp;#039;&amp;#039;Erreurs&amp;#039;&amp;#039;&amp;#039; de la vue &amp;#039;&amp;#039;&amp;#039;Structure&amp;#039;&amp;#039;&amp;#039;. Double-cliquez sur une erreur pour localiser sa source dans &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de code&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez contrôler le contenu et l&amp;#039;aspect de la &amp;#039;&amp;#039;&amp;#039;vue Structure&amp;#039;&amp;#039;&amp;#039; en choisissant {{Menu| Outils &amp;amp;gt; Options &amp;amp;gt; Interface utilisateur &amp;amp;gt; [[Structure|Structure]]}}, puis en modifiant les paramètres.&lt;br /&gt;
&lt;br /&gt;
==[[Audit de code intelligent|Fenêtre de chat IA]]==&lt;br /&gt;
&lt;br /&gt;
La fenêtre de chat IA est une fiche ancrable de l&amp;#039;EDI, qui fonctionne comme n&amp;#039;importe quelle fenêtre de chat LLM. Vous pouvez taper une requête, choisir un moteur et attendre la réponse.&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir utiliser cette fonctionnalité, vous devez toutefois l&amp;#039;activer dans l&amp;#039;option [[Options relatives à l&amp;#039;audit de code intelligent|Audit de code intelligent]]. &lt;br /&gt;
&lt;br /&gt;
==Gestionnaire de l&amp;#039;historique==&lt;br /&gt;
&lt;br /&gt;
Le &amp;#039;&amp;#039;&amp;#039;[[Gestionnaire de l&amp;#039;historique|Gestionnaire de l&amp;#039;historique]]&amp;#039;&amp;#039;&amp;#039;, situé dans le volet central, vous permet de voir et de comparer les versions d&amp;#039;un fichier, y compris les diverses versions sauvegardées, les modifications enregistrées localement et le tampon mémoire des modifications non enregistrées d&amp;#039;un fichier actif. Si le fichier en cours est sous contrôle de version, tous les types des révisions sont disponibles dans le &amp;#039;&amp;#039;&amp;#039;gestionnaire de l&amp;#039;historique&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Intégration de Subversion dans l&amp;#039;EDI|L&amp;#039;intégration de Subversion dans l&amp;#039;EDI]]&amp;#039;&amp;#039;&amp;#039; est implémentée sur le &amp;#039;&amp;#039;&amp;#039;gestionnaire de l&amp;#039;historique&amp;#039;&amp;#039;&amp;#039;, qui affiche les informations Subversion chaque fois qu&amp;#039;elles sont disponibles dans le système de fichiers.&lt;br /&gt;
&lt;br /&gt;
Le &amp;#039;&amp;#039;&amp;#039;gestionnaire de l&amp;#039;historique&amp;#039;&amp;#039;&amp;#039; se trouve à droite de l&amp;#039;onglet &amp;#039;&amp;#039;&amp;#039;Code&amp;#039;&amp;#039;&amp;#039; et contient les pages à onglets suivantes :&lt;br /&gt;
&lt;br /&gt;
*La page &amp;#039;&amp;#039;&amp;#039;Contenu&amp;#039;&amp;#039;&amp;#039; affiche les versions actuelle et précédente du fichier.&lt;br /&gt;
*La page &amp;#039;&amp;#039;&amp;#039;Diff&amp;#039;&amp;#039;&amp;#039; affiche les différences entre les versions sélectionnées du fichier.&lt;br /&gt;
*La page &amp;#039;&amp;#039;&amp;#039;Info&amp;#039;&amp;#039;&amp;#039; affiche tous les libellés et commentaires associés au fichier actif.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez utiliser la barre d&amp;#039;outils du &amp;#039;&amp;#039;&amp;#039;gestionnaire de l&amp;#039;historique&amp;#039;&amp;#039;&amp;#039; pour actualiser les informations de révision, rétablir une version sélectionnée à la version la plus actuelle et synchroniser le défilement entre les visualiseurs source de la page &amp;#039;&amp;#039;&amp;#039;Contenu&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;Diff&amp;#039;&amp;#039;&amp;#039;, et &amp;#039;&amp;#039;&amp;#039;l&amp;#039;éditeur de code&amp;#039;&amp;#039;&amp;#039;, et pour la navigation de fenêtre (comme Aller à la différence suivante).&lt;br /&gt;
&lt;br /&gt;
==Editeur de code==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Editeur de code|L&amp;#039;éditeur de code]]&amp;#039;&amp;#039;&amp;#039;, situé dans le volet central, propose un moyen pratique de visualiser et de modifier le code source. C&amp;#039;est un éditeur UTF8 complet et personnalisable qui comprend entre autres les sauvegardes automatiques, l&amp;#039;audit de code, la mise en surbrillance syntaxique, de multiples capacités d&amp;#039;annulation, l&amp;#039;aide contextuelle, les templates dynamiques, la saisie semi-automatique de blocs (achèvement de bloc), la recherche de classe, la recherche d&amp;#039;unités et l&amp;#039;importation d&amp;#039;un espace de nommage.&lt;br /&gt;
&lt;br /&gt;
==Débogueur==&lt;br /&gt;
&lt;br /&gt;
Les débogueurs intégrés vous permettent de trouver et de corriger les erreurs d&amp;#039;exécution et de logique dans votre application {{Variables|Product}}. En utilisant les débogueurs, vous pouvez parcourir le code pas à pas, définir des points d&amp;#039;arrêt et de suivi et inspecter ou modifier les valeurs du programme. Quand vous déboguez votre application, les [[Fenêtres de débogage - Index|fenêtres de débogage]] sont disponibles pour vous aider à gérer la session de débogage et vous donnent des informations sur l&amp;#039;état de votre application.&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Aperçu et page d&amp;#039;accueil|Aperçu et page d&amp;#039;accueil]]&lt;br /&gt;
*[[Référence EDI et utilitaires|Référence EDI et utilitaires]]&lt;br /&gt;
*[[Démarrage d&amp;#039;un projet - Présentation|Démarrage d&amp;#039;un projet - Présentation]]&lt;br /&gt;
*[[Enregistrement des dispositions du bureau|Enregistrement des dispositions du bureau]]&lt;br /&gt;
*[[Concepteur de fiches|Concepteur de fiches]]&lt;br /&gt;
*[[Ajout de composants à une fiche|Ajout de composants à une fiche]]&lt;br /&gt;
*[[Définition des propriétés et des événements|Définition des propriétés et des événements]]&lt;br /&gt;
*[[Editeur de code|Editeur de code]]&lt;br /&gt;
*[[Personnalisation de l&amp;#039;éditeur de code|Personnalisation de l&amp;#039;éditeur de code]]&lt;br /&gt;
*[[Fractionnement de l&amp;#039;éditeur|Fractionnement de l&amp;#039;éditeur]]&lt;br /&gt;
*[[Débogage des applications - Index|Débogage des applications]]&lt;br /&gt;
*[[Utilisation du Gestionnaire de l&amp;#039;historique|Utilisation du Gestionnaire de l&amp;#039;historique]]&lt;br /&gt;
*[[Rubriques de l&amp;#039;explorateur de classes Delphi|Rubriques de l&amp;#039;explorateur de classes Delphi]]&lt;br /&gt;
*[[Rubriques de l&amp;#039;explorateur de classes C++|Rubriques de l&amp;#039;explorateur de classes C++]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Prise en main]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 17:05:26 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Pr%C3%A9sentation_de_l%27EDI</comments>
		</item>
		<item>
			<title>WebStencils</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=WebStencils&amp;diff=223411&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=WebStencils&amp;diff=223411&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/WebStencils&quot; title=&quot;WebStencils&quot;&gt;WebStencils&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;WebStencils, un système d&amp;#039;intégration et de traitement des fichiers HTML côté serveur, a été introduit dans {{Product}} version 12.2 pour les technologies WebBroker et RAD Server. Cette fonctionnalité flexible permet aux développeurs de concevoir des sites web modernes basés sur n&amp;#039;importe quelle bibliothèque JavaScript tout en exploitant les données extraites et traitées par une application serveur RAD Studio. Cette technologie offre une grande flexibilité pour créer des sites web adaptés à vos besoins spécifiques.&lt;br /&gt;
&lt;br /&gt;
WebStencils a pour objectif de faciliter la création de sites de navigation par l&amp;#039;adoption des technologies Web (WebBroker, DataSnap, RAD Server) en fournissant des scripts côté serveur. Il est ainsi possible de générer des pages HTML avec des outils standard et d&amp;#039;utiliser n&amp;#039;importe quelle bibliothèque CSS et JavaScript tout en ajoutant des données à partir des pages générées depuis l&amp;#039;application (il peut s&amp;#039;agir par exemple du résultat d&amp;#039;une requête de base de données).&lt;br /&gt;
&lt;br /&gt;
De plus, WebStencils constitue une excellente base pour le développement Web avec HTMX. Les pages HTMX bénéficient de la génération de code côté serveur et peuvent se connecter à des serveurs REST pour la mise à jour du contenu. Les technologies Web de Delphi offrent des fonctionnalités de génération de page et d&amp;#039;API REST de très haut niveau.&lt;br /&gt;
&lt;br /&gt;
==Syntaxe de WebStencil==&lt;br /&gt;
&lt;br /&gt;
Le langage de script de WebStencils repose sur deux éléments et est relativement simple :&lt;br /&gt;
&lt;br /&gt;
* Le {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039; }}&lt;br /&gt;
* Les accolades {{code| &amp;#039;&amp;#039;&amp;#039;{ }&amp;#039;&amp;#039;&amp;#039; }}&lt;br /&gt;
&lt;br /&gt;
===Utilisation du symbole {{code|@}}===&lt;br /&gt;
&lt;br /&gt;
WebStencils utilise le symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}} comme marqueur spécial plutôt que des balises HTML/XML ou d&amp;#039;autres notations. Le symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}} est suivi par :&lt;br /&gt;
&lt;br /&gt;
* Le nom d&amp;#039;un objet ou d&amp;#039;un champ.&lt;br /&gt;
* Un [[WebStencils#Mots clé de WebStencils|mot clé spécial]].&lt;br /&gt;
* Un autre symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}}. {{Tip|  L&amp;#039;utilisation du symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}} est plus souple. Ainsi, vous n&amp;#039;aurez pas besoin de le doubler dans certaines situations, comme dans les en-têtes.}}&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;accès général à une valeur est basé sur une notation par point, sous la forme object.value. C&amp;#039;est pourquoi vous observerez des balises comme :&lt;br /&gt;
&lt;br /&gt;
 @object.value&lt;br /&gt;
&lt;br /&gt;
Le nom de &amp;#039;&amp;#039;&amp;#039;l&amp;#039;objet&amp;#039;&amp;#039;&amp;#039; est un nom symbolique local qui peut correspondre à un objet réel d&amp;#039;une application serveur, assigné à l&amp;#039;exécution du script via un processus de recensement. Il peut aussi être résolu dans le code lors du traitement d&amp;#039;un gestionnaire d&amp;#039;événement OnGetValue.&lt;br /&gt;
&lt;br /&gt;
La valeur est composée du nom de la propriété (pour un objet générique), du nom d&amp;#039;un champ (si l&amp;#039;objet hérite de TDataSet), et d&amp;#039;une chaîne qui est transmise dans le gestionnaire d&amp;#039;événement OnGetValue associé au processeur.&lt;br /&gt;
&lt;br /&gt;
{{Note|La sortie des valeurs traitées par WebStencils est chiffrée avec la méthode TNetEncoding.HTML.Encode. Vous pouvez supprimer le chiffrement en utilisant la syntaxe {{code|@\value}}.}}&lt;br /&gt;
&lt;br /&gt;
====Accès aux ensembles de données et objets imbriqués====&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi utiliser le symbole {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}} pour accéder à des ensembles de données et des objets imbriqués en utilisant la syntaxe suggérée dans les scénarios suivants :&lt;br /&gt;
&lt;br /&gt;
* Objets et classes imbriqués :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@MyObject.SubObject.ProperyName&amp;lt;/source&amp;gt;&lt;br /&gt;
* Tables dans les ensembles de données imbriqués :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@MyDataSet.DataSetField.SubField&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Utilisation des accolades pour les blocs {{code|{}}}===&lt;br /&gt;
&lt;br /&gt;
La seconde notation utilise des accolades, {{code|{}} et {{code|}}}, pour indiquer les blocs conditionnels ou répétés.&lt;br /&gt;
&lt;br /&gt;
Toute autre utilisation des accolades dans le fichier de code source (le fichier HTML) est ignorée. En d&amp;#039;autres termes, les accolades ne sont traitées que si elles sont utilisées après une instruction conditionnelle WebStencils spécifique.&lt;br /&gt;
&lt;br /&gt;
===Accès à des valeurs avec la notation par point===&lt;br /&gt;
&lt;br /&gt;
Prenons en exemple l&amp;#039;extrait de code HTML WebStencils ci-dessous :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;GetValue&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Value obtained from data: @data.name&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Value obtained with request @@data.value: @data.value&amp;lt;/p&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les symboles {{code|@@}} sont ignorés (nous attendons un seul {{code|@}} en sortie). Il suffit d&amp;#039;un seul pour déclencher le traitement. &lt;br /&gt;
Notez également que les deux symboles, le nom d&amp;#039;objet et le nom de valeur, doivent être des identificateurs Delphi valides et ne peuvent pas contenir d&amp;#039;espaces ni commencer par un chiffre. Un nom peut contenir des caractères de soulignement et des chiffres.&lt;br /&gt;
&lt;br /&gt;
===Gestionnaire d&amp;#039;événement OnValue===&lt;br /&gt;
&lt;br /&gt;
Il est possible de fournir des données en utilisant un composant avec le gestionnaire d&amp;#039;événement OnValue. Par exemple :&amp;amp;lt;br /&amp;amp;gt;&amp;#039;&amp;#039;&amp;#039;Delphi :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TWebModule13.WebStencilsValueFromEventValue(Sender: TObject;&lt;br /&gt;
  const ObjectName, FieldName: string; var ReplaceText: string; &lt;br /&gt;
  var Handled: Boolean)&lt;br /&gt;
begin&lt;br /&gt;
  if SameText (ObjectName, &amp;#039;data&amp;#039;) then&lt;br /&gt;
  begin&lt;br /&gt;
    Handled := True;&lt;br /&gt;
    ReplaceText := &amp;#039;You requested &amp;#039; + FieldName;&lt;br /&gt;
  end;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans le code exemple ci-dessus, le code vérifie uniquement le nom d&amp;#039;objet (la première partie du symbole avant le point), mais il est recommandé de vérifier également la propriété FieldName (le symbole après le point).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++ :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TWebModule13::WebStencilsValueFromEventValue(TObject *Sender,&lt;br /&gt;
  const String ObjectName, const String FieldName, String &amp;amp;ReplaceText, bool &amp;amp;Handled)&lt;br /&gt;
{&lt;br /&gt;
  if (SameText(ObjectName, &amp;quot;data&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    Handled = true;&lt;br /&gt;
    ReplaceText = &amp;quot;You requested &amp;quot; + FieldName;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, {{code|String}} est une chaîne {{code|UnicodeString}} compatible Delphi dans C++ Builder. {{code|SameText}} est une fonction de comparaison de chaînes insensible à la casse fournie par SysUtils. Enfin, {{code|&amp;amp;amp;ReplaceText}} et {{code|&amp;amp;amp;Handled}} sont transmis par référence pour permettre la modification et reproduire le comportement {{code|var}} de Delphi.&lt;br /&gt;
&lt;br /&gt;
===Utilisation d&amp;#039;un objet dans le dictionnaire de variables de script===&lt;br /&gt;
&lt;br /&gt;
Une autre approche consiste à fournir les valeurs en utilisant un objet. Dans ce cas, l&amp;#039;objet doit être configuré et associé à l&amp;#039;action du producteur.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple complet, supposant une classe TMyObject et sa propriété Name :&amp;amp;lt;br /&amp;amp;gt;&amp;#039;&amp;#039;&amp;#039;Delphi :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TWebModule1.WebModule1WebActionItem2Action(Sender: TObject;&lt;br /&gt;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);&lt;br /&gt;
begin&lt;br /&gt;
  WebStencilsProcessor1.InputLines.Text := &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    &amp;lt;h2&amp;gt;GetValue&amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Value obtained from data: @world.Name&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
  var MyObj := TMyObject.Create();&lt;br /&gt;
  MyObj.Name := &amp;#039;Hello hello&amp;#039;;&lt;br /&gt;
  WebStencilsProcessor1.AddVar(&amp;#039;world&amp;#039;, MyObj, True);&lt;br /&gt;
  Response.Content := WebStencilsProcessor1.Content;&lt;br /&gt;
  Handled := True;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cet exemple donne le résultat suivant :&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;Value obtained from data: Hello Hello&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Notez que l&amp;#039;objet est recensé avec le nom &amp;#039;world&amp;#039;, qui sera ensuite utilisé dans le script WebStencils.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++ :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TWebModule1::WebModule1WebActionItem2Action(TObject *Sender,&lt;br /&gt;
  TWebRequest *Request, TWebResponse *Response, bool &amp;amp;Handled)&lt;br /&gt;
{&lt;br /&gt;
  WebStencilsProcessor1-&amp;gt;InputLines-&amp;gt;Text =&lt;br /&gt;
    &amp;quot;&amp;lt;h2&amp;gt;GetValue&amp;lt;/h2&amp;gt;\n&amp;quot;&lt;br /&gt;
    &amp;quot;&amp;lt;p&amp;gt;Value obtained from data: @world.Name&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  TMyObject *MyObj = new TMyObject();&lt;br /&gt;
  MyObj-&amp;gt;Name = &amp;quot;Hello hello&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  WebStencilsProcessor1-&amp;gt;AddVar(&amp;quot;world&amp;quot;, MyObj, true);&lt;br /&gt;
&lt;br /&gt;
  Response-&amp;gt;Content = WebStencilsProcessor1-&amp;gt;Content;&lt;br /&gt;
  Handled = true;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Expressions===&lt;br /&gt;
&lt;br /&gt;
Voici la liste des expressions prises en charge :&lt;br /&gt;
&lt;br /&gt;
*{{code|&amp;#039;&amp;#039;&amp;#039;@ (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}} - marqueurs de variable. L&amp;#039;expression doit être écrite entre parenthèses.&lt;br /&gt;
*{{code|&amp;#039;&amp;#039;&amp;#039;@if (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}} - commande &amp;quot;if&amp;quot;. L&amp;#039;expression doit être écrite entre parenthèses.&lt;br /&gt;
*{{code|&amp;#039;&amp;#039;&amp;#039;@Import (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}}, {{code|&amp;#039;&amp;#039;&amp;#039;@LayoutPage (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}}, {{code|&amp;#039;&amp;#039;&amp;#039;@AddPage (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}} - &amp;#039;&amp;#039;commandes de fichier. L&amp;#039;expression doit être écrite entre accolades.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple suivant montre uniquement les différences entre les options ci-dessus :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
WebStencilsProcessor1.InputLines.Text := &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    &amp;lt;h2&amp;gt;GetExpression&amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Value obtained from data: @(world.value*2)&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
  MyObj.Value := 2;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous obtenez alors la sortie suivante :&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;Value obtained from data: 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
En plus des expressions simples, vous pouvez étendre le système en utilisant des appels de fonction personnalisés. Voici un exemple de code qui recense une fonction “&amp;#039;&amp;#039;&amp;#039;Concat&amp;#039;&amp;#039;&amp;#039;” recevant deux paramètres chaîne :&amp;amp;lt;br /&amp;amp;gt;&amp;#039;&amp;#039;&amp;#039;Delphi :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
uses&lt;br /&gt;
  System.Bindings.EvalProtocol, System.Bindings.Methods;&lt;br /&gt;
&lt;br /&gt;
  TBindingMethodsFactory.RegisterMethod(&lt;br /&gt;
   TMethodDescription.Create(&lt;br /&gt;
    MakeInvokable(function(Args: TArray&amp;lt;IValue&amp;gt;): IValue&lt;br /&gt;
    begin&lt;br /&gt;
     Result := TValueWrapper.Create(&lt;br /&gt;
      Args[0].GetValue.AsString + Args[1].GetValue.AsString);&lt;br /&gt;
    end),&lt;br /&gt;
    &amp;#039;Concat&amp;#039;, &amp;#039;Concat&amp;#039;, &amp;#039;&amp;#039;, True, &amp;#039;&amp;#039;, nil));&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un script WebStencils, vous pouvez l&amp;#039;utiliser dans une expression comme :&lt;br /&gt;
&lt;br /&gt;
 @(Concat(&amp;#039;aaa&amp;#039;, &amp;#039;bbb&amp;#039;]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++ :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;System.Bindings.EvalProtocol.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;System.Bindings.Methods.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;System.Rtti.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;System.SysUtils.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace System::Bindings::EvalProtocol;&lt;br /&gt;
using namespace System::Bindings::Methods;&lt;br /&gt;
using namespace System::Rtti;&lt;br /&gt;
&lt;br /&gt;
class TValueWrapper : public TInterfacedObject, public IValue&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
    TValue FValue;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
    __fastcall TValueWrapper(const TValue &amp;amp;AValue) : FValue(AValue) {}&lt;br /&gt;
&lt;br /&gt;
    virtual TValue __fastcall GetValue() { return FValue; }&lt;br /&gt;
&lt;br /&gt;
    // Implement other IValue methods as needed...&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void RegisterCustomBindingMethod()&lt;br /&gt;
{&lt;br /&gt;
    TBindingMethodsFactory::RegisterMethod(&lt;br /&gt;
        new TMethodDescription(&lt;br /&gt;
            MakeInvokable([](const TArray&amp;lt;IValue*&amp;gt; &amp;amp;Args) -&amp;gt; IValue*&lt;br /&gt;
            {&lt;br /&gt;
                String s1 = Args[0]-&amp;gt;GetValue().ToString();&lt;br /&gt;
                String s2 = Args[1]-&amp;gt;GetValue().ToString();&lt;br /&gt;
                return new TValueWrapper(TValue::From&amp;lt;String&amp;gt;(s1 + s2));&lt;br /&gt;
            }),&lt;br /&gt;
            &amp;quot;Concat&amp;quot;, &amp;quot;Concat&amp;quot;, &amp;quot;&amp;quot;, true, &amp;quot;&amp;quot;, nullptr));&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Instruction Switch====&lt;br /&gt;
&lt;br /&gt;
En plus de l&amp;#039;instruction {{code|@if}}, les utilisateurs peuvent choisir d&amp;#039;utiliser les instructions {{code|@switch}} ou {{code|@case}}.&amp;amp;lt;br /&amp;amp;gt; &lt;br /&gt;
Voici un exemple de syntaxe :&amp;lt;source&amp;gt;&lt;br /&gt;
@switch(@user.role) {&lt;br /&gt;
  @case &amp;quot;admin&amp;quot; { &lt;br /&gt;
    &amp;lt;div&amp;gt;Admin Panel&amp;lt;/div&amp;gt;&lt;br /&gt;
  } @case &amp;quot;moderator&amp;quot; { &lt;br /&gt;
    &amp;lt;div&amp;gt;Moderator Tools&amp;lt;/div&amp;gt;&lt;br /&gt;
  } @default { &lt;br /&gt;
    &amp;lt;div&amp;gt;Regular User View&amp;lt;/div&amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A partir de l&amp;#039;exemple ci-dessus, notez que :&lt;br /&gt;
&lt;br /&gt;
*Les valeurs des &amp;quot;case&amp;quot; peuvent être des littéraux ou des expressions utilisant {{code|@}}(expression).&lt;br /&gt;
*Seul le premier &amp;quot;case&amp;quot; correspondant est exécuté.&lt;br /&gt;
*L&amp;#039;utilisation de {{code|@default}} est facultative et s&amp;#039;exécute s&amp;#039;il n&amp;#039;y a pas de correspondance avec &amp;quot;case&amp;quot;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
===Utilisation d&amp;#039;un ensemble de données===&lt;br /&gt;
&lt;br /&gt;
Une alternative consiste à utiliser l&amp;#039;enregistrement en cours d&amp;#039;un ensemble de données plutôt qu&amp;#039;un objet. Dans ce cas, votre code sera comme suit :&amp;amp;lt;br /&amp;amp;gt;&amp;#039;&amp;#039;&amp;#039;Delphi :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TWebModule13.WebModule13waCompanyAction(Sender: TObject;&lt;br /&gt;
    Request: TWebRequest; Response: TWebResponse;&lt;br /&gt;
    var Handled: Boolean];&lt;br /&gt;
  begin  &lt;br /&gt;
   ClientDataSet1.Open;&lt;br /&gt;
   if not WebStencilsValueFromObject.InVars  (&amp;#039;dataset&amp;#039;] then&lt;br /&gt;
    WebStencilsValueFromObject.AddVar(&lt;br /&gt;
      &amp;#039;dataset&amp;#039;, ClientDataSet1, False]; // False = do not destroy&lt;br /&gt;
  Response.Content := WebStencilsValueFromObject.Content;&lt;br /&gt;
  ClientDataSet1.Close;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++ :&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TWebModule13::WebModule13waCompanyAction(TObject *Sender,&lt;br /&gt;
  TWebRequest *Request, TWebResponse *Response, bool &amp;amp;Handled)&lt;br /&gt;
{&lt;br /&gt;
  ClientDataSet1-&amp;gt;Open();&lt;br /&gt;
&lt;br /&gt;
  if (!WebStencilsValueFromObject-&amp;gt;InVars(&amp;quot;dataset&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    WebStencilsValueFromObject-&amp;gt;AddVar(&amp;quot;dataset&amp;quot;, ClientDataSet1, false); // false = do not destroy&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Response-&amp;gt;Content = WebStencilsValueFromObject-&amp;gt;Content;&lt;br /&gt;
&lt;br /&gt;
  ClientDataSet1-&amp;gt;Close();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code HTML correspondant peut contenir des références à certains champs de l&amp;#039;enregistrement. Voici un exemple de résultat :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;list-group w-50&amp;quot;&amp;gt;&lt;br /&gt;
  @foreach dataset {&lt;br /&gt;
    &amp;lt;a href=&amp;quot;/company?id=@loop.custno&amp;quot; class=&amp;quot;list-group-item  &lt;br /&gt;
        list-group-item-action&amp;quot; aria-current=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;d-flex w-100 justify-content-between&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h5 class=&amp;quot;mb-1&amp;quot;&amp;gt;@loop.company&amp;lt;/h5&amp;gt;&lt;br /&gt;
      &amp;lt;small&amp;gt;@loop.country&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;mb-1&amp;quot;&amp;gt;@loop.city&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;@loop.state&amp;lt;/small&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Accès aux propriétés de l&amp;#039;ensemble de données====&lt;br /&gt;
&lt;br /&gt;
La notation WebStencils {{code|@}} relative à un ensemble de données permet d&amp;#039;accéder aux propriétés de l&amp;#039;ensemble de données, en plus de ses champs. Les utilisateurs peuvent utiliser {{code|@data.RecordCount}} pour accéder à la propriété RecordCount. En cas de conflit, les champs de l&amp;#039;ensemble de données ont priorité sur les propriétés portant le même nom.&lt;br /&gt;
&lt;br /&gt;
Cela inclut l&amp;#039;accès aux informations des champs, comme suit :&lt;br /&gt;
&lt;br /&gt;
 @foreach field in customers.fields&lt;br /&gt;
&lt;br /&gt;
Ainsi que l&amp;#039;accès aux propriétés des champs :&amp;lt;source&amp;gt;&lt;br /&gt;
@foreach customer in customers {&lt;br /&gt;
    @customer.address.visible&lt;br /&gt;
    @customer.phone.displaylabel&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Utilisation de variables de modules==&lt;br /&gt;
&lt;br /&gt;
Alternativement, pour recenser un objet spécifique pour un WebStencilsProcessor, vous pouvez ajouter un “&amp;#039;&amp;#039;&amp;#039;module&amp;#039;&amp;#039;&amp;#039;” avec plusieurs objets. Dans ce contexte, un &amp;#039;module&amp;#039; est une collection d&amp;#039;objets ou de fonctions liés entre eux. N&amp;#039;importe quel champ ou n&amp;#039;importe quelle propriété du module peut être décoré avec l&amp;#039;attribut {{code|&amp;#039;&amp;#039;&amp;#039;[WebStencilsVar]&amp;#039;&amp;#039;&amp;#039;}}, qui vous permet de spécifier comment le WebStencilsProcessor doit traiter les données.&lt;br /&gt;
&lt;br /&gt;
Par exemple, supposons que votre module de données a un composant FDMemTable1 de type TFDMemTable marqué comme {{code|&amp;#039;&amp;#039;&amp;#039;[WebStencilsVar]&amp;#039;&amp;#039;&amp;#039;}}, et un champ LastName, vous pouvez écrire :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  WebStencilsProcessor1.InputLines.Text := &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    &amp;lt;h2&amp;gt;GetTableData&amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Value obtained from table: @(FDMemTable1.LastName)&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
  WebStencilsProcessor1.AddModule(self);&amp;lt;/source&amp;gt;L&amp;#039;exemple ci-dessous renvoie la valeur de LastName dans le premier enregistrement. Utilisez une boucle {{code|&amp;#039;&amp;#039;&amp;#039;@for&amp;#039;&amp;#039;&amp;#039;}} pour afficher tous les enregistrements.&lt;br /&gt;
&lt;br /&gt;
===Utilisation de variables supplémentaires===&lt;br /&gt;
&lt;br /&gt;
Ajoutez des variables supplémentaires au moteur de script à l&amp;#039;extérieur des modèles d&amp;#039;objet et d&amp;#039;ensemble de données. Plutôt que d&amp;#039;ajouter une structure de données spécifique, ce mécanisme propose une méthode anonyme qui permet d&amp;#039;implémenter une recherche personnalisée dans une structure de données personnalisée. Il s&amp;#039;agit des méthodes suivantes :&lt;br /&gt;
&lt;br /&gt;
 TWebStencilsDataVars.Add(LookupFunc), AddInitFunc(LookupFunc)&lt;br /&gt;
 TWebStencilsProcessor.AddVar(LookupFunc), AddInitFunc(LookupFunc)&lt;br /&gt;
 TWebStencilsEngine.AddVar(LookupFunc), AddInitFunc(LookupFunc)&lt;br /&gt;
&lt;br /&gt;
Voici un exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
  TMap = TDictionary&amp;lt;string, string&amp;gt;;&lt;br /&gt;
var&lt;br /&gt;
  LDict: TMap;&lt;br /&gt;
begin&lt;br /&gt;
  LDict := TMap.Create;&lt;br /&gt;
  LDict.Add(&amp;#039;APP_VERSION&amp;#039;, &amp;#039;1.0.0&amp;#039;);&lt;br /&gt;
  LDict.Add(&amp;#039;APP_NAME&amp;#039;, &amp;#039;WebStencils demo&amp;#039;);&lt;br /&gt;
  LDict.Add(&amp;#039;COMPANY_NAME&amp;#039;, &amp;#039;Embarcadero Inc.&amp;#039;);&lt;br /&gt;
  LDict.Add(&amp;#039;DEBUG_MODE&amp;#039;, &amp;#039;True&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
  FWebStencilsProcessor.AddVar(&amp;#039;env&amp;#039;, LDict, True,&lt;br /&gt;
    function(AVar: TWebStencilsDataVar; const APropName: string; &lt;br /&gt;
      var AValue: string): Boolean&lt;br /&gt;
    begin&lt;br /&gt;
      Result := TMap(AVar.TheObject).TryGetValue(APropName.ToUpper, AValue);&lt;br /&gt;
    end);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi l&amp;#039;utiliser dans un modèle, comme suit :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 @env.APP_NAME - @env.APP_VERSION&lt;br /&gt;
 @if env.DEBUG_MODE {&lt;br /&gt;
   &amp;lt;div&amp;gt;Debug mode active&amp;lt;/div&amp;gt;&lt;br /&gt;
 }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mots clés de WebStencil==&lt;br /&gt;
&lt;br /&gt;
Le moteur WebStencils utilise les balises suivantes sous forme de mots clés (notez que ces noms ne peuvent pas être utilisés pour des variables de script).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Mot clé&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@query&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisé pour lire des paramètres de requête HTTP.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@page&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Fournit l&amp;#039;accès au nom de la page et aux arguments de l&amp;#039;URL (voir la propriété [[WebStencils#Utilisation de WebStencils avec RAD Server|PathTemplate]] pour plus d&amp;#039;informations). Il est possible d&amp;#039;accéder au chemin de l&amp;#039;URL en utilisant l&amp;#039;une de ces valeurs :&lt;br /&gt;
*{{code|@page.request_path}}&lt;br /&gt;
*{{code|@page.request_segment}}&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@lang&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisé pour la prise en charge de la traduction, déclenche un événement OnLang distinct plutôt que l&amp;#039;événement OnValue.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@* .. *@&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisé pour ajouter des commentaires dans le script, qui seront omis dans le HTML résultant.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@if&amp;#039;&amp;#039;&amp;#039;}} object.value { … } [&amp;#039;&amp;#039;&amp;#039;@else&amp;#039;&amp;#039;&amp;#039; { … }]&lt;br /&gt;
|Exécute le bloc suivant entre accolades uniquement si la valeur vaut {{code|true}}.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@if (&amp;amp;lt;expression&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisé pour restituer du contenu de façon conditionnelle. Si l&amp;#039;expression est évaluée à {{code|true}}, le contenu associé est inclus dans la sortie ; sinon il est omis.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@if not&amp;#039;&amp;#039;&amp;#039; object.value { ... } [&amp;#039;&amp;#039;&amp;#039;@else&amp;#039;&amp;#039;&amp;#039; { … }]}}&lt;br /&gt;
|Exécute le bloc suivant entre accolades uniquement si la valeur ne vaut pas {{code|true}}. &amp;lt;br /&amp;gt;Par exemple :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 @if obj1.ValueBelowTen {&lt;br /&gt;
	  &amp;lt;p&amp;gt;@obj1.name &amp;lt;span&amp;gt; has a value of &amp;lt;/span&amp;gt; @obj1.value&amp;lt;/p&amp;gt;&lt;br /&gt;
	}&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@ForEach&amp;#039;&amp;#039;&amp;#039; (var object in list) { … }}}&lt;br /&gt;
|Exécute le bloc entre accolades suivant aussi souvent qu&amp;#039;il y a d&amp;#039;éléments dans l&amp;#039;énumérateur. &amp;lt;br /&amp;gt;Supporte actuellement :&lt;br /&gt;
*Les ensembles de données&lt;br /&gt;
*TObjectList, doit être ajouté au dictionnaire de processeur.&lt;br /&gt;
*Tout objet possédant la méthode GetEnumerator, où l&amp;#039;énumérateur renvoie une valeur d&amp;#039;objet.&lt;br /&gt;
|-&lt;br /&gt;
|{{code| &amp;#039;&amp;#039;&amp;#039;@ForEach&amp;#039;&amp;#039;&amp;#039; object { … }}}&lt;br /&gt;
|Exécute le bloc entre accolades suivant aussi souvent qu&amp;#039;il y a d&amp;#039;éléments dans l&amp;#039;énumérateur. &amp;lt;br /&amp;gt;Supporte actuellement les ensembles de données et TObjectList, qui doivent être ajoutés en tant que variables de script.&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@loop&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Utilisez à l&amp;#039;intérieur d&amp;#039;un bloc pour faire référence à l&amp;#039;élément en cours de l&amp;#039;énumération (liste ou ensemble de données). Il doit être suivi du nom d&amp;#039;une propriété ou d&amp;#039;un champ sans utiliser de nom d&amp;#039;objet.&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@Import&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Permet de fusionner un fichier externe à un emplacement spécifique du fichier externe. Suppose toutefois que le nom de fichier ait l&amp;#039;extension .HTML. &amp;lt;br /&amp;gt;Le format doit être comme suit :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@import filename [ {&amp;lt;alias1&amp;gt; = &amp;lt;var1&amp;gt; [..., &amp;lt;aliasN&amp;gt; = &amp;lt;varN&amp;gt;]} ]&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@Scaffolding&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Espace réservé pour le scaffolding. Ce mécanisme permet de générer dynamiquement du code HTML à partir de la structure de données d&amp;#039;une application (les propriétés d&amp;#039;un objet et les champs d&amp;#039;une base de données). Le code HTML généré côté serveur peut inclure d&amp;#039;autres balises pour accéder aux données. &amp;lt;br /&amp;gt;Le code suivant est un exemple de disposition HTML simple générée dans le gestionnaire d&amp;#039;événement OnScaffolding pour chacun des champs de la base de données.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TWebModule1.ProcessorCompanyScaffolding(Sender: TObject;&lt;br /&gt;
  const AQualifClassName: string; var AReplaceText: string);&lt;br /&gt;
begin&lt;br /&gt;
  if SameText (AQualifClassName, &amp;#039;Company&amp;#039;) then&lt;br /&gt;
  begin&lt;br /&gt;
    AReplaceText := &amp;#039;&amp;#039;;&lt;br /&gt;
    for var I := 0 to ClientDataSet1.Fields.Count -1 do&lt;br /&gt;
      AReplaceText := AReplaceText + &amp;#039;&amp;lt;p&amp;gt;&amp;#039;+ &lt;br /&gt;
        ClientDataSet1.Fields[I].FieldName +&lt;br /&gt;
        &amp;#039;: @dataset.&amp;#039; + ClientDataSet1.Fields[I].FieldName + &amp;#039;&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
  end;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@switch&amp;#039;&amp;#039;&amp;#039;}}, {{code|&amp;#039;&amp;#039;&amp;#039;@case&amp;#039;&amp;#039;&amp;#039;}}, {{code|&amp;#039;&amp;#039;&amp;#039;@default&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Effectue un rendu conditionnel à branches multiples. Après avoir évalué une expression, la met en correspondance avec les valeurs définies avec @case, en restituant le bloc correspondant. La directive @default est utilisée si aucune correspondance n&amp;#039;est trouvée pour @case.&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@LoginRequired&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Arrête l&amp;#039;exécution si une connexion est requise alors que l&amp;#039;utilisateur n&amp;#039;est pas connecté.&lt;br /&gt;
|-&lt;br /&gt;
|{{code|&amp;#039;&amp;#039;&amp;#039;@LoginRequired (&amp;amp;lt;role&amp;amp;gt;)&amp;#039;&amp;#039;&amp;#039;}}&lt;br /&gt;
|Le moteur vérifie que l&amp;#039;utilisateur est connecté, mais aussi qu&amp;#039;il dispose du rôle spécifique actif, ce qui restreint l&amp;#039;accès à la page selon la permission.&amp;lt;br /&amp;gt; Par exemple : &amp;#039;&amp;#039;&amp;#039;@LoginRequired (admin)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Alias d&amp;#039;importation===&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple ci-dessous illustre comment utiliser des alias d&amp;#039;importation.&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@import one {@o1 = @object, @d1 = @data} Hello&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans ce code, &amp;#039;&amp;#039;&amp;#039;@object&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;@data&amp;#039;&amp;#039;&amp;#039; sont les véritables variables dans le script exécuté. Les alias &amp;#039;&amp;#039;&amp;#039;@o1&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;@d1&amp;#039;&amp;#039;&amp;#039; sont des variables de script pour le script &amp;quot;one&amp;quot; et sont accessibles dans ce script comme des variables normales. Ainsi, vous pouvez transmettre au script QA des variables portant des noms différents, en fournissant comme alias le nom attendu par le script.&lt;br /&gt;
&lt;br /&gt;
==Modèles WebStencils : disposition et corps==&lt;br /&gt;
&lt;br /&gt;
La capacité à fusionner un modèle HTML partagé avec le contenu d&amp;#039;une page compte parmi les fonctionnalités indispensables d&amp;#039;un moteur de modèle. Cette opération s&amp;#039;effectue (comme dans la version .NET) en utilisant quatre symboles spéciaux :&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;@LayoutPage filename&amp;#039;&amp;#039;&amp;#039; : cette commande est utilisée dans une page HTML spécifique (généralement en haut de page) pour indiquer le fichier de modèle à utiliser comme structure de la page. Plusieurs pages peuvent partager un même modèle, mais toutes les pages d&amp;#039;un projet (même en utilisant TWebStencilsEngine) ou d&amp;#039;un dossier virtuel n&amp;#039;ont pas nécessairement besoin d&amp;#039;utiliser le même modèle.&lt;br /&gt;
&lt;br /&gt;
:{{Note| Cette commande ne doit être utilisée qu&amp;#039;une seule fois par page. Si vous tentez d&amp;#039;utiliser plusieurs fois &amp;#039;&amp;#039;&amp;#039;@LayoutPage&amp;#039;&amp;#039;&amp;#039;, une exception se déclenche et bloque la commande.}}&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;@RenderBody&amp;#039;&amp;#039;&amp;#039; : cette commande sans paramètre est une marque de réservation dans un fichier de modèle qui indique où placer le contenu d&amp;#039;une page spécifique.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple d&amp;#039;utilisation de &amp;#039;&amp;#039;&amp;#039;@LayoutPage&amp;#039;&amp;#039;&amp;#039; et de &amp;#039;&amp;#039;&amp;#039;@RenderBody&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Test.html&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
@LayoutPage BaseTemplate&lt;br /&gt;
   &amp;lt;h2&amp;gt;Page Test3&amp;lt;/h2&amp;gt;&lt;br /&gt;
   &amp;lt;p&amp;gt;Local data param one is @page.name (the page name)&amp;lt;/p&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;BaseTemplate.html&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Bootstrap CSS →&lt;br /&gt;
    &amp;lt;link href=&amp;quot;https://.../bootstrap.min.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;nav class=&amp;quot;navbar navbar-expand-md bg-dark mb-4&amp;quot;&amp;gt;...&lt;br /&gt;
    &amp;lt;main class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;bg-light p-5 rounded&amp;quot;&amp;gt;&lt;br /&gt;
      @RenderBody&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/main&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
De plus, vous pouvez injecter des en-têtes supplémentaires du document spécifié vers le modèle (par exemple, un fichier JavaScript requis à inclure dans la page ou le CSS supplémentaire d&amp;#039;une page spécifique). Dans ce cas, le mécanisme est inversé :&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;@ExtraHeader&amp;#039;&amp;#039;&amp;#039; { ... } : utilisé dans la page HTML spécifique pour indiquer un bloc de code à ajouter en tant qu&amp;#039;information d&amp;#039;en-tête supplémentaire.&amp;amp;lt;br /&amp;amp;gt;Il supporte aussi la propagation de contenu sur l&amp;#039;ensemble des hiérarchies de disposition imbriquées :&lt;br /&gt;
** Les blocs {{code|@ExtraHeader}} définis dans les pages se propagent automatiquement à travers plusieurs niveaux de disposition.&lt;br /&gt;
** Le contenu est injecté dans la sortie finale quelles que soient les dispositions intermédiaires.&lt;br /&gt;
** Permet une composition de disposition flexible, avec des dispositions de base, intermédiaires et spécifiques à la page.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;@RenderHeader&amp;#039;&amp;#039;&amp;#039; : indique à quel emplacement du fichier de modèle (généralement dans la section d&amp;#039;en-tête HTML) ajouter l&amp;#039;en-tête supplémentaire de la page, si disponible.&lt;br /&gt;
&lt;br /&gt;
{{Note|Les deux options sont facultatives.}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exemple&amp;#039;&amp;#039;&amp;#039;:&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- page.html --&amp;gt;&lt;br /&gt;
@extends layouts/intermediate&lt;br /&gt;
@ExtraHeader {&lt;br /&gt;
  &amp;lt;style&amp;gt;.highlight { color: green; }&amp;lt;/style&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- layouts/intermediate.html --&amp;gt;&lt;br /&gt;
@extends layouts/base&lt;br /&gt;
@ExtraHeader {&lt;br /&gt;
  &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- layouts/base.html --&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
  @RenderHeader&lt;br /&gt;
&amp;lt;/head&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, le CSS de {{code|page.html}} et la balise meta de {{code|intermediate.html}} sont injectés dans la sortie finale de {{code|@RenderHeader}}.&lt;br /&gt;
&lt;br /&gt;
==Composants de WebStencils==&lt;br /&gt;
&lt;br /&gt;
Le package WebStencils installe deux composants différents : un processeur de fichier unique et un moteur qui instancie des processeurs individuels et fournit une configuration globale pour les processeurs autonomes ou ceux auxquels ils sont manuellement connectés.&lt;br /&gt;
&lt;br /&gt;
Le composant principal prend un fichier HTML, incorpore la notation WebStencils et le convertit en HTML brut après avoir traité les balises {{code|&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;}}.&lt;br /&gt;
&lt;br /&gt;
La classe &amp;#039;&amp;#039;&amp;#039;TWebStencilsProcessor&amp;#039;&amp;#039;&amp;#039; traite un fichier individuel (généralement ayant une extension HTML) et son modèle associé, le cas échéant. Le processeur peut être utilisé de façon autonome et assigné au &amp;#039;&amp;#039;&amp;#039;TWebActionItem.Producer&amp;#039;&amp;#039;&amp;#039;, ou être créé et appelé par TWebStencilsEngine en tant que post-processeur de fichiers texte renvoyés par un répartiteur de fichiers.&lt;br /&gt;
&lt;br /&gt;
===Composant WebStencilsEngine===&lt;br /&gt;
&lt;br /&gt;
Le composant &amp;#039;&amp;#039;&amp;#039;Engine&amp;#039;&amp;#039;&amp;#039; peut être utilisé dans les deux scénarios suivants :&lt;br /&gt;
&lt;br /&gt;
*Pour le connecter à un ou plusieurs composants &amp;#039;&amp;#039;&amp;#039;WebStencilsProcessor&amp;#039;&amp;#039;&amp;#039; et fournir des comportements et des paramètres partagés.&lt;br /&gt;
*Pour créer des composants &amp;#039;&amp;#039;&amp;#039;WebStencilsProcessor&amp;#039;&amp;#039;&amp;#039; lorsque cela est nécessaire, et placer uniquement ce composant sur vos modules web.&lt;br /&gt;
&lt;br /&gt;
==Intégration automatique de sessions==&lt;br /&gt;
&lt;br /&gt;
Lorsqu&amp;#039;elles sont disponibles, [[WebStencils|WebStencils]] peut automatiquement s&amp;#039;intégrer à des sessions web. Aucune configuration supplémentaire n&amp;#039;est nécessaire. Tout se fait automatiquement dès lors que {{code|WebRequest.Sessions}} existe.&lt;br /&gt;
&lt;br /&gt;
Les données des sessions sont accessibles via {{code|@session.property}}. Tous les objets dans {{code|WebRequest.Session.DataVars}} sont automatiquement recensés en tant que variables de modèles. De même, {{code|UserLoggedIn}} et {{code|UserRoles}} sont automatiquement remplis à partir de {{code|WebRequest.Session.User}}.&lt;br /&gt;
&lt;br /&gt;
En voici un exemple :&amp;lt;source&amp;gt;&lt;br /&gt;
@if session.Authenticated { &lt;br /&gt;
  &amp;lt;div&amp;gt;User authenticated&amp;lt;/div&amp;gt;&lt;br /&gt;
  @session.sessionid&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@if session.UserHasRole(‘admin’) { &lt;br /&gt;
  &amp;lt;div&amp;gt;User is an Admin&amp;lt;/div&amp;gt;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Liste blanche de sécurité==&lt;br /&gt;
&lt;br /&gt;
Pour des raisons de sécurité, WebStencils implémente un mécanisme de liste blanche de propriétés pour éviter l&amp;#039;exposition d&amp;#039;informations sensibles comme les chaînes de connexion aux bases de données. Par défaut, seules les propriétés sécurisées sont accessibles. Voici la liste des propriétés sécurisées :&lt;br /&gt;
&lt;br /&gt;
*Pour les &amp;#039;&amp;#039;&amp;#039;TDataSet&amp;#039;&amp;#039;&amp;#039; : Active, FieldByName, First, Last, Next, Prior, Bof, Eof, FieldCount, Fields, Found, RecordCount, RecNo.&lt;br /&gt;
*Pour les &amp;#039;&amp;#039;&amp;#039;TStrings&amp;#039;&amp;#039;&amp;#039; : Contains, ContainsName, IndexOf, IndexOfName, CommaText, Count, IsEmpty, DelimitedText, Names, KeyNames, Values, ValueFromIndex, Strings, Text.&lt;br /&gt;
&lt;br /&gt;
===Personnalisation de la liste blanche===&lt;br /&gt;
&lt;br /&gt;
La liste blanche peut être personnalisée en utilisant la propriété [[lib_fr:Web.Stencils.TWebStencilsProcessor.Whitelist|TWebStencilsProcessor.Whitelist]]. La méthode de configuration permet aux utilisateurs de spécifier les membres autorisés et ceux bloqués. Voir l&amp;#039;exemple ci-dessous :&amp;lt;source&amp;gt;&lt;br /&gt;
procedure Configure(const AClass: &amp;lt;PTypeInfo, TClass, TObject&amp;gt;; &lt;br /&gt;
                    const AAllowedMembers: TArray&amp;lt;string&amp;gt;;&lt;br /&gt;
                    const ABlockedMembers: TArray&amp;lt;string&amp;gt;; &lt;br /&gt;
                    AReset: Boolean);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AClass&amp;#039;&amp;#039;&amp;#039; : le type PTypeInfo/TClass/TObject pour configurer des éléments tels que des TDataSet, TStrings.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AAllowedMembers&amp;#039;&amp;#039;&amp;#039; : un tableau de propriétés ou de noms de méthodes que l&amp;#039;utilisateur souhaite autoriser.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ABlockedMembers&amp;#039;&amp;#039;&amp;#039; : un tableau de propriétés ou de noms de méthodes que l&amp;#039;utilisateur souhaite bloquer.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AReset&amp;#039;&amp;#039;&amp;#039; : {{code|True}} lorsqu&amp;#039;utilisé pour remplacer une liste blanche existante, ou {{code|False}} pour ajouter des éléments à la liste.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple qui illustre comment ajouter des membres autorisés supplémentaires à une liste blanche existante :&amp;lt;source&amp;gt;&lt;br /&gt;
TWebStencilsProcessor.Whitelist.Configure(TMyClass, &lt;br /&gt;
  [&amp;#039;CustomProp&amp;#039;], nil, False);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici un exemple qui illustre comment remplacer la totalité d&amp;#039;une liste blanche (AReset = True) :&amp;lt;source&amp;gt;&lt;br /&gt;
TWebStencilsProcessor.Whitelist.Configure(TDataSet, &lt;br /&gt;
  [&amp;#039;RecordCount&amp;#039;, &amp;#039;RecNo&amp;#039;], nil, True);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici un exemple qui illustre comment bloquer certains membres :&amp;lt;source&amp;gt;&lt;br /&gt;
TWebStencilsProcessor.Whitelist.Configure(MyObject, &lt;br /&gt;
  nil, [&amp;#039;CustomProp&amp;#039;], False);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La liste blanche s&amp;#039;applique à l&amp;#039;ensemble de l&amp;#039;application et à tous les WebStencils.&lt;br /&gt;
&lt;br /&gt;
==Utilisation de WebStencils avec RAD Server==&lt;br /&gt;
&lt;br /&gt;
La bibliothèque de modèles WebStencils peut aussi être utilisée dans une application RAD Server. Il est recommandé de combiner le composant &amp;#039;&amp;#039;TEMSFileResource&amp;#039;&amp;#039;&amp;#039; existant avec un composant &amp;#039;&amp;#039;&amp;#039;TWebStencilsEngine&amp;#039;&amp;#039;&amp;#039;. Le premier permet de mapper le système de fichiers, alors que le second gère le mappage HTTP et le traitement des modèles. Les composants sont connectés en utilisant la propriété Dispatcher du moteur WebStencil.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple ci-dessous illustre la configuration nécessaire pour ajouter deux composants à un module web RAD Server :&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 object html: TEMSFileResource&lt;br /&gt;
    PathTemplate = &amp;#039;..\..\html\{filename}&amp;#039;&lt;br /&gt;
  end&lt;br /&gt;
  object WebStencilsEngine1: TWebStencilsEngine&lt;br /&gt;
    Dispatcher = html&lt;br /&gt;
    PathTemplates = &amp;lt;&lt;br /&gt;
      item&lt;br /&gt;
        Template = &amp;#039;/&amp;#039;&lt;br /&gt;
        Redirect = &amp;#039;/test1.html&amp;#039;&lt;br /&gt;
      end&lt;br /&gt;
      item&lt;br /&gt;
        Template = &amp;#039;/list&amp;#039;&lt;br /&gt;
        Redirect = &amp;#039;/companylist.html&amp;#039;&lt;br /&gt;
      end&lt;br /&gt;
      item&lt;br /&gt;
        Template = &amp;#039;/company&amp;#039;&lt;br /&gt;
        OnPathInit = WebStencilsEngine1PathTemplates2PathInit&lt;br /&gt;
      end&lt;br /&gt;
      ...&amp;gt;&lt;br /&gt;
  end&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les PathTemplates sont utilisés pour mapper les URL entrantes à des fichiers. En mode conception, la configuration se présente comme suit :&lt;br /&gt;
&lt;br /&gt;
[[File:PathTemplates WebStencils.png|350px|=link]]&lt;br /&gt;
&lt;br /&gt;
De plus, il est nécessaire de configurer le mappage de plus haut niveau dans le module de données :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
  [ResourceName(&amp;#039;testfile&amp;#039;)]&lt;br /&gt;
  TTestfileResource1 = class(TDataModule)&lt;br /&gt;
    [ResourceSuffix(&amp;#039;./&amp;#039;)]&lt;br /&gt;
    [ResourceSuffix(&amp;#039;get&amp;#039;, &amp;#039;./&amp;#039;)]&lt;br /&gt;
    [EndpointProduce(&amp;#039;get&amp;#039;, &amp;#039;text/html&amp;#039;)]&lt;br /&gt;
    html: TEMSFileResource;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour mapper plusieurs chemins différents (à la différence de l&amp;#039;exemple ci-dessus), ajoutez des composants &amp;#039;&amp;#039;&amp;#039;TEMSFileResource&amp;#039;&amp;#039;&amp;#039;. Le composant &amp;#039;&amp;#039;&amp;#039;TWebStencilsEngine&amp;#039;&amp;#039;&amp;#039; peut comporter un seul dispatcher dans la propriété correspondante. Pour associer davantage de dispatchers, utilisez le code suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
AddProcessor(html2, WebStencilsEngine1);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Présentation de RAD Server|Présentation de RAD Server]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 17:05:25 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:WebStencils</comments>
		</item>
		<item>
			<title>Pragma alias</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Pragma_alias&amp;diff=223409&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Pragma_alias&amp;diff=223409&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Pragma_alias&quot; title=&quot;Pragma alias&quot;&gt;Pragma alias&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{DISPLAYTITLE:#pragma alias}}&lt;br /&gt;
{{Parent|Présentation des directives pragma - Index}}&lt;br /&gt;
&lt;br /&gt;
==Syntaxe &amp;lt;span style=&amp;quot;font-size: 60%&amp;quot;&amp;gt;(voir [[Pseudo-grammaire|Pseudo-grammaire]])&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Chaîne d&amp;#039;outils classique&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&lt;br /&gt;
 #pragma alias &amp;quot;aliasName&amp;quot; = &amp;quot;substituteName&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Chaîne d&amp;#039;outils Clang&amp;#039;&amp;#039;&amp;#039; :&amp;amp;lt;br /&amp;amp;gt;&lt;br /&gt;
la directive &amp;lt;code&amp;gt;#pragma alias&amp;lt;/code&amp;gt; n&amp;#039;est pas supportée par les compilateurs [[BCC64X|BCC64X]] et [[Compilateurs Win32 améliorés par Clang|BCC32C]]. A la place, vous pouvez laisser un commentaire pour le lieur en procédant comme suit :&amp;amp;lt;br /&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #pragma comment(linker, &amp;quot;/alternatename:&amp;amp;lt;name1&amp;amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;amp;lt;name2&amp;amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;#pragma alias&amp;lt;/code&amp;gt; indique au lieur que deux noms d&amp;#039;identificateurs sont équivalents. Les deux identificateurs doivent être saisis entre guillemets. Sinon, un avertissement [[W8086 Utilisation incorrecte de l&amp;#039;alias pragma &amp;quot;NomAlias&amp;quot;=&amp;quot;NomSubstitué&amp;quot; (C++)|W8086 Utilisation incorrecte de l&amp;#039;alias pragma &amp;quot;aliasName&amp;quot;=&amp;quot;substituteName&amp;quot; (C++)]] est émis.&lt;br /&gt;
&lt;br /&gt;
Les alias sont à présent gérés dans des unités distinctes, par deux fichiers .obj, un pour Unicode et un pour non-Unicode. Ces deux fichiers .obj font partie de la bibliothèque VCL.&lt;br /&gt;
&lt;br /&gt;
Le &amp;lt;code&amp;gt;NomAlias&amp;lt;/code&amp;gt; et le &amp;lt;code&amp;gt;NomSubstitué&amp;lt;/code&amp;gt; sont injectés dans leur fichier .obj correspondant, exactement comme ils sont écrits à l&amp;#039;intérieur des guillemets. Le lieur recherche toutes les références à &amp;lt;code&amp;gt;NomAlias&amp;lt;/code&amp;gt; et les lie au &amp;lt;code&amp;gt;NomSubstitué&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Note| Les [[Fichier d&amp;#039;en-tête C++ (*.h, *.hpp)|fichiers .hpp]] générés depuis le code {{Delphi}} utilisent l&amp;#039;alias &amp;lt;code&amp;gt;#pragma&amp;lt;/code&amp;gt; pour la gestion des identificateurs qui sont substantypés différemment dans {{Delphi}} et {{CBuilder}}.}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Référence C++]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 17:05:25 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Pragma_alias</comments>
		</item>
		<item>
			<title>Fractionnement de l&#039;éditeur</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Fractionnement_de_l%27%C3%A9diteur&amp;diff=223407&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Fractionnement_de_l%27%C3%A9diteur&amp;diff=223407&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Fractionnement_de_l%27%C3%A9diteur&quot; title=&quot;Fractionnement de l&amp;#039;éditeur&quot;&gt;Fractionnement de l&amp;#039;éditeur&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;La vue [[Fractionnement de l&amp;#039;éditeur|Fractionnement de l&amp;#039;éditeur]] permet d’utiliser plusieurs éditeurs côte à côte, les uns au-dessus des autres, ou de façon combinée, le tout dans une même fenêtre. Cela inclut la possibilité de faire glisser des ensembles d&amp;#039;onglets vers des fenêtres flottantes, puis de les replacer dans l&amp;#039;EDI. &lt;br /&gt;
Elle permet aussi d&amp;#039;avoir plusieurs dispositions personnalisées et offre diverses possibilités de manipulation : disposition simple en deux colonnes, disposition sur plusieurs lignes, ou une configuration particulièrement adaptée à votre flux de travail.&lt;br /&gt;
Vous pouvez travailler en ayant plusieurs onglets ouverts, et ouvrir la même unité dans chacun de ces onglets. Vous pouvez aussi avoir plusieurs onglets ouverts : l&amp;#039;un avec le concepteur de fiche et plusieurs autres avec le code de l&amp;#039;unité correspondante. L&amp;#039;onglet contenant le concepteur de fiche peut aussi être déplacé. &lt;br /&gt;
Il n&amp;#039;y a &amp;#039;&amp;#039;&amp;#039;aucune limite&amp;#039;&amp;#039;&amp;#039; quant au nombre de vues fractionnées, que ce soit horizontalement ou verticalement.&lt;br /&gt;
&lt;br /&gt;
===Utilisation du fractionnement de l&amp;#039;éditeur===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez accéder à la vue Fractionnement de l&amp;#039;éditeur en cliquant avec le bouton droit sur un onglet et en choisissant &amp;#039;&amp;#039;&amp;#039;Fractionner    &amp;amp;gt;&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;Déplacer &amp;amp;gt;&amp;#039;&amp;#039;&amp;#039;. Le fractionnement crée une nouvelle version de l&amp;#039;onglet sélectionné, et le déplacement provoque son ouverture à l&amp;#039;endroit sélectionné dans l&amp;#039;EDI.&lt;br /&gt;
&lt;br /&gt;
[[File:Using-spliteditor.png|=link|400px|border]]&lt;br /&gt;
&lt;br /&gt;
Les raccourcis suivants peuvent être utilisés pour les deux options :&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fractionner en haut :&amp;#039;&amp;#039;&amp;#039; Alt+Maj+T&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fractionner en bas :&amp;#039;&amp;#039;&amp;#039; Alt+Maj+B&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fractionner à droite :&amp;#039;&amp;#039;&amp;#039; Alt+Maj+R&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fractionner à gauche :&amp;#039;&amp;#039;&amp;#039; Alt+Maj+L&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Déplacer en haut :&amp;#039;&amp;#039;&amp;#039; Ctrl+Alt+Maj+T&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Déplacer à gauche :&amp;#039;&amp;#039;&amp;#039; Ctrl+Alt+Maj+L&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Déplacer à droite :&amp;#039;&amp;#039;&amp;#039; Ctrl+Alt+Maj+R&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Déplacer en bas :&amp;#039;&amp;#039;&amp;#039; Ctrl+Alt+Maj+B&lt;br /&gt;
&lt;br /&gt;
Alternativement, vous pouvez utiliser [[Fractionnement de l&amp;#039;éditeur|Fractionnement de l&amp;#039;éditeur]] en faisant glisser un fichier de la vue Projets dans un onglet de l&amp;#039;éditeur. Vous pouvez aussi effectuer un clic droit sur le fichier du projet, puis sélectionner l&amp;#039;option &amp;#039;&amp;#039;&amp;#039;Ouvrir dans&amp;#039;&amp;#039;&amp;#039; et choisir l&amp;#039;onglet de l&amp;#039;éditeur dans lequel vous souhaitez ouvrir le fichier.&lt;br /&gt;
&lt;br /&gt;
Lorsque deux onglets sont dans une fenêtre, chacun a une barre de titre.&lt;br /&gt;
&lt;br /&gt;
Le fractionnement de l&amp;#039;éditeur vous permet de :&lt;br /&gt;
&lt;br /&gt;
*Faire glisser un onglet de l&amp;#039;éditeur, ou un ensemble d&amp;#039;onglets, en faisant glisser la barre de titre et en l&amp;#039;ancrant sur n&amp;#039;importe quel côté de la fenêtre de l&amp;#039;EDI.&lt;br /&gt;
*Le faire glisser et l&amp;#039;ancrer sur n&amp;#039;importe côté de l&amp;#039;éditeur (gauche, droit, haut, bas).&lt;br /&gt;
*Le fusionner avec un ensemble d&amp;#039;onglets en le faisant glisser au centre d&amp;#039;un éditeur existant, y compris une fenêtre flottante d&amp;#039;onglets.&lt;br /&gt;
*Le faire glisser en dehors de sa propre fenêtre (soit un seul onglet ou un ensemble d&amp;#039;onglets).&lt;br /&gt;
&lt;br /&gt;
La plupart des opérations peuvent être réalisées sur des onglets individuels. Il peut s&amp;#039;agir par exemple de déplacer un onglet entre des ensembles d&amp;#039;onglets ancrés en faisant glisser l&amp;#039;onglet individuel d&amp;#039;un emplacement à un autre.&lt;br /&gt;
&lt;br /&gt;
Chaque ensemble d&amp;#039;onglets peut être déplacé à l&amp;#039;extérieur de sa propre fenêtre. Faites glisser la barre de titre pour le déplacer.&lt;br /&gt;
 {{Tip| Vous pouvez appuyer sur Ctrl tout en faisant glisser l&amp;#039;ensemble d&amp;#039;onglets pour vous assurer qu&amp;#039;il ne s&amp;#039;ancre pas.}}&lt;br /&gt;
&lt;br /&gt;
De la même façon, chaque fenêtre peut être ancrée à côté d&amp;#039;un autre ensemble d&amp;#039;onglets. Pour cela, vous devez faire glisser la barre de titre.&lt;br /&gt;
&lt;br /&gt;
{{Note|La plupart des éditeurs/groupes disparaissent de la vue lorsqu&amp;#039;ils sont fermés. Toutefois, la fermeture du premier éditeur (celui qui était auparavant l&amp;#039;éditeur de la fenêtre principale) avec le bouton ‘X’ provoque la fermeture de tous les onglets qu&amp;#039;il contient. L&amp;#039;espace qu&amp;#039;il occupait reste ouvert, car l&amp;#039;éditeur original ne peut pas être fermé. Cela n&amp;#039;a aucune incidence tant que les groupes d&amp;#039;onglets ne sont pas fermés. Il n&amp;#039;y a aucun impact visible lorsque vous créez, déplacez ou ancrez les onglets dans vos tâches.}}&lt;br /&gt;
&lt;br /&gt;
[[File:Split Editor Example.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;C&amp;#039;est l&amp;#039;une des nombreuses façons de configurer la vue Fractionnement de l&amp;#039;éditeur. Elle comporte une fenêtre d&amp;#039;édition sur la gauche, deux à droite, et les volets sont masqués mais apparaissent lorsqu&amp;#039;ils sont survolés par la souris.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===Concepteur et code===&lt;br /&gt;
&lt;br /&gt;
Les vues Fractionnement de l&amp;#039;éditeur permettent de modifier un même fichier dans deux fenêtres d&amp;#039;édition affichées côte à côte, chacune affichant le même contenu de fichier. Lorsque vous tapez dans l&amp;#039;une et que vous faites défiler le texte jusqu&amp;#039;à un emplacement, le texte apparaît dans l&amp;#039;autre fenêtre. Vous pouvez faire défiler les deux fenêtres indépendamment l&amp;#039;une de l&amp;#039;autre, ce qui permet de modifier le fichier à plusieurs endroits. &lt;br /&gt;
Vous pouvez ainsi ouvrir un même fichier dans autant d&amp;#039;onglets que vous le souhaitez.&lt;br /&gt;
{{Note|Gardez toujours à l&amp;#039;esprit qu&amp;#039;il n&amp;#039;y a qu&amp;#039;un seul fichier (module ou tampon de fichier en termes internes) affiché dans plusieurs vues. Ainsi, toute modification effectuée dans l&amp;#039;une de ces vues sera répercutée dans les autres vues (il ne s&amp;#039;agit pas de copier ou de dupliquer une modification). &amp;amp;lt;br /&amp;amp;gt;&lt;br /&gt;
Autrement dit, toute modification de fichier depuis une fenêtre d&amp;#039;édition concerne le fichier lui-même et pas la fenêtre. Cette modification sera répercutée dans les autres vues. }}&lt;br /&gt;
&lt;br /&gt;
===Conseils et astuces===&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Enregistrez&amp;#039;&amp;#039;&amp;#039; la configuration des éditeurs en tant que disposition du bureau. Sinon, vous risquez de passer beaucoup de temps à définir une présentation qui ne sera pas sauvegardée.&lt;br /&gt;
&lt;br /&gt;
{{Notes|&lt;br /&gt;
&lt;br /&gt;
*Lorsque la disposition de bureau est modifiée, la configuration change également (par ex. lorsque l&amp;#039;EDI commence le débogage et passe en &amp;#039;&amp;#039;&amp;#039;Disposition de débogage&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Lorsque vous changez de disposition, tout groupe d&amp;#039;onglets qui ne trouve pas sa place dans la disposition est détaché et devient une fenêtre flottante.}}&lt;br /&gt;
*Activez &amp;#039;&amp;#039;&amp;#039;Options&amp;#039;&amp;#039;&amp;#039; &amp;amp;gt; &amp;#039;&amp;#039;&amp;#039;Enregistrement et récupération&amp;#039;&amp;#039;&amp;#039; &amp;amp;gt; &amp;#039;&amp;#039;&amp;#039;Enregistrer le bureau du projet lors de la fermeture&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;Enregistrer l&amp;#039;état de l&amp;#039;éditeur à la fermeture d&amp;#039;un onglet&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Lorsque vous enregistrez l&amp;#039;état de l&amp;#039;éditeur, vous enregistrez également la position de défilement, les zones réduites ou développées, etc. C&amp;#039;est très pratique lorsque plusieurs fenêtres d&amp;#039;édition du même fichier sont ouvertes. Ainsi, lorsque vous rouvrez votre bureau et rouvrez le projet (ou tout simplement, lorsque vous rouvrez un éditeur précédemment fermé), la nouvelle fenêtre d&amp;#039;édition s&amp;#039;affiche telle qu&amp;#039;elle était au moment de la fermeture.&lt;br /&gt;
*Pensez à désancrer les volets ancrables d&amp;#039;ancienne génération. Ils sont réduits sous forme de petit onglet sur un côté de la fenêtre principale. Vous pouvez les rendre visibles à nouveau en cliquant dessus, et ils restent affichés tant qu’ils ont la focalisation. Pour cela, vous devez cliquer sur le bouton d&amp;#039;épinglage dans la barre de titre du volet, à côté du bouton X. Cette fonctionnalité existe depuis de nombreuses années, mais elle n’était vraiment utile que lorsque l’espace à l&amp;#039;écran était limité. Maintenant que plusieurs fenêtres d&amp;#039;édition peuvent être fractionnées et ancrées ensemble, il devient très pratique de pouvoir désépingler les volets latéraux pour libérer de l’espace horizontal.&lt;br /&gt;
*Pensez à faire un clic droit sur un onglet &amp;#039;&amp;#039;&amp;#039;&amp;amp;gt; Fractionner &amp;amp;gt; A droite&amp;#039;&amp;#039;&amp;#039; (ou &amp;#039;&amp;#039;&amp;#039;A gauche&amp;#039;&amp;#039;&amp;#039;). L&amp;#039;utilisation de plusieurs colonnes est certainement la configuration la plus courante pour les vues fractionnées. Plus vous utiliserez cette fonctionnalité, plus vous constaterez son utilité.&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Présentation de l&amp;#039;EDI|Présentation de l&amp;#039;EDI]]&lt;br /&gt;
*[[Aperçu et page d&amp;#039;accueil|Aperçu et page d&amp;#039;accueil]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 17:05:25 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Fractionnement_de_l%27%C3%A9diteur</comments>
		</item>
		<item>
			<title>Compilateur Delphi</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Compilateur_Delphi&amp;diff=223405&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Compilateur_Delphi&amp;diff=223405&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Compilateur_Delphi&quot; title=&quot;Compilateur Delphi&quot;&gt;Compilateur Delphi&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Construction}}&lt;br /&gt;
&lt;br /&gt;
{{Menu|Projet &amp;amp;gt; Options &amp;amp;gt; Construction &amp;amp;gt; Compilateur {{Delphi}}}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
Utilisez cette page pour définir les options du compilateur {{Delphi}} pour le projet en cours.&lt;br /&gt;
&lt;br /&gt;
[[File:Delphi Compiler options.jpg|=link]]&lt;br /&gt;
&lt;br /&gt;
{{Note|Les options décrites ici ne sont pas toutes disponibles pour tous les types de projets. Par exemple, &amp;#039;&amp;#039;&amp;#039;Répertoire de sortie DCP&amp;#039;&amp;#039;&amp;#039; n&amp;#039;apparaît pas pour les projets C++.}}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;Options&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Cible, Appliquer, Enregistrer&lt;br /&gt;
|&lt;br /&gt;
Voir [[Options de la cible|Options de la cible]].&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Eléments communs&lt;br /&gt;
|&lt;br /&gt;
Voir [[Eléments communs des pages Options de projet|Eléments communs des pages Options de projet]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Elément&lt;br /&gt;
!Description&lt;br /&gt;
! style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot; |Commutateurs du compilateur&lt;br /&gt;
! style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot; |[[Plates-formes cible prises en charge|Toutes les plates-formes]] sont prises en charge sauf spécification contraire&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Définitions conditionnelles&lt;br /&gt;
|&lt;br /&gt;
Spécifie les symboles référencés dans vos directives de compilation conditionnelles. Utilisez un point-virgule pour séparer plusieurs symboles.  Par exemple, tapez : &amp;lt;code&amp;gt;DEBUG;Platform32Bit&amp;lt;/code&amp;gt;.&lt;br /&gt;
Cliquez sur les [[Image:ProjectOptionsEllipsis.jpg|points de suspension]] pour ouvrir la boîte de dialogue &amp;#039;&amp;#039;&amp;#039;[[Boîte de dialogue liste-ordonnée|Définitions conditionnelles]]&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Répertoire de sortie DCP&lt;br /&gt;
|&lt;br /&gt;
Spécifie où le [[Fichier package compilé Delphi (*.dcp)|fichier de package compilé]] ({{Path|.dcp}}) est placé lors de la compilation. Si le champ est vide, le &amp;#039;&amp;#039;&amp;#039;répertoire de sortie DCP&amp;#039;&amp;#039;&amp;#039; global spécifié dans la page {{menu|Outils &amp;amp;gt; Options &amp;amp;gt; Options d&amp;#039;environnement &amp;amp;gt; Options {{Delphi}} &amp;amp;gt; Bibliothèque}} sera utilisé à la place.&lt;br /&gt;
Le bouton popup [[Image:ProjectOptionsEllipsis.jpg|Points de suspension]] ouvre une [[Boîte de dialogue liste-ordonnée|boîte de dialogue &amp;lt;liste-ordonnée&amp;gt;]] pour la sélection et l&amp;#039;ajout de répertoires, comme décrit dans [[Eléments communs des pages Options de projet|Eléments communs des pages Options de projet]].&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-LN&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Chemin de recherche du framework&lt;br /&gt;
|&lt;br /&gt;
Spécifie les chemins de recherche dans lesquels le compilateur recherche les frameworks.&lt;br /&gt;
Séparez les alias par un point-virgule.&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;‑‑frameworkpath&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
Périphérique iOS&amp;amp;nbsp; (64 bits)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Répertoire de sortie&lt;br /&gt;
|&lt;br /&gt;
Spécifie l&amp;#039;endroit où le compilateur doit placer le fichier exécutable. Le bouton popup [[Image:ProjectOptionsEllipsis.jpg|Points de suspension]] ouvre une [[Boîte de dialogue liste-ordonnée|boîte de dialogue &amp;lt;liste-ordonnée&amp;gt;]] pour la sélection et l&amp;#039;ajout de répertoires, comme décrit dans [[Eléments communs des pages Options de projet|Eléments communs des pages Options de projet]].&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Répertoire de sortie des packages&lt;br /&gt;
|&lt;br /&gt;
Spécifie le répertoire où le compilateur place les fichiers de packages générés. Le bouton popup [[Image:ProjectOptionsEllipsis.jpg|Points de suspension]] ouvre une [[Boîte de dialogue liste-ordonnée|boîte de dialogue &amp;lt;liste-ordonnée&amp;gt;]] pour la sélection et l&amp;#039;ajout de répertoires, comme décrit dans [[Eléments communs des pages Options de projet|Eléments communs des pages Options de projet]].&lt;br /&gt;
Cette option détermine le répertoire de sortie des fichiers suivants :&lt;br /&gt;
*[[Fichier manifest d&amp;#039;application Android (AndroidManifest.xml)|Fichier manifest d&amp;#039;application Android (AndroidManifest.xml)]]&lt;br /&gt;
*[[Fichier des droits d&amp;#039;application Apple (*.entitlements)|Fichier des droits d&amp;#039;application Apple (*.entitlements)]]&lt;br /&gt;
*[[Fichier des informations d&amp;#039;application Apple (*.info.plist)|Fichier des informations d&amp;#039;application Apple (*.info.plist)]]&lt;br /&gt;
*[[Fichier des règles de ressources d&amp;#039;application Apple|Fichier des règles de ressources d&amp;#039;application Apple (ResourceRules.plist)]]&lt;br /&gt;
*[[Fichier de chaînes de ressources Delphi (*.drc)|Fichier de chaînes de ressources Delphi (*.drc)]]&lt;br /&gt;
*[[Map Debug File|Fichier de débogage map]]&lt;br /&gt;
*[[Fichier de bibliothèque partagée de package|Fichier de bibliothèque dynamique de package]]&lt;br /&gt;
*[[Fichier de débogage RSM|Fichier de débogage RSM]]&lt;br /&gt;
*[[Fichier de débogage TDS|Fichier de débogage TDS]]&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-LE&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Chemin de recherche&lt;br /&gt;
|&lt;br /&gt;
Spécifie l&amp;#039;emplacement de vos fichiers source. Seuls les fichiers qui se trouvent sur le chemin de recherche du compilateur ou sur le chemin de recherche des bibliothèques sont inclus dans la construction. Si vous essayez de construire votre projet avec un fichier absent du chemin de recherche, vous recevrez une erreur de compilation. Vous devez inclure le chemin de recherche complet.&lt;br /&gt;
Séparez plusieurs noms de répertoires en les séparant par un point-virgule. Les espaces avant ou après le point-virgule sont autorisés mais pas nécessaires. Les chemins relatifs et absolus sont autorisés, notamment les chemins relatifs à la position en cours.&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-U&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Afficher les messages généraux&lt;br /&gt;
|&lt;br /&gt;
Définissez cette option to {{Code|True}} afin d&amp;#039;afficher les messages d&amp;#039;information du compilateur dans l&amp;#039;onglet de sortie [[Vue Messages|Vue Messages]].&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Chemin racine de bibliothèque système&lt;br /&gt;
|&lt;br /&gt;
Spécifie les chemins racine dans lesquels le compilateur recherche les bibliothèques système.&lt;br /&gt;
Séparez les alias par un point-virgule.&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;‑‑syslibroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
Périphérique iOS&amp;amp;nbsp; (64 bits)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Alias d&amp;#039;unités&lt;br /&gt;
|&lt;br /&gt;
Utile pour la compatibilité ascendante. Spécifiez les noms d&amp;#039;alias pour les unités dont le nom a été modifié ou qui ont été fusionnées au sein d&amp;#039;une unité unique. Le format est&lt;br /&gt;
 &amp;amp;lt;oldunit&amp;amp;gt;=&amp;amp;lt;newunit&amp;amp;gt;&lt;br /&gt;
Par exemple :&lt;br /&gt;
 Forms=Xforms&lt;br /&gt;
Séparez les alias par un point-virgule. La valeur par défaut pour {{Delphi}} est &amp;lt;code&amp;gt;WinTypes=Windows;WinProcs=Windows.Default&amp;lt;/code&amp;gt;. Le bouton popup [[Image:ProjectOptionsEllipsis.jpg|Points de suspension]] ouvre une [[Boîte de dialogue liste-ordonnée|boîte de dialogue &amp;lt;liste-ordonnée&amp;gt;]] pour la sélection et l&amp;#039;ajout de répertoires, comme décrit dans [[Eléments communs des pages Options de projet|Eléments communs des pages Options de projet]].&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Répertoire de sortie des unités&lt;br /&gt;
|&lt;br /&gt;
Spécifie un répertoire distinct pour contenir les [[Fichier unité compilé Delphi (*.dcu)|unités compilées]] ({{Path|.dcu}}). Cliquez sur [[Image:ProjectOptionsEllipsis.jpg|Points de suspension]] pour ouvrir la boîte de dialogue &amp;#039;&amp;#039;&amp;#039;Rechercher un dossier&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-NU&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Noms de portées d&amp;#039;unités&lt;br /&gt;
|&lt;br /&gt;
Spécifie les [[Noms de portées d&amp;#039;unités|noms de portées d&amp;#039;unités]] (préfixes) pour les espaces de nommage {{Delphi}} à points, afin de vous permettre d&amp;#039;utiliser partiellement les noms qualifiés dans votre code, et dans votre clause &amp;lt;code&amp;gt;uses&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;#include&amp;lt;/code&amp;gt;.&lt;br /&gt;
Il existe deux façons d&amp;#039;ajouter un nom de portée d&amp;#039;unité pour une unité {{Delphi}} :&lt;br /&gt;
*Spécifiez le nom de portée d&amp;#039;unité complet dans votre clause &amp;lt;code&amp;gt;uses&amp;lt;/code&amp;gt;. Par exemple :&lt;br /&gt;
**&amp;lt;code&amp;gt; uses FMX.Graphics;&amp;lt;/code&amp;gt;   ({{Delphi}})&lt;br /&gt;
*Ajoutez le nom de portée d&amp;#039;unité (&amp;lt;code&amp;gt;FMX&amp;lt;/code&amp;gt;) au champ &amp;#039;&amp;#039;&amp;#039;Noms de portées d&amp;#039;unités&amp;#039;&amp;#039;&amp;#039;. Le nom de portée d&amp;#039;unité &amp;lt;code&amp;gt;FMX&amp;lt;/code&amp;gt; est alors appliqué automatiquement aux noms d&amp;#039;unités qui appartiennent à cette portée d&amp;#039;unité, et vous pouvez simplement spécifier :&lt;br /&gt;
**&amp;lt;code&amp;gt;uses Graphics;&amp;lt;/code&amp;gt;  ({{Delphi}})&lt;br /&gt;
&lt;br /&gt;
Le bouton popup [[Image:ProjectOptionsEllipsis.jpg|Points de suspension]] ouvre une [[Boîte de dialogue liste-ordonnée|boîte de dialogue &amp;lt;liste-ordonnée&amp;gt;]] pour la sélection et l&amp;#039;ajout de noms de portée d&amp;#039;unité, comme décrit dans [[Eléments communs des pages Options de projet|Eléments communs des pages Options de projet]] et [[Boîte de dialogue liste-ordonnée|Boîte de dialogue liste ordonnée]].&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-NS&amp;lt;/code&amp;gt;|&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; {{fr|radstudio}}&lt;br /&gt;
|&lt;br /&gt;
Utiliser MSBuild de façon externe pour compiler&lt;br /&gt;
|&lt;br /&gt;
Si cette option est activée, votre projet est construit à l&amp;#039;extérieur de l&amp;#039;EDI en utilisant [[MSBuild|MSBuild]].&lt;br /&gt;
Vous pouvez utiliser cette option si {{Product}} [[F2046 Mémoire insuffisante (Delphi)|est à cours de mémoire lorsque vous construisez votre groupe de projet]].&lt;br /&gt;
Vous devez :&lt;br /&gt;
*Enregistrer votre projet avant de tenter d&amp;#039;effectuer une construction lorsque vous utilisez cette option.&lt;br /&gt;
*Activez l&amp;#039;option &amp;#039;&amp;#039;&amp;#039;Symboles de débogage distant&amp;#039;&amp;#039;&amp;#039; sur la page [[Liaison (Delphi)|Liaison]] si vous voulez utiliser le débogueur intégré avec votre projet MSBuild.&lt;br /&gt;
&lt;br /&gt;
Valeur par défaut = False&lt;br /&gt;
{{Note|Utilisez cette option pour empêcher les problèmes qui surviennent lorsque la ligne de commande vers DCC32 dépasse 3200 octets. Lorsque cette option est activée, le script MSBuild génère automatiquement un fichier de réponse &amp;lt;code&amp;gt;&amp;amp;lt;votre projet&amp;amp;gt;.cmds&amp;lt;/code&amp;gt; qui est transmis à DCC32.}}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Architecture d&amp;#039;outil préférée&lt;br /&gt;
|&lt;br /&gt;
Lorsque vous compilez avec MSBuild, spécifiez la version de vos outils préférés à utiliser.&lt;br /&gt;
Utilisez la propriété {{code|DCC_PreferredToolArchitecture}} pour contrôler quelle architecture binaire doit être utilisée pour les compilateurs Delphi.&lt;br /&gt;
Pour bin\DCC32 ou bin\DCC64, utilisez :&lt;br /&gt;
 /p:DCC_PreferredToolArchitecture=x32&lt;br /&gt;
Et pour bin64\DCC32 ou bin64\DCC64, utilisez :&lt;br /&gt;
 /p:DCC_PreferredToolArchitecture=x64&lt;br /&gt;
L&amp;#039;utilisation des outils 64 bits permet de bénéficier d&amp;#039;un plus grand espace mémoire pour le compilateur. &lt;br /&gt;
{{Note|L&amp;#039;option d&amp;#039;architecture des outils 64 bits est uniquement disponible pour les plates-formes suivantes :&lt;br /&gt;
*Compilateurs cibles Delphi Windows 32 bits&lt;br /&gt;
*Compilateurs cibles Delphi Windows 64 bits}}&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; text-align: center;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conseils==&lt;br /&gt;
&lt;br /&gt;
*Pour afficher les options du compilateur dans la fenêtre &amp;#039;&amp;#039;&amp;#039;Messages&amp;#039;&amp;#039;&amp;#039; quand vous compilez un projet, choisissez &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt; &amp;#039;&amp;#039;&amp;#039;Outils &amp;amp;gt; Options &amp;amp;gt; Options d&amp;#039;environnement&amp;#039;&amp;#039;&amp;#039; &amp;lt;/font&amp;gt; et sélectionnez &amp;#039;&amp;#039;&amp;#039;Afficher la ligne de commande&amp;#039;&amp;#039;&amp;#039;. Lors de la prochaine compilation d&amp;#039;un projet, la commande utilisée pour compiler le projet et le fichier de réponse seront tous deux affichés dans la fenêtre &amp;#039;&amp;#039;&amp;#039;Messages&amp;#039;&amp;#039;&amp;#039;. Le fichier de réponse liste les options du compilateur et les fichiers à compiler.&amp;lt;br /&amp;gt;&lt;br /&gt;
*Pour afficher plusieurs valeurs dans une zone d&amp;#039;édition, séparez-les par un point-virgule. Vous pouvez aussi cliquer sur le bouton points de suspension placé à côté de chaque zone d&amp;#039;édition pour ajouter plusieurs valeurs par l&amp;#039;intermédiaire d&amp;#039;une boîte de dialogue appropriée.&amp;lt;br /&amp;gt;&lt;br /&gt;
*Pour spécifier des [[Variables d&amp;#039;environnement|variables d&amp;#039;environnement]] du système d&amp;#039;exploitation ou des variables d&amp;#039;environnement définies dans l&amp;#039;EDI dans une zone d&amp;#039;édition, utilisez la syntaxe suivante : &amp;lt;code&amp;gt;$(NomVariable)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*:Par exemple, la variable &amp;#039;&amp;#039;&amp;#039;$(Config)&amp;#039;&amp;#039;&amp;#039; est résolue sur la configuration spécifique qui est définie dans le [[Options de la cible|champ Cible]] de la page Options de projet spécifique où &amp;#039;&amp;#039;&amp;#039;$(Config)&amp;#039;&amp;#039;&amp;#039; est spécifiée. Si vous spécifiez $(Config) dans un chemin, puis construisez avec une configuration &amp;#039;&amp;#039;&amp;#039;Débogage&amp;#039;&amp;#039;&amp;#039; en tant que &amp;#039;&amp;#039;&amp;#039;cible&amp;#039;&amp;#039;&amp;#039;, $(Config) inclut seulement le répertoire &amp;#039;&amp;#039;&amp;#039;Débogage&amp;#039;&amp;#039;&amp;#039; et des éléments existant seulement dans le répertoire &amp;#039;&amp;#039;&amp;#039;Release&amp;#039;&amp;#039;&amp;#039; peuvent être absents de la construction.&lt;br /&gt;
&lt;br /&gt;
==Pages enfant==&lt;br /&gt;
&lt;br /&gt;
*[[Compilation|Compilation]]&lt;br /&gt;
*[[Conseils et avertissements|Conseils et avertissements]]&lt;br /&gt;
*[[Liaison (Delphi)|Liaison]]&lt;br /&gt;
*[[Sortie - C/C++|Sortie - C/C++]]&lt;br /&gt;
*[[Prise en charge de l&amp;#039;assembleur intégré pour AVX2 et AVX-512|Prise en charge de l&amp;#039;assembleur intégré pour AVX2 et AVX-512]]&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[DCC32.EXE, le compilateur en ligne de commande Delphi|DCC32.EXE, le compilateur en ligne de commande Delphi]]&lt;br /&gt;
*[[DCC64.EXE, le compilateur en ligne de commande Delphi 64 bits|DCC64.EXE, le compilateur en ligne de commande Delphi 64 bits]]&lt;br /&gt;
*[[DCCOSX64.EXE, le compilateur Delphi pour macOS 64 bits|DCCOSX64.EXE, le compilateur Delphi pour macOS 64 bits]]&lt;br /&gt;
*[[DCCAARM.EXE, le compilateur Delphi pour Android|DCCAARM.EXE, le compilateur Delphi pour Android]]&lt;br /&gt;
*[[DCCAARM64.EXE, le compilateur Delphi pour Android 64 bits|DCCAARM.EXE, le compilateur Delphi pour Android 64 bits]]&lt;br /&gt;
*[[DCCIOSARM64.EXE, le compilateur Delphi pour le périphérique iOS 64 bits|DCCIOSARM64.EXE, le compilateur Delphi pour le périphérique iOS 64 bits]]&lt;br /&gt;
*[[DCCLINUX64.EXE, le compilateur Delphi pour Linux|DCCLINUX64.EXE, le compilateur Delphi pour Linux]]&lt;br /&gt;
*[[Compilation, construction et exécution d&amp;#039;applications|Compilation, construction et exécution d&amp;#039;applications]]&lt;br /&gt;
*[[Création et modification de configurations de construction|Création et modification de configurations de construction]]  &lt;br /&gt;
*[[Compilation et construction des applications multi-périphériques|Compilation et construction des applications multi-périphériques]]&lt;br /&gt;
*[[Ajout de noms de portées d&amp;#039;unités pour vos propres composants|Ajout de noms de portées d&amp;#039;unités pour vos propres composants]]&lt;br /&gt;
*[[Bibliothèque|Bibliothèque]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Référence RAD Studio]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 17:05:25 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Compilateur_Delphi</comments>
		</item>
		<item>
			<title>Construction</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Construction&amp;diff=223403&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Construction&amp;diff=223403&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Construction&quot; title=&quot;Construction&quot;&gt;Construction&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Boîte de dialogue Options de projet}}&lt;br /&gt;
&lt;br /&gt;
{{Menu|Projet &amp;amp;gt; Options &amp;amp;gt; Construction}}&lt;br /&gt;
&lt;br /&gt;
Certaines des options répertoriées ci-dessous sont disponibles pour des langages de programmation ou des types de projets spécifiques uniquement.&lt;br /&gt;
&lt;br /&gt;
==Pages enfant==&lt;br /&gt;
&lt;br /&gt;
* [[C++ (options partagées)|C++ (options partagées)]]&lt;br /&gt;
*[[Compilateur C++|Compilateur C++]]&lt;br /&gt;
** [[Options avancées du compilateur C++|Options avancées]]&lt;br /&gt;
** [[Compatibilité du compilateur C++|Compatibilité]]&lt;br /&gt;
** [[Compilateur C++ - Débogage|Débogage]]&lt;br /&gt;
** [[Répertoires et Conditions du compilateur C++|Répertoires et Conditions]]&lt;br /&gt;
** [[Compilateur LSP C++|LSP]]&lt;br /&gt;
** [[Compilateur C++ - Optimisations|Optimisations]]&lt;br /&gt;
** [[Compilateur C++ - Sortie|Sortie]]&lt;br /&gt;
** [[En-têtes précompilés du compilateur C++|En-têtes précompilés]]&lt;br /&gt;
** [[Compilateur C++ - Avertissements|Avertissements]]&lt;br /&gt;
* [[Bibliothécaire (TLib)|Bibliothécaire (TLib)]]&lt;br /&gt;
*[[Lieur C++|Lieur C++]]&lt;br /&gt;
** [[Sortie du lieur C++|Sortie]]&lt;br /&gt;
** [[Avertissements du lieur C++|Avertissements]]&lt;br /&gt;
*[[Compilateur Delphi|Compilateur Delphi]]&lt;br /&gt;
** [[Compilation|Compilation]]&lt;br /&gt;
** [[Conseils et avertissements|Conseils et avertissements]]&lt;br /&gt;
** [[Liaison (Delphi)|Liaison]]&lt;br /&gt;
** [[Sortie - C/C++|Sortie - C/C++]]&lt;br /&gt;
* [[Lieurs externes utilisés par Delphi (et C++)|Lieurs externes utilisés par Delphi (et C++)]]&lt;br /&gt;
*[[Options du compilateur de ressources|Compilateur de ressources]]&lt;br /&gt;
** [[Répertoires et Conditions du compilateur de ressources|Répertoires et Conditions]]&lt;br /&gt;
*[[Options Turbo Assembleur|Turbo Assembleur]]&lt;br /&gt;
** [[Répertoires et Conditions Turbo Assembleur|Répertoires et Conditions]]&lt;br /&gt;
** [[Turbo Assembleur - Avertissements|Avertissements]]&lt;br /&gt;
* [[Evénements de construction|Evénements de construction]]&lt;br /&gt;
* [[Ordre de construction|Ordre de construction]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Référence EDI]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 17:05:25 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Construction</comments>
		</item>
		<item>
			<title>Champs (Delphi)</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Champs_(Delphi)&amp;diff=223401&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Champs_(Delphi)&amp;diff=223401&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Champs_(Delphi)&quot; title=&quot;Champs (Delphi)&quot;&gt;Champs (Delphi)&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Classes et objets - Index}}&amp;lt;idetag id=&amp;quot;var&amp;quot;&amp;gt;&amp;lt;/idetag&amp;gt;&amp;lt;idetag id=&amp;quot;Int&amp;quot;&amp;gt;&amp;lt;/idetag&amp;gt;&amp;lt;idetag id=&amp;quot;class var&amp;quot;&amp;gt;&amp;lt;/idetag&amp;gt;&amp;lt;idetag id=&amp;quot;private&amp;quot;&amp;gt;&amp;lt;/idetag&amp;gt;&amp;lt;idetag id=&amp;quot;protected&amp;quot;&amp;gt;&amp;lt;/idetag&amp;gt;&amp;lt;idetag id=&amp;quot;public&amp;quot;&amp;gt;&amp;lt;/idetag&amp;gt;&amp;lt;idetag id=&amp;quot;published&amp;quot;&amp;gt;&amp;lt;/idetag&amp;gt;&amp;lt;idetag id=&amp;quot;strict protected&amp;quot;&amp;gt;&amp;lt;/idetag&amp;gt;&lt;br /&gt;
Cette rubrique décrit la syntaxe des déclarations de champs de données des classes. &lt;br /&gt;
&lt;br /&gt;
==A propos des champs==&lt;br /&gt;
&lt;br /&gt;
Un champ est semblable à une variable appartenant à un objet. Les champs peuvent avoir n&amp;#039;importe quel type, y compris les types classe. (Les champs peuvent donc contenir des références d&amp;#039;objets.) Les champs sont généralement privés. &lt;br /&gt;
&lt;br /&gt;
Pour définir un membre champ dans une classe, déclarez simplement le champ comme vous le feriez pour une variable. Par exemple, la déclaration suivante crée une classe appelée &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;TNumber&amp;lt;/span&amp;gt; dont le seul membre, en dehors des méthodes héritées de [[lib_fr:System.TObject|System.TObject]], est un champ entier appelé &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;Int&amp;lt;/span&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 type&lt;br /&gt;
   TNumber = class&lt;br /&gt;
     var&lt;br /&gt;
       Int: Integer;&lt;br /&gt;
   end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le mot-clé &amp;#039;&amp;#039;&amp;#039;var&amp;#039;&amp;#039;&amp;#039; est facultatif. Toutefois, s&amp;#039;il n&amp;#039;est pas utilisé, toutes les déclarations de champs doivent être placées avant les déclarations de propriétés ou de méthodes. Après les déclarations de propriétés ou de méthodes, le mot-clé &amp;#039;&amp;#039;&amp;#039;var&amp;#039;&amp;#039;&amp;#039; peut être utilisé pour introduire des déclarations de champs supplémentaires. &lt;br /&gt;
&lt;br /&gt;
Lorsqu&amp;#039;un objet est créé, ses champs sont initialisés à zéro ou aux valeurs par défaut. Ce comportement est différent de celui des variables locales qui ne sont pas initialisées. Si vous entrez :{{#tag:syntaxhighlight|&lt;br /&gt;
var&lt;br /&gt;
&lt;br /&gt;
  N: TNumber;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
  N := TNumber.Create;&lt;br /&gt;
&lt;br /&gt;
|lang=delphi}}la valeur de N.Int sera zéro.&lt;br /&gt;
&lt;br /&gt;
Les champs sont liés statiquement, c&amp;#039;est-à-dire que les références les désignant sont réglées à la compilation. Pour comprendre ce que cela signifie, examinez le code suivant : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 type&lt;br /&gt;
    TAncestor = class&lt;br /&gt;
       Value: Integer;&lt;br /&gt;
    end;&lt;br /&gt;
 &lt;br /&gt;
    TDescendant = class(TAncestor)&lt;br /&gt;
       Value: string;    // hides the inherited Value field&lt;br /&gt;
    end;&lt;br /&gt;
 &lt;br /&gt;
 var&lt;br /&gt;
    MyObject: TAncestor;&lt;br /&gt;
 &lt;br /&gt;
 begin&lt;br /&gt;
    MyObject := TDescendant.Create;&lt;br /&gt;
    MyObject.Value := &amp;#039;Hello!&amp;#039;     // error&lt;br /&gt;
 &lt;br /&gt;
   (MyObject as TDescendant).Value := &amp;#039;Hello!&amp;#039;   // works!&lt;br /&gt;
 end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Même si &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;MyObject&amp;lt;/span&amp;gt; contient une instance de &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;TDescendant&amp;lt;/span&amp;gt;, il est déclaré comme un &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;TAncestor&amp;lt;/span&amp;gt;. Le compilateur interprète donc &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;MyObject.Value&amp;lt;/span&amp;gt; comme une référence au champ (entier) déclaré dans &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;TAncestor&amp;lt;/span&amp;gt;. Cependant, les deux champs existent dans l&amp;#039;objet &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;TDescendant&amp;lt;/span&amp;gt; ; la valeur &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;Value&amp;lt;/span&amp;gt; héritée est masquée par la nouvelle, mais il est possible d&amp;#039;y accéder en utilisant un transtypage.&lt;br /&gt;
&lt;br /&gt;
Les déclarations de [[Constantes déclarées|constantes]] et de [[Constantes déclarées|constantes typées]] peuvent apparaître dans des classes et des enregistrements non anonymes avec une portée globale. Les constantes et les constantes typées peuvent également apparaître dans les définitions de [[Déclarations de types imbriqués|types imbriqués]]. Les constantes et constantes typées ne peuvent apparaître que dans les définitions de classes quand la classe est définie localement sur une procédure (c&amp;#039;est-à-dire qu&amp;#039;elles ne peuvent pas apparaître dans des enregistrements définis dans une procédure). &lt;br /&gt;
&lt;br /&gt;
==Champs de classe==&lt;br /&gt;
&lt;br /&gt;
Les champs de classe sont des champs de données d&amp;#039;une classe accessibles sans référence d&amp;#039;objet (à la différence des &amp;quot;champs d&amp;#039;instance&amp;quot; normaux qui sont traités ci-dessus). Les données stockées dans un champ de classe sont partagées par toutes les instances de la classe et peuvent être accessibles en se référant à la classe ou à une variable qui représente une instance de la classe.&lt;br /&gt;
&lt;br /&gt;
La déclaration de bloc &amp;#039;&amp;#039;&amp;#039;class var&amp;#039;&amp;#039;&amp;#039; vous permet d&amp;#039;introduire un bloc de champs de classe dans une déclaration de classe. Tous les champs déclarés après &amp;#039;&amp;#039;&amp;#039;class var&amp;#039;&amp;#039;&amp;#039; ont des attributs de stockage statique. Un bloc &amp;#039;&amp;#039;&amp;#039;class var&amp;#039;&amp;#039;&amp;#039; se termine par : &lt;br /&gt;
&lt;br /&gt;
# Une autre déclaration &amp;#039;&amp;#039;&amp;#039;class var&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;var&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
# Une [[Méthodes (Delphi)|déclaration de procédure ou fonction (c&amp;#039;est-à-dire une méthode)]] (y compris des procédures de classe et des fonctions de classe)&lt;br /&gt;
# Une [[Propriétés (Delphi)|déclaration de propriété]] (y compris des propriétés de classe)&lt;br /&gt;
# Une [[Méthodes (Delphi)|déclaration de constructeur ou de destructeur]]&lt;br /&gt;
# Un [[Classes et objets (Delphi)|spécificateur de portée de visibilité]] (&amp;#039;&amp;#039;&amp;#039;public&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;private&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;protected&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;published&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;strict private&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;strict protected&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 type&lt;br /&gt;
     TMyClass = class&lt;br /&gt;
       public&lt;br /&gt;
         class var        // Introduce a block of class static fields.&lt;br /&gt;
           Red: Integer;&lt;br /&gt;
           Green: Integer;&lt;br /&gt;
           Blue: Integer;&lt;br /&gt;
         var              // Ends the class var block.&lt;br /&gt;
           InstanceField: Integer;&lt;br /&gt;
     end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les champs de classe &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;Red&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;Green&amp;lt;/span&amp;gt; et &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;Blue&amp;lt;/span&amp;gt; sont accessibles par le code :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 TMyClass.Red := 1;&lt;br /&gt;
 TMyClass.Green := 2;&lt;br /&gt;
 TMyClass.Blue := 3;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les champs de classe sont aussi accessibles au moyen d&amp;#039;une instance de la classe. Avec la déclaration suivante :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 var&lt;br /&gt;
 	myObject: TMyClass;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce code a le même effet que les assignations de &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;Red&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;Green&amp;lt;/span&amp;gt; et &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;Blue&amp;lt;/span&amp;gt; ci-dessus :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 myObject.Red := 1;&lt;br /&gt;
 myObject.Green := 2;&lt;br /&gt;
 myObject.Blue := 3;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[[Variables (Delphi)|Variables ({{Delphi}})]]&lt;br /&gt;
*[[Classes et objets (Delphi)|Classes et objets (Delphi)]]&lt;br /&gt;
*[[Méthodes (Delphi)|Méthodes (Delphi)]]&lt;br /&gt;
*[[Propriétés (Delphi)|Propriétés (Delphi)]]&lt;br /&gt;
*[[Déclarations de types imbriqués|Déclarations de types imbriquées]]&lt;br /&gt;
*[[Références de classes|Références de classes]]&lt;br /&gt;
*[[Exceptions (Delphi)|Exceptions (Delphi)]]&lt;br /&gt;
*[[Surcharge d&amp;#039;opérateurs (Delphi)|Surcharge d&amp;#039;opérateurs (Delphi)]]&lt;br /&gt;
*[[Assistances de classes et d&amp;#039;enregistrements (Delphi)|Assistances de classes et d&amp;#039;enregistrements (Delphi)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:Guide du langage Delphi]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 17:05:25 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Champs_(Delphi)</comments>
		</item>
		<item>
			<title>Barre de défilement</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Barre_de_d%C3%A9filement&amp;diff=223399&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Barre_de_d%C3%A9filement&amp;diff=223399&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Barre_de_d%C3%A9filement&quot; title=&quot;Barre de défilement&quot;&gt;Barre de défilement&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Options de l&amp;#039;éditeur}}&lt;br /&gt;
&lt;br /&gt;
{{Menu|Outils &amp;amp;gt; Options &amp;amp;gt; Editeur &amp;amp;gt; Barre de défilement}}&lt;br /&gt;
&lt;br /&gt;
Les annotations de la [[Barre de défilement|barre de défilement]] permettent d&amp;#039;avoir une vue globale de votre code source et de suivre facilement des éléments particuliers.&lt;br /&gt;
&lt;br /&gt;
Utilisez cette page pour configurer les annotations.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &amp;#039;&amp;#039;&amp;#039;Elément&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
! &amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Appliquer les couleurs du thème de l&amp;#039;éditeur à la barre de défilement&lt;br /&gt;
|&lt;br /&gt;
Permet à la barre de défilement d&amp;#039;utiliser les couleurs du thème de l&amp;#039;EDI&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Activer les annotations de la barre de défilement&lt;br /&gt;
|&lt;br /&gt;
Active les options d&amp;#039;annotation de la barre de défilement&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Annotations de la barre de défilement&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Activé&lt;br /&gt;
|&lt;br /&gt;
Case à cocher qui active ou désactive toutes les fonctionnalités permettant d&amp;#039;afficher des marques sur la barre de défilement&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Nom &lt;br /&gt;
|&lt;br /&gt;
Options d&amp;#039;annotation : Audit d&amp;#039;erreur, Parties modifiées, Résultats de la recherche et Signets &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Début (0 – 15)&lt;br /&gt;
|&lt;br /&gt;
Intervalle de 0 à 15 définissant la position de départ de la barre de défilement&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Largeur (0 – 15)&lt;br /&gt;
|&lt;br /&gt;
Intervalle de 0 à 15 définissant la largeur de la barre de défilement&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Aperçu&lt;br /&gt;
|&lt;br /&gt;
Affiche un aperçu de la barre de défilement telle qu&amp;#039;elle sera avec les paramètres de &amp;#039;&amp;#039;&amp;#039;début&amp;#039;&amp;#039;&amp;#039; et de &amp;#039;&amp;#039;&amp;#039;largeur&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Cliquez sur la barre de défilement pour accéder à l&amp;#039;emplacement&lt;br /&gt;
|&lt;br /&gt;
Accède directement à la position voulue en cliquant sur la barre de défilement&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
* [[Options de l&amp;#039;éditeur|Editeur]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 17:05:24 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Barre_de_d%C3%A9filement</comments>
		</item>
		<item>
			<title>Delphi RTTI et C++Builder</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Delphi_RTTI_et_C%2B%2BBuilder&amp;diff=223397&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Delphi_RTTI_et_C%2B%2BBuilder&amp;diff=223397&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Yukikoi&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Yukikoi (page inexistante)&quot;&gt;&lt;bdi&gt;Yukikoi&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Delphi_RTTI_et_C%2B%2BBuilder&quot; title=&quot;Delphi RTTI et C++Builder&quot;&gt;Delphi RTTI et C++Builder&lt;/a&gt; par téléversement de fichier (1 version) LOC-23451&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Parent|Utilisation des informations RTTI - Index|Utilisation des informations RTTI}}&lt;br /&gt;
&lt;br /&gt;
==Découverte du type à l&amp;#039;exécution (réflexion)==&lt;br /&gt;
&lt;br /&gt;
===Désambiguïsation===&lt;br /&gt;
&lt;br /&gt;
Les informations RTTI de {{Delphi}} sont différentes des informations RTTI standard de C++&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
*Les informations RTTI de {{Delphi}} vous permettent d&amp;#039;explorer les champs, les méthodes d&amp;#039;une classe, et ainsi de suite.&lt;br /&gt;
*Les informations RTTI de C++ vous permettent d&amp;#039;identifier le type d&amp;#039;une variable et de comparer l&amp;#039;égalité des types, ou l&amp;#039;ordre de tri.&lt;br /&gt;
&lt;br /&gt;
{{Note| L&amp;#039;option du compilateur {{Menu|Projet &amp;amp;gt; Options &amp;amp;gt; [[Compilateur C++|Compilateur C++]] &amp;amp;gt; Activer la RTTI&amp;#039;&amp;#039;&amp;#039;}} fait référence à une RTTI C++ standard.}}&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===Génération des informations RTTI===&lt;br /&gt;
&lt;br /&gt;
Seules les classes de style {{Delphi}} peuvent avoir des informations de style {{Delphi}} dans C++ (voir [[Declspec(delphiclass)|__declspec(delphiclass)]]).&lt;br /&gt;
&lt;br /&gt;
Des informations RTTI peuvent être générées pour tout type de membre de classe (méthodes, champs, propriétés) avec toute visibilité (__published, public, protected, private). Pour contrôler la génération des informations RTTI, les spécifications suivantes peuvent être utilisées&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
*[[Pragma explicit rtti|#pragma explicit_rtti]] (c&amp;#039;est l&amp;#039;équivalent C++ de [[Directive RTTI (Delphi)|&amp;lt;nowiki&amp;gt;{$RTTI}&amp;lt;/nowiki&amp;gt;]])&lt;br /&gt;
*[[Declspec(delphirtti)|__declspec(delphirtti)]] (c&amp;#039;est l&amp;#039;équivalent C++ de [[Informations de type à l&amp;#039;exécution (Delphi)|&amp;lt;nowiki&amp;gt;{$M}/{$TYPEINFO}&amp;lt;/nowiki&amp;gt;]])&lt;br /&gt;
*[[Published|__published]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exemple&amp;amp;nbsp;:&amp;#039;&amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;System.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;Rtti.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;tchar.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Enable RTTI generation for private fields&lt;br /&gt;
#pragma explicit_rtti fields(private)&lt;br /&gt;
&lt;br /&gt;
class __declspec(delphiclass) TBuffer {&lt;br /&gt;
private:&lt;br /&gt;
	int wrHead, rdHead;&lt;br /&gt;
&lt;br /&gt;
	// ...&lt;br /&gt;
public:&lt;br /&gt;
	TBuffer() {&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
int _tmain(int argc, _TCHAR* argv[]) {&lt;br /&gt;
	TRttiContext context;&lt;br /&gt;
&lt;br /&gt;
	// Get class RTTI&lt;br /&gt;
	TRttiInstanceType *cls = dynamic_cast&amp;lt;TRttiInstanceType*&amp;gt;&lt;br /&gt;
		(context.GetType(__delphirtti(TBuffer)));&lt;br /&gt;
&lt;br /&gt;
	if (cls) {&lt;br /&gt;
		// Get field RTTI&lt;br /&gt;
		TRttiField *field = cls-&amp;gt;GetField(&amp;quot;wrHead&amp;quot;);&lt;br /&gt;
		if (field) {&lt;br /&gt;
			printf(&amp;quot;%ls&amp;quot;, field-&amp;gt;ToString().c_str());&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			puts(&amp;quot;\&amp;quot;wrHead\&amp;quot; doesn&amp;#039;t have RTTI&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		puts(&amp;quot;\&amp;quot;TBuffer\&amp;quot; doesn&amp;#039;t have RTTI&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return 0;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Sortie console&amp;amp;nbsp;:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 wrHead: int @ 00&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, les informations RTTI de classe sont extraites à l&amp;#039;aide de la fonction [[Delphirtti|__delphirtti]] (qui renvoie un pointeur sur une variable [[lib_fr:System.TypInfo.TTypeInfo|TTypeInfo]]). Il est possible de faire la même chose avec l&amp;#039;opérateur [[Classid|__classid]]. Voir le code suivant&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
	TRttiInstanceType *cls = dynamic_cast&amp;lt;TRttiInstanceType*&amp;gt;&lt;br /&gt;
		(context.GetType(__classid(TBuffer)));&amp;lt;/source&amp;gt;Sur la plate-forme Windows, le [[Delphirtti|__delphirtti]] d&amp;#039;un [[Wchar t|wchar_t]] renvoie un [[lib_fr:System.TypInfo.PTypeInfo|PTypeInfo]] qui correspond à la RTTI {{Delphi}} pour le {{Delphi}} [[lib_fr:System.WideChar|WideChar]].&lt;br /&gt;
&lt;br /&gt;
Cette fonctionnalité est illustrée dans l&amp;#039;exemple de code suivant&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static System::UTF8String getTypeInfoName(System::Typinfo::PTypeInfo ti)&lt;br /&gt;
{&lt;br /&gt;
#ifndef _DELPHI_NEXTGEN&lt;br /&gt;
  return System::UTF8String(ti-&amp;gt;Name);&lt;br /&gt;
#else&lt;br /&gt;
  int len = ti-&amp;gt;Name;&lt;br /&gt;
  const char* p = reinterpret_cast&amp;lt;char*&amp;gt;(&amp;amp;(ti-&amp;gt;Name));&lt;br /&gt;
  return System::UTF8String(p+1, len);&lt;br /&gt;
#endif&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 int main()&lt;br /&gt;
{&lt;br /&gt;
  System::Typinfo::PTypeInfo pti;&lt;br /&gt;
  pti = __delphirtti(char16_t);&lt;br /&gt;
  printf(&amp;quot;Kind=%d, Name=&amp;#039;%s&amp;#039;\n&amp;quot;, pti-&amp;gt;Kind, getTypeInfoName(pti).c_str());&lt;br /&gt;
  pti = __delphirtti(wchar_t);&lt;br /&gt;
  printf(&amp;quot;Kind=%d, Name=&amp;#039;%s&amp;#039;\n&amp;quot;, pti-&amp;gt;Kind, getTypeInfoName(pti).c_str());&lt;br /&gt;
  return 0;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Sortie&amp;amp;nbsp;:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;Plate-forme&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;Sortie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
WIN64&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Kind=1, Name=&amp;#039;char16_t&amp;#039;&amp;amp;lt;br /&amp;amp;gt;&lt;br /&gt;
Kind=9, Name=&amp;#039;Char&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Enracinement du type===&lt;br /&gt;
&lt;br /&gt;
Vous ne pouvez pas utiliser les méthodes [[lib_fr:System.Rtti.TRttiContext.FindType|FindType]] et [[lib_fr:System.Rtti.TRttiContext.GetTypes|GetTypes]] pour obtenir la RTTI {{Delphi}} pour les classes définies en langage C++ car [[lib_fr:System.Rtti.TRttiContext.FindType|FindType]] et [[lib_fr:System.Rtti.TRttiContext.GetTypes|GetTypes]] effectuent des recherches dans les packages d&amp;#039;exécution. Or, il n&amp;#039;existe pas d&amp;#039;enracinement de type dans les packages C++. Cela signifie que vous ne pourrez pas utiliser [[lib_fr:System.Rtti.TRttiPackage|TRttiPackage]] pour obtenir des informations sur un package dynamique construit avec C++Builder.&lt;br /&gt;
&lt;br /&gt;
En revanche, le lieur {{Delphi}} enracine la RTTI dans les [[lib_fr:System.PackageInfoTable|tables d&amp;#039;informations des packages]]. En conséquence, en C++, vous pouvez charger et utiliser la RTTI de style {{Delphi}} depuis des modules {{Delphi}} (packages), comme dans le code suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
TRttiContext context;&lt;br /&gt;
TRttiType *rttiType = context.FindType(&amp;quot;Classes.TStringList&amp;quot;);&lt;br /&gt;
printf(&amp;quot;%ls&amp;quot;, rttiType-&amp;gt;ToString()); // displays TStringList&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attributs==&lt;br /&gt;
&lt;br /&gt;
Les attributs {{Delphi}} ne sont pas pris en charge dans {{CBuilder}}. {{CBuilder}} prend en charge les &amp;#039;&amp;#039;&amp;#039;[[Fonctionnalités C++11 - Index|attributs de C++11]]&amp;#039;&amp;#039;&amp;#039;, qui sont différents des attributs {{Delphi}} :&lt;br /&gt;
&lt;br /&gt;
*Les attributs {{Delphi}} représentent des informations supplémentaires pour le programmeur et ils peuvent être extraits à l&amp;#039;exécution.&lt;br /&gt;
*Les attributs C++11 représentent des informations supplémentaires pour le compilateur et ne sont pas spécifiques à RTTI.&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
===Informations RTTI de {{Delphi}}===&lt;br /&gt;
&lt;br /&gt;
*[[lib_fr:System.Rtti|API RTTI]]&lt;br /&gt;
*[[Utilisation des informations RTTI - Index|Utilisation des informations RTTI]]&lt;br /&gt;
*[[Présentation des attributs|Attributs et RTTI]]&lt;br /&gt;
&lt;br /&gt;
===Informations RTTI de {{Delphi}} dans {{CBuilder}}===&lt;br /&gt;
&lt;br /&gt;
*[[Declspec(delphirtti)|__declspec(delphirtti)]]&lt;br /&gt;
&lt;br /&gt;
===Informations RTTI de C++===&lt;br /&gt;
&lt;br /&gt;
*[[Identification de type à l&amp;#039;exécution (RTTI) - Index|Identification de type à l&amp;#039;exécution (RTTI) - Index]]&lt;br /&gt;
*[[Typeid|typeid]] (mot clé)&lt;br /&gt;
*[[Rtti et option -RT|__rtti et option -RT]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Référence C++]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:RTTI]]&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
			<pubDate>Fri, 09 Oct 2026 17:05:24 GMT</pubDate>
			<dc:creator>Yukikoi</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Delphi_RTTI_et_C%2B%2BBuilder</comments>
		</item>
		<item>
			<title>Accueil</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Accueil&amp;diff=223395&amp;oldid=222223</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Accueil&amp;diff=223395&amp;oldid=222223</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 9 octobre 2026 à 15:13&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l8&quot;&gt;Ligne 8 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 8 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*  [[Notes de release|Notes de release]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*  [[Notes de release|Notes de release]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*  [[13 Florence - Release 1]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*  [[13 Florence - Release 1]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*  [[13 Florence - Release 2]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*  [[rad_en: Community Edition|Community Edition]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*  [[rad_en: Community Edition|Community Edition]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Fri, 09 Oct 2026 15:13:25 GMT</pubDate>
			<dc:creator>Eric.revollo</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Accueil</comments>
		</item>
		<item>
			<title>Nouveautés</title>
			<link>https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Nouveaut%C3%A9s&amp;diff=223394&amp;oldid=0</link>
			<guid isPermaLink="false">https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Nouveaut%C3%A9s&amp;diff=223394&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/RADStudio/Florence/f/index.php?title=Utilisateur:Eric.revollo&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:Eric.revollo (page inexistante)&quot;&gt;&lt;bdi&gt;Eric.revollo&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/RADStudio/Florence/fr/Nouveaut%C3%A9s&quot; title=&quot;Nouveautés&quot;&gt;Nouveautés&lt;/a&gt; par téléversement de fichier (1 version)&lt;/p&gt;
&lt;a href=&quot;https://docwiki.embarcadero.com/RADStudio/Florence/f/index.php?title=Nouveaut%C3%A9s&amp;amp;diff=223394&quot;&gt;Voir les modifications&lt;/a&gt;</description>
			<pubDate>Fri, 09 Oct 2026 15:12:49 GMT</pubDate>
			<dc:creator>Eric.revollo</dc:creator>
			<comments>https://docwiki.embarcadero.com/RADStudio/Florence/fr/Discussion:Nouveaut%C3%A9s</comments>
		</item>
</channel></rss>