<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog de dsr57 - Windev &#187; Windev 17</title>
	<atom:link href="https://blog.developpez.com/dsr57/pcategory/windev-17/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/dsr57</link>
	<description>Blog sur l&#039;edi windev</description>
	<lastBuildDate>Thu, 04 Jun 2015 11:46:25 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Classes abstraites en Windev (version 18 et antérieur)</title>
		<link>https://blog.developpez.com/dsr57/p12601/windev/wd-18-classes-abstaites</link>
		<comments>https://blog.developpez.com/dsr57/p12601/windev/wd-18-classes-abstaites#comments</comments>
		<pubDate>Wed, 30 Apr 2014 20:07:43 +0000</pubDate>
		<dc:creator><![CDATA[dsr57]]></dc:creator>
				<category><![CDATA[POO]]></category>
		<category><![CDATA[Windev]]></category>
		<category><![CDATA[Windev 17]]></category>
		<category><![CDATA[Windev 18]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/dsr57/?p=270</guid>
		<description><![CDATA[Avant la version 19 (annoncée sur le site officiel le 04.10.2013), WinDev ne gérait pas explicitement les classes abstraites. Il était possible de les utiliser en modifiant l&#8217;accessibilité du constructeur de la classe de base. Cet article explique étapes par étapes comment déclarer une classe abstraite. Cela vous permettra d&#8217;utiliser cette notion de POO sans forcément upgrader votre version de WinDev. Un article expliquant comment mettre en place cette possibilité est disponible sur le site [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Avant la version 19 (annoncée sur le site officiel le 04.10.2013), WinDev ne gérait pas explicitement les classes abstraites. Il était possible de les utiliser en modifiant l&rsquo;accessibilité du constructeur de la classe de base. Cet article explique étapes par étapes comment déclarer une classe abstraite. Cela vous permettra d&rsquo;utiliser cette notion de POO sans forcément upgrader votre version de WinDev.</p>
<p>Un article expliquant comment mettre en place cette possibilité est disponible sur le site developpez.com : <a href="http://vformet.developpez.com/tutoriels/windev/2013/" title="classes abstraites en Windev (version antérieure à 19)" target="_blank">classes abstraites en WinDev (version antérieure à 19)</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Héritage en WinDev : BUG  ou subtilité du W-langage???</title>
		<link>https://blog.developpez.com/dsr57/p12254/windev/heritage-en-windev-bug</link>
		<comments>https://blog.developpez.com/dsr57/p12254/windev/heritage-en-windev-bug#comments</comments>
		<pubDate>Thu, 26 Sep 2013 19:48:47 +0000</pubDate>
		<dc:creator><![CDATA[dsr57]]></dc:creator>
				<category><![CDATA[Windev]]></category>
		<category><![CDATA[Windev 17]]></category>
		<category><![CDATA[BUG]]></category>
		<category><![CDATA[constructeur]]></category>
		<category><![CDATA[héritage]]></category>
		<category><![CDATA[objet]]></category>
		<category><![CDATA[poo]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/dsr57/?p=139</guid>
		<description><![CDATA[Dans ce billet, je vais évoquer la notion d&#8217;héritage sur l&#8217;EDI WinDev. Dans un premier temps je vais faire un rappel , pour ensuite construire un exemple simple, faire évoluer cet exemple dans les paragraphes qui suivent, et finaliser sur un &#8230; ou une &#8230;. Modification apportée le 11.12.2013 grâce à une précision de zechatdoc. L&#8217;Héritage c&#8217;est quoi ? L&#8217;héritage est un principe propre à la programmation orientée objet, permettant de créer une nouvelle classe [&#8230;]]]></description>
				<content:encoded><![CDATA[<div align="justified" style="text-indent: 1em">
Dans ce billet, je vais évoquer la notion d&rsquo;héritage sur l&rsquo;EDI WinDev. Dans un premier temps je vais faire un rappel , pour ensuite construire un exemple simple, faire évoluer cet exemple dans les paragraphes qui suivent, et finaliser sur un &#8230; ou une &#8230;.</p>
<p><em>Modification apportée le 11.12.2013 grâce à une précision de zechatdoc.</em>
</div>
<p><strong>L&rsquo;Héritage c&rsquo;est quoi ? </strong></p>
<div align="justified" style="text-indent: 1em">
L&rsquo;héritage est un principe propre à la programmation orientée objet, permettant de créer une nouvelle classe à partir d&rsquo;une classe existante. Une relation d&rsquo;héritage doit être utilisée lorsque la relation &laquo;&nbsp;est une sorte de&nbsp;&raquo; peut être appliquée entre deux classes. En WinDev, la mise est œuvre est simple au niveau du code puisque dans la déclaration de la classe il suffit de saisir &laquo;&nbsp;Hérite de&nbsp;&raquo; suivi du nom de la classe dont on souhaite hériter. A l&rsquo;intérieur de la nouvelle classe vous pouvez :
</div>
<p></p>
<ul>
<li>Utiliser les champs hérités de la classe de base ( selon leur visibilité).</li>
<li>Ajouter des nouveaux champs.</li>
<li>Utiliser une méthode héritée ( selon la visibilité).</li>
<li>Redéfinir une méthodes en la créant avec la même signature.</li>
<li>Surcharger une méthode en la créant avec un signature différente.</li>
<li>Ajouter une nouvelle méthode.</li>
<li>Ajouter un ou plusieurs constructeur.</li>
</ul>
<p><strong>L&rsquo;héritage par Windev par l&rsquo;exemple</strong></p>
<div align="justified" style="text-indent: 1em">
Pour évoquer la notion d&rsquo;héritage en WinDev, je vais construire un exemple. Un exemple bien construit permet d&rsquo;allier les explications théoriques et la pratique. Ce qui sera à mon avis, plus bénéfique, plus efficace que de longue phrase.
</div>
<p></p>
<ul>
<li>Définition de l&rsquo;exemple</li>
<ol>
Pour évoquer la notion d&rsquo;héritage en Windev, je vais créer deux classes<br />
<u>ac_voiture :</u> Classes pseudo abstraite (Cf un futur article sur les classes abstraites en windev) représentant une voiture.<br />
<u>pc_peugeot :</u> Classes héritant de ac_voiture représentant une voiture de marque &laquo;&nbsp;Peugeot&nbsp;&raquo;. </ol>
<p><u>Membres de la classe ac_voiture</u></p>
<ol>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PROTÉGÉE&nbsp; <br />
&nbsp; &nbsp; ls_marque est une chaîne<br />
&nbsp; &nbsp; ls_modele est une chaîne<br />
GLOBALE<br />
&nbsp; &nbsp; li_nbVoiture est un entier</div></div>
</ol>
<p>Les membres ont des propriétés en lecture/éciture</p>
<ol>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">//-----&amp;gt;Propriété <br />
PROCEDURE Marque() //Lecture<br />
RENVOYER :ls_marque<br />
<br />
PROCEDURE Marque(ps_marque est une chaîne) //Ecriture<br />
:ls_marque = ps_marque <br />
<br />
PROCEDURE Modele() //Lecture<br />
RENVOYER :ls_modele<br />
<br />
PROCEDURE Modele(ps_modele est une chaîne) //Ecriture<br />
:ls_modele = ps_modele</div></div>
</ol>
<p><u>Membres de la classe pc_peugeot</u></p>
<ol>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">hérite de ac_voiture<br />
PRIVÉE<br />
&nbsp; &nbsp; lb_moteurHdi est un booléen</div></div>
</ol>
<p>Le membre a des propriétés en lecture/écriture</p>
<ol>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PROCEDURE moteurHdi() //Lecture<br />
RENVOYER :lb_moteurHdi<br />
<br />
PROCEDURE moteurHdi(pb_moteurHdi est un booléen) //Ecriture<br />
:lb_moteurHdi = pb_moteurHdi</div></div>
</ol>
<li>Constructeur sans paramètre</li>
<div align="justified" style="text-indent: 1em">
Pour continuer notre exemple, nous allons créer le constructeur par défaut (Constructeur sans paramètre) pour chacune des classes.
</div>
<p><u>Constructeur ac_voiture</u></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PROCEDURE PROTÉGÉ Constructeur()<br />
//----&amp;gt;Pas de code</div></div>
<p><u>Constructeur pc_peugeot</u></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PROCEDURE Constructeur()<br />
Ancêtre:Constructeur()</div></div>
<div align="justified" style="text-indent: 1em">
La première ligne fait appel au constructeur de la classe de base, WinDev n&rsquo;oblige pas cet appel et ne l&rsquo;effectue pas automatiquement (Cf langage JAVA), mais pour des questions de maintenance, de lisibilité et de compréhension, j&rsquo;effectue toujours cet appel.
</div>
<p></p>
<li>Programme principale</li>
<p>Dans le code d’initialisation de la fenêtre je vais instancier un objet de type pc_peugeot.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">lo_peugeot est un pc_peugeot()</div></div>
<li>Constructeur avec paramètres. </li>
<div align="justified" style="text-indent: 1em">
Dans cette étape je supprime les constructeurs par défaut et supprime l&rsquo;accès en écriture des membres. Je re-code des constructeurs en passant en paramètre les valeurs initialisation des membres. De cette façon, je force l&rsquo;initialisation des membres de la classe par le constructeur.
</div>
<p><u>Constructeur de la classe ac_voiure</u></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PROCEDURE PROTÉGÉE &nbsp;Constructeur(ps_marque est une chaîne,ps_modele est une chaîne)<br />
<br />
:ls_marque=ps_marque<br />
:ls_modele=ps_modele</div></div>
<p><u>Constructeur de la classe pc_peugeot</u></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PROCEDURE Constructeur(ps_marque est une chaîne,ps_modele est une chaîne, pb_hdi est un booléen)<br />
<br />
Ancêtre:Constructeur(ps_marque,ps_modele)<br />
:lb_moteurHdi=pb_hdi</div></div>
<p>Au niveau de mon code principal, j&rsquo;effectue certaines modification :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">lo_peugeot est un pc_peugeot(&quot;Peugeot&quot;,&quot;308&quot;,Vrai)</div></div>
<p>Le code se compile, mais j&rsquo;ai une erreur lors de l&rsquo;exécution.</p>
<blockquote><p>Erreur à la ligne 0 du traitement Constructeur de la classe pc_peugeot.<br />
Les paramètres d&rsquo;appel du code &lsquo;Constructeur de la classe ac_voiture&rsquo; sont incorrects : on attendait 2 paramètres et on en a reçu 0.
</p></blockquote>
<p>Apres quelques recherches, j&rsquo;ai isolé la ligne de code qui posait problème </p>
<blockquote><p>hérite de ac_voiture</p></blockquote>
<div align="justified" style="text-indent: 1em">
Si je traduis l&rsquo;erreur de WinDev, à cette ligne de code, WinDev attend les 2 paramètres du constructeur de la classe ac_voiture. Cela veut dire que quand je déclare un objet de type pc_peugeot. Avant même que le constructeur de la classe instanciée soit appelé, le constructeur de la classe de base est appelé. Pour vérifier cette hypothèse, je vais ajouter une ligne trace dans le constructeur de la classe ac_voiture et recréer le constructeur par défaut (Pour ne pas avoir l&rsquo;erreur d&rsquo;exécution).
</div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PROCEDURE PROTÉGÉE &nbsp;Constructeur(ps_marque est une chaîne,ps_modele est une chaîne)<br />
<br />
:ls_marque=ps_marque<br />
:ls_modele=ps_modele<br />
<br />
Trace(&quot;Marque : &quot;+:ls_marque+&quot; - Modele : &quot;+:ls_modele)</div></div>
<p></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PROCEDURE PROTÉGÉE Constructeur()<br />
<br />
Trace(&quot;Marque : &quot;+:ls_marque+&quot; - Modele : &quot;+:ls_modele)</div></div>
<p><u>Le résultat de la trace</u></p>
<blockquote><p>Marque :  &#8211; Modele :<br />
Marque : Peugeot &#8211; Modele : 308
</p></blockquote>
<div align="justified" style="text-indent: 1em">
Mon hypothèse est validée, lors de l&rsquo;instanciation d&rsquo;un objet héritant d&rsquo;une classe de base, Windev appelle automatiquement le constructeur de la classe de base. Ce qui me pose problème, c&rsquo;est que cet appel n&rsquo;est pas effectué dans le constructeur, mais lors de la liaison d&rsquo;héritage : Hérite de ac_voiture.
</div>
</ul>
<p><strong>Conséquences &#8230;</strong></p>
<div align="justified" style="text-indent: 1em">
A première vue, on pourrait conclure que cet appel prématuré n&rsquo;a pas de conséquence sur le bon déroulement d&rsquo;une application. Pour simplifier la compréhension et les conséquences, nous reprenons notre exemple à l&rsquo;étape des constructeurs par défaut (Cf Paragraphe Constructeur sans paramètre), cela évite la multiplication des constructeurs. Nous avons donc un constructeur pour chaque classe </p>
</div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Constructeur ac_voiture<br />
<br />
PROCEDURE PROTÉGÉ Constructeur()<br />
//----&amp;gt;Pas de code</div></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Constructeur pc_peugeot<br />
<br />
PROCEDURE Constructeur()<br />
Ancêtre:Constructeur()</div></div>
<div align="justified" style="text-indent: 1em">
Après le rappel de ces constructeurs nous allons ajouter pour chacune des classes un membre statique permettant de connaître le nombre de voitures et le nombre de Peugeots dans notre application.
</div>
<blockquote><p>Rappel : Les membres statiques sont des champs ou méthodes qui sont accessibles par la classe elle même ou par toutes les instances de la classe. on parle également de membres partagés. Ils son très utiles lorsque vous avez à gérer dans une classe des informations qui ne sont pas spécifique à une instance de classe mais à la classe elle même.
</p></blockquote>
<p><u>Classe ac_voiture</u></p>
<p>Ajout du membre statique li_nbvoiture, déclaration de la classe</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ac_voiture est une Classe<br />
PROTÉGÉE&nbsp; <br />
&nbsp; &nbsp; ls_marque est une chaîne<br />
&nbsp; &nbsp; ls_modele est une chaîne<br />
GLOBALE<br />
&nbsp; &nbsp; li_nbVoiture est un entier<br />
FIN</div></div>
<p>Propriété en lecture pour le membre li_nbVoiture</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PROCEDURE GLOBALE NbVoiture()<br />
<br />
RENVOYER ::li_nbVoiture</div></div>
<p>Modification du constructeur (Par défaut) pour incrémenter le membre statique</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PROCEDURE PROTÉGÉE Constructeur()<br />
<br />
::li_nbVoiture++</div></div>
<p><u>Classe pc_peugeot</u> </p>
<p>Ajout du membre statique li_nbPeugeot</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Déclaration de la classe<br />
<br />
pc_peugeot est une Classe<br />
hérite de ac_voiture<br />
PRIVÉE<br />
&nbsp; &nbsp; lb_moteurHdi est un booléen<br />
GLOBALE<br />
&nbsp; &nbsp; li_nbPeugeot est un entier<br />
FIN</div></div>
<p>Propriété en lecture pour le membre li_nbPeugeot</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PROCEDURE GLOBALE NbPeugeot<br />
<br />
RENVOYER ::li_nbPeugeot</div></div>
<p>Modification du constructeur (Par défaut) pour incrémenter le membre statique</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PROCEDURE Constructeur()<br />
<br />
Ancêtre:Constructeur()<br />
::li_nbPeugeot++</div></div>
<p>
Nous venons de terminer l&rsquo;ajout des membres statiques à nos classes, maintenant nous allons modifier le code principale pour avoir afficher dans une trace le nombre de voiture et le nombre de peugeot instancié.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">lo_peugeot est un pc_peugeot()<br />
<br />
Trace(&quot;Voiture : &quot;+pc_peugeot.NbVoiture+&quot; &nbsp; - &nbsp;Peugeot : &quot;+pc_peugeot.nbPeugeot)</div></div>
<p>Résultat de la trace : </p>
<blockquote><p>Voiture : 2   &#8211;  Peugeot : 1</p></blockquote>
<p>J&rsquo;obtiens 2 voitures dont une Peugeot alors que je n&rsquo;ai instancier qu&rsquo;un seul objet. </p>
<p>Voila une des conséquences des appels prématurés automatiques, les données du programme sont erronées.<br />
Ensuite je vais aussi insister sur le faite que nous sommes obligés d&rsquo;avoir un constructeur par défaut dans la classe de base pour pouvoir mettre en place un héritage. </p>
<p><strong>La subtilité </strong></p>
<div align="justified" style="text-indent: 1em">
Dans les lignes de code que je viens de vous soumettre, je n&rsquo;ai pas utilisé grand chose en concept : héritage, variable statique, et appel d&rsquo;un constructeur de la classe parent. C&rsquo;est dans ce dernier qu&rsquo;intervient la subtilité pour ne pas avoir les conséquences il ne faut pas utiliser le mot ancêtre. Il faut remplacer la ligne (classe pc_voiture)</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ancetre:constructeur(ps_marque,ps_modele)</div></div>
<p>par</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Constructeur ac_voiture(ps_marque,ps_modele)</div></div>
<p>et supprimer le constructeur par défaut de ac_coiture</p>
<p>Merci zechatdoc pour m&rsquo;avoir donner cette précision, même si pour moi la programmation est exactement la même en therme d&rsquo;approche mais le résultat diffère et devient juste.
</p></div>
<p><strong>Conclusion</strong></p>
<div align="justified" style="text-indent: 1em">
Nous venons de voir la notion d&rsquo;héritage en Windev avec un subtilité windevienne, comme PC-SOFT sait le faire. Je trouve cela dommage car cela nuit à son image et impacte par liaison directe les développeurs Windev. Je comprend que Windev veuille mettre à la porter de plus de personne la programmation, mais s&rsquo;il vous plait, esssayer de respecter quand même une certaine logique et arrêter les tours de passe passe.
</div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
