<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1641451758379613344</id><updated>2024-08-31T21:33:29.435-07:00</updated><title type='text'>Tutorial windev</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://windev15.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1641451758379613344/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://windev15.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>alltips</name><uri>http://www.blogger.com/profile/14375765100631168219</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1641451758379613344.post-1268976475666236786</id><published>2010-02-16T06:37:00.002-08:00</published><updated>2010-02-16T07:04:29.232-08:00</updated><title type='text'>Le champ Webcam</title><content type='html'>&lt;h1 class=&quot;TitreSection0&quot; id=&quot;L0&quot;&gt;0. Introduction&lt;/h1&gt;              &lt;div class=&quot;paragraph&quot;&gt;Quel intérêt pédagogique peut-il y avoir à utiliser le champ Webcam ? En fait, ce support va montrer à travers un exemple ludique l&#39;utilisation d&#39;une Webcam pour faire de la détection d&#39;état. &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;À travers cet exemple, plusieurs thèmes vont être abordés : la création de fichiers image, l&#39;utilisation de fonctions de dessins, l&#39;utilisation du RVB, la création de fichiers de configuration.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Cet applicatif va être utile pour savoir si une zone de couleur définie est présente. Les usages détournés peuvent être : &lt;/div&gt;&lt;br /&gt;      &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;La détection de mouvement.&lt;/li&gt;&lt;li&gt;Vérifier si un bouchon est présent sur une ligne d&#39;embouteillage.&lt;/li&gt;&lt;li&gt;Etc.&lt;/li&gt;&lt;/ul&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Pour réaliser cet exemple, l&#39;utilisation de la méthodologie objet aurait pu être envisagé, j&#39;ai préféré revenir sur le procédural. Le lecteur motivé pourra regrouper les procédures dans des classes s&#39;il le désire à titre d&#39;&#39;approfondissement.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Ce projet se nommera Webcam, et n&#39;aura pas d&#39;analyse. Il y aura 2 fenêtres :&lt;/div&gt;&lt;br /&gt;      &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;Départ (la fenêtre initiale de l&#39;application)&lt;/li&gt;&lt;li&gt;Param ( la fenêtre de paramétrage).&lt;/li&gt;&lt;/ul&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Le but de cette application est de faire prendre à la webcam un cliché initial qui servira d&#39;étalon, de sélectionner sur l&#39;étalon la zone dont on va ensuite tester la présence.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br style=&quot;page-break-after:always;&quot; /&gt; &lt;br /&gt;        &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LI&quot;&gt;I. Les écrans : &lt;/h1&gt;             &lt;br /&gt;&lt;h2 class=&quot;TitreSection1&quot; id=&quot;LI-A&quot;&gt;I-A. Voici la première fenêtre nommée départ :&lt;/h2&gt;                  &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/windev-webcam/images/image1.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;A droite la zone de la webcam, à gauche le cliché.&lt;/div&gt;&lt;br /&gt;            &lt;br /&gt;&lt;h2 class=&quot;TitreSection1&quot; id=&quot;LI-B&quot;&gt;I-B. Voici le second écran nommé param :&lt;/h2&gt;                  &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/windev-webcam/images/image2.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;                &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LII&quot;&gt;II. La conception&lt;/h1&gt;             &lt;br /&gt;&lt;h2 class=&quot;TitreSection1&quot; id=&quot;LII-A&quot;&gt;II-A. Voici l&#39;écran &quot;Départ&quot; en mode conception :&lt;/h2&gt;                  &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/windev-webcam/images/image3.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;La fenêtre à comme dimension : 676x410.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;Pour connaître ou modifier les dimensions données ici, regardez en bas à droite de l&#39;éditeur WinDev :&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/windev-webcam/images/image4.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;On trouve comme info :&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;Le nom de la fenêtre.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;La position relative de l&#39;objet dans la fenêtre.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;La taille de l&#39;objet.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;Le plan dans lequel il se trouve.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Pour changer les dimensions vous pouvez modifier directement les valeurs. Commencer par modifier les valeurs de la fenêtre départ&lt;/div&gt;&lt;br /&gt;        &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;           &lt;tbody&gt;&lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;               &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/windev-webcam/images/image5.wmf&quot; alt=&quot;&quot; /&gt;             &lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Si vous voulez réécrire la taille le signe de la multiplication est la lettre X et non l&#39;étoile de la multiplication.&lt;/td&gt;           &lt;/tr&gt;         &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Voici les caractéristiques de tous les objets :&lt;/div&gt;&lt;br /&gt;        &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;           &lt;tbody&gt;&lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Type de champ&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Nom&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Libelle&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Position relative&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Taille&lt;/td&gt;           &lt;/tr&gt;           &lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Libelle&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Par défaut&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Source&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;6,6&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;324X309&lt;/td&gt;           &lt;/tr&gt;           &lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Libelle&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Par défaut&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Capture&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;336,6&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;324X309&lt;/td&gt;           &lt;/tr&gt;           &lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Champ de saisie&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;EtatObjet&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Aucun&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;209,336&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;250X26&lt;/td&gt;           &lt;/tr&gt;           &lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Champ Créer une image&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Source&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Aucun&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;12,26&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;310X242&lt;/td&gt;           &lt;/tr&gt;           &lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Champ Web Caméra&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Capture&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Aucun&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;343,26&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;310X242&lt;/td&gt;           &lt;/tr&gt;           &lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bparam&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Paramètrage&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;13,284&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;80X24&lt;/td&gt;           &lt;/tr&gt;           &lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bcapture&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Capture&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;243,284&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;80X24&lt;/td&gt;           &lt;/tr&gt;           &lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Btest&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Test&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;448,284&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;80X24&lt;/td&gt;           &lt;/tr&gt;           &lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Champ Créer une image&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Cible&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Aucun&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;691,-13&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;310X242&lt;/td&gt;           &lt;/tr&gt;         &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Placez les objets et normalement si vous respectez les consignes votre fenêtre ressemblera à celle représentée en haut de cette page.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Le champ webcam doit être &quot;branché&quot; sur votre Webcam, vous allez le faire manuellement en cliquant avec le bouton droit sur le champ. Choisissez description puis dans l&#39;onglet général faites apparaître votre Webcam dans la combo &quot;Webcam utilisée&quot;&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Maintenant, voyons le code de cet écran :&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Lorsque l&#39;application se lance s&#39;il y a déjà eu une image &quot;&lt;b&gt;étalon&lt;/b&gt;&quot; nous allons faire en sorte qu&#39;elle s&#39;affiche dans sa zone image. &lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Dans la zone de code d&#39;initialisation de la fenêtre départ saisissez ceci :&lt;/div&gt;         &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e463&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e463&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e463&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e463&quot; class=&quot;contenuCode&quot;&gt;source=&quot;etalon.jpeg&quot;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Voici le code du bouton &lt;b&gt;Bcapture &lt;/b&gt;: &lt;/div&gt;         &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e474&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e474&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e474&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e474&quot; class=&quot;contenuCode&quot;&gt;dSauveImageJPEG(capture,&quot;etalon.jpeg&quot;)&lt;br /&gt;source=&quot;&quot;&lt;br /&gt;source=&quot;etalon.jpeg&quot;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;La fonction dSauveImageJpeg gele le contenu du champ Webcam &quot;&lt;b&gt;capture&lt;/b&gt;&quot; et l&#39;enregistre sous &quot;&lt;b&gt;etalon.jpeg&lt;/b&gt;&quot;.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;L&#39;instruction suivante enlève le contenu du champ image &quot;&lt;b&gt;source&lt;/b&gt;&quot;&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;L&#39;instruction d&#39;après mets l&#39;image &quot;&lt;b&gt;etalon.jpeg&lt;/b&gt;&quot; dans le champ &quot;&lt;b&gt;source&lt;/b&gt;&quot;&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Voici le code du bouton &lt;b&gt;Btest&lt;/b&gt; :&lt;/div&gt;         &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e511&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e511&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e511&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e511&quot; class=&quot;contenuCode&quot;&gt;dSauveImageJPEG(capture,&quot;test.jpeg&quot;)&lt;br /&gt;cible=&quot;&quot;&lt;br /&gt;cible=&quot;test.jpeg&quot;&lt;br /&gt;Compare&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Vous avez surement vu que je vous ai fait placer une zone image hors fenêtre ? Ce champ image va nous servir au test de comparaison.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Donc, le code du bouton &lt;b&gt;Btest&lt;/b&gt; fait prendre un cliché appelé &quot;&lt;b&gt;test.jpeg&lt;/b&gt;&quot;, l&#39;affecte au champ image &quot;&lt;b&gt;cible&lt;/b&gt;&quot; et lance la procédure de comparaison.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Voyons de suite le contenu de cette procédure compare. Créez une procédure locale nommée compare dont voici le code :&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;image&quot; style=&quot;text-align: left;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/windev-webcam/images/image6.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;J&#39;en vois qui, rien qu&#39;a la lecture de ce code, claquent des dents, il y en même qui s&#39;évanouissent !&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Je vous rappelle le principe du programme.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;La fenêtre &quot;&lt;b&gt;param&lt;/b&gt;&quot; va vous permettre de sélectionner une zone rectangulaire de test, nous aurons donc 4 points (X1,X2,Y1,Y2)&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/windev-webcam/images/image7.png&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Comme nous ferons des recherches sur les couleurs il faut pouvoir donner un pourcentage (c&#39;est grâce au champ potentiomètre de la fenêtre &quot;param&quot; ) de spectre rouge acceptable, idem pour le vert et le bleu. C&#39;est pour cette raison que vous verrez des limites bleu-, bleu+ .etc.. &lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;          &lt;span style=&quot;text-decoration: underline;&quot;&gt;Voyons les variables :&lt;/span&gt;         &lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;           &lt;b&gt;Resultante&lt;/b&gt; est un entier qui contiendra le code couleur d&#39;un pixel situé à un point (x,y) de la zone image cible et qui servira pour le test de comparaison avec l&#39;image étalon.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;          &lt;b&gt;X1,X2,Y1,Y2&lt;/b&gt; sont des entiers qui contiennent les points définissants la zone rectangulaire.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;           &lt;b&gt;Letableau&lt;/b&gt; est un tableau qui contient les limites couleur RVB&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;           &lt;b&gt;Trouve&lt;/b&gt; est un booléen qui nous indiquera si les couleurs recherchées sont toutes trouvées.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;On va placer dans les variables X1,X2,Y1,Y2 les points définissants notre zone rectangulaire de test. Ces points sont dans un fichier Ini nommé ParametresW.ini.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;Pour avoir une idée du fonctionnement de INITLit ouvrez l&#39;aide.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;Le tableau va être rempli avec les valeurs couleur limites.&lt;/div&gt;         &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e606&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e606&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e606&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e606&quot; class=&quot;contenuCode&quot;&gt;TANTQUE x1&lt;x2&lt;br /&gt;resultante=dPixelCouleur(cible,x1,y1)&lt;br /&gt;trouve=Spectre(resultante,letableau)&lt;br /&gt;x1+=1&lt;br /&gt;y1+=1&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Les plus rapides ont-ils compris ce que fait ce code ? Pour les autres voici une explication. En fait, on va tracer une diagonale dans notre zone rectangulaire, point par point. Pour chaque point on relève sa couleur dans la variable &lt;b&gt;résultante&lt;/b&gt;. Cette variable résultante est passée dans la procédure globale &lt;b&gt;Spectre&lt;/b&gt; qui contrôle si la couleur est comprise dans les limites RVB de références.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Selon le résultat du booléen &lt;b&gt;trouve&lt;/b&gt;, on affiche un message dans la zone EtatObjet.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Voici le code de la procédure globale &quot;&lt;b&gt;Spectre&lt;/b&gt;&quot; :&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/windev-webcam/images/image8.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;          &lt;b&gt;Explication du code :&lt;/b&gt;         &lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Pour trouver la valeur RGB comprise dans l&#39;entier renvoyé par la fonction DpixelCouleur on est obligé d&#39;effectuer certains calculs. &lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;Ainsi pour avoir la dominante Rouge on effectue le calcul suivant l&#39;entier couleur modulo 256.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Dans le tableau nous avons nos limites par couleur. Le but est de voir si la couleur récupéree est comprise entre ces 2 valeurs du tableau.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Nous avons un booléen qui selon son état indiquera si la couleur est dans les limites.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Vous aurez une vue d&#39;ensemble lorsque la fenêtre&lt;b&gt; param&lt;/b&gt; aura été vue.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Voyons le code du bouton &lt;b&gt;Bparam&lt;/b&gt; : &lt;/div&gt;         &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e680&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e680&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e680&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e680&quot; class=&quot;contenuCode&quot;&gt;Ouvre(Param)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;             &lt;br /&gt;&lt;h2 class=&quot;TitreSection1&quot; id=&quot;LII-B&quot;&gt;II-B. Maintenant que tout le code de la fenêtre départ est décrit passons à la fenêtre Param.&lt;/h2&gt;                  &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/windev-webcam/images/image9.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;La fenêtre a les dimensions suivantes : 660X320&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Voici le tableau de positionnement :&lt;/div&gt;&lt;br /&gt;        &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;           &lt;tbody&gt;&lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Type de champ&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Nom&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Libelle&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Position relative&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Taille&lt;/td&gt;           &lt;/tr&gt;           &lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Champ image&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Mire&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Source&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;5,5&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;310X242&lt;/td&gt;           &lt;/tr&gt;           &lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Selection&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Capture&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;336,6&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;324X309&lt;/td&gt;           &lt;/tr&gt;           &lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Enregistre&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Enregistrer les variables d&#39;étalonnages&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;365,161&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;219X24&lt;/td&gt;           &lt;/tr&gt;           &lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Potentiometre&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Par défaut&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt; &lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;335,26&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;290X38&lt;/td&gt;           &lt;/tr&gt;           &lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Libelle&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Par défaut&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Potentiometre d&#39;imprécision&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;328,6&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;304X66&lt;/td&gt;           &lt;/tr&gt;           &lt;tr&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Champ de saisie&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Nomdezone&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Nom de la zone sélectionnée :&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;328,78&lt;/td&gt;             &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;297X22&lt;/td&gt;           &lt;/tr&gt;         &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Vous devez avoir maintenant une fenêtre ressemblante à celle présentée ci-dessus.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Dans la zone de déclaration globale de la fenêtre inscrivez ceci : &lt;/div&gt;         &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e839&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e839&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e839&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e839&quot; class=&quot;contenuCode&quot;&gt;rescouleur,Crouge,Cvert,Cbleu sont des entiers&lt;br /&gt;Lex,ley sont des entiers&lt;br /&gt;letab est un tableau de 6 entiers&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Le potentiomètre va nous servir pour avoir un pourcentage dans la couleur sélectionnée. Par exemple, si l&#39;utilisateur a cliqué dans un rouge de code RVB 200 et que la valeur retournée par le potentiomètre soit 10, on appliquera 10 % de plus à 200 pour la couleur la plus haute et -10% pour avoir l&#39;intervalle bas. &lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;Ces 2 valeurs seront ensuite enregistrées dans un tableau.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Voici le descriptif du potentiomètre :&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;Faites un clic droit dessus et choisissez &quot;&lt;b&gt;Description&lt;/b&gt;&quot; ensuite l&#39;onglet &quot;&lt;b&gt;Détail&lt;/b&gt; &quot;. Dans la zone &lt;b&gt;valeur initiale&lt;/b&gt; mettez 10, dans la &lt;b&gt;valeur minimale&lt;/b&gt; mettez &lt;b&gt;0&lt;/b&gt; et &lt;b&gt;100&lt;/b&gt; pour la &lt;b&gt;maximale&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Voici le code du bouton sélection :&lt;/div&gt;         &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e884&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e884&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e884&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e884&quot; class=&quot;contenuCode&quot;&gt;Mire..CurseurSouris = curCroix&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Comme vous le voyez, ce code ne fait pas grand-chose, il fait en sorte que le curseur de survol de l&#39;image soit une croix.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Voyons maintenant comment s&#39;opère la sélection d&#39;une zone couleur. Pour pouvoir capturer une zone, il faut que l&#39;utilisateur clique dans l&#39;image. Le code sera donc dans la partie clic de la zone image. Le voici :&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/windev-webcam/images/image10.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Il faut donc qu&#39;à chaque clic le système nous délimite une zone couleur sur l&#39;image étalon, pour éviter de superposer les rectangles de sélection à chaque clic l&#39;image de base est réécrite dans la zone image. &lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;C&#39;est le rôle de la première ligne.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Ensuite nous récupérons la position exacte de la souris lors du clic.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;Puis nous récupérons la valeur couleur du pixel situé à la position de la souris.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;Nous calculons les Valeurs RVB.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;Il nous faut ensuite remplir le tableau des valeurs couleur du point cliqué. C&#39;est la fonction Spectre_origine qui s&#39;en charge.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;Voici son code : &lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/windev-webcam/images/image11.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Ce code ne sert qu&#39;à remplir un tableau de valeurs correspondantes à un entier sur lequel on applique un pourcentage donné par le potentiomètre.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Voyons maintenant la fonction CalculZone. &lt;/div&gt;         &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e936&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e936&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e936&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e936&quot; class=&quot;contenuCode&quot;&gt;PROCEDURE calculzone(posx,posy,letableau)&lt;br /&gt;Pxd,pxg,pyb,pyh sont des entiers&lt;br /&gt;trouve est un booléen=Vrai&lt;br /&gt;&lt;br /&gt;Pxd=posx&lt;br /&gt;pxg=posx&lt;br /&gt;pyb=posy&lt;br /&gt;pyh=posy&lt;br /&gt;&lt;br /&gt;dDébutDessin(Mire)&lt;br /&gt;&lt;br /&gt;// on recherche une zone rectangulaire comportant cette couleur&lt;br /&gt;// on commence par les x vers la droite&lt;br /&gt;&lt;br /&gt;TANTQUE trouve&lt;br /&gt;SI Spectre(dPixelCouleur(Mire, Pxd, posy),letableau) ALORS&lt;br /&gt;Pxd=Pxd+1&lt;br /&gt;SINON&lt;br /&gt;trouve=Faux&lt;br /&gt;FIN&lt;br /&gt;FIN&lt;br /&gt;&lt;br /&gt;// on continue les x vers la gauche&lt;br /&gt;trouve=Vrai&lt;br /&gt;TANTQUE trouve&lt;br /&gt;SI Spectre(dPixelCouleur(Mire, pxg, posy),letableau) ALORS&lt;br /&gt;pxg=pxg-1&lt;br /&gt;SINON&lt;br /&gt;trouve=Faux&lt;br /&gt;FIN&lt;br /&gt;FIN&lt;br /&gt;&lt;br /&gt;// on cherche y vers le bas&lt;br /&gt;trouve=Vrai&lt;br /&gt;TANTQUE trouve&lt;br /&gt;SI Spectre(dPixelCouleur(Mire, posx, pyb),letableau)ALORS&lt;br /&gt;pyb=pyb+1&lt;br /&gt;SINON&lt;br /&gt;trouve=Faux&lt;br /&gt;FIN&lt;br /&gt;FIN&lt;br /&gt;&lt;br /&gt;// on cherche y vers le haut&lt;br /&gt;trouve=Vrai&lt;br /&gt;&lt;br /&gt;TANTQUE trouve&lt;br /&gt;SI Spectre(dPixelCouleur(Mire, posx, pyh),letableau) ALORS&lt;br /&gt;pyh=pyh-1&lt;br /&gt;SINON&lt;br /&gt;trouve=Faux&lt;br /&gt;FIN&lt;br /&gt;FIN&lt;br /&gt;&lt;br /&gt;INIEcrit(&quot;Points&quot;,&quot;X1&quot;,NumériqueVersChaîne(pxg),fRepEnCours()+&quot;\ParametresW.ini&quot;)&lt;br /&gt;INIEcrit(&quot;Points&quot;,&quot;Y1&quot;,NumériqueVersChaîne(pyh),fRepEnCours()+&quot;\ParametresW.ini&quot;)&lt;br /&gt;INIEcrit(&quot;Points&quot;,&quot;X2&quot;,NumériqueVersChaîne(Pxd),fRepEnCours()+&quot;\ParametresW.ini&quot;)&lt;br /&gt;INIEcrit(&quot;Points&quot;,&quot;Y2&quot;,NumériqueVersChaîne(pyb),fRepEnCours()+&quot;\ParametresW.ini&quot;)&lt;br /&gt;&lt;br /&gt;dRectangle(pxg,pyh,Pxd,pyb,iTransparent,iNoir)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Cette fonction a un rôle important. Lorsque l&#39;on clique sur l&#39;image elle va essayer de trouver une zone rectangulaire comprise dans un spectre, plus ou moins le pourcentage, défini par la couleur de référence du clic. Une fois la zone couleur définie, les valeurs des points ayant servis à faire la zone rectangulaire sont mémorisées dans le fichier ini.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Maintenant voici le code du bouton enregistre :&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/windev-webcam/images/image12.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;         &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Ce code ne fait qu&#39;enregistrer les variables dans un fichier ini qui sera utilisé dans le code de la fenêtre départ pour interpréter l&#39;image.&lt;/div&gt;&lt;br /&gt;        &lt;div class=&quot;paragraph&quot;&gt;          &lt;br /&gt;Voilà le code est fini de saisir, vous pouvez essayer votre application. &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://windev15.blogspot.com/feeds/1268976475666236786/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://windev15.blogspot.com/2010/02/le-champ-webcam.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1641451758379613344/posts/default/1268976475666236786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1641451758379613344/posts/default/1268976475666236786'/><link rel='alternate' type='text/html' href='http://windev15.blogspot.com/2010/02/le-champ-webcam.html' title='Le champ Webcam'/><author><name>alltips</name><uri>http://www.blogger.com/profile/14375765100631168219</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1641451758379613344.post-4868519587449023747</id><published>2010-02-16T06:37:00.001-08:00</published><updated>2010-02-16T07:12:34.983-08:00</updated><title type='text'>Accès à des bases de données tierces (Mysql)</title><content type='html'>&lt;a href=&quot;http://wind.developpez.com/tutoriels/windev/windev-mysql/&quot; title=&quot;Accès à des bases de données tierces (Mysql)&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LI&quot;&gt;I. Présentation&lt;/h1&gt;              &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;         &lt;tbody&gt;&lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;b&gt;Objectifs&lt;/b&gt; : Accès à des bases de données tierces (Mysql)Langage Sql, Fonctions Sql de WinDev, gestion avancée des tree-view, des tables mémoire, des chaînes de caractères.&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;A l&#39;heure actuelle, les bases de données de type Clients/Serveurs ont la faveur de plus en plus d&#39;informaticiens. Une de ces bases se détache du lot, il s&#39;agit de Mysql. Cette base de donnée offre plusieurs avantages non négligeables.&lt;/div&gt;&lt;br /&gt;      &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;Elle est gratuite.&lt;/li&gt;&lt;li&gt;Elle est rapide&lt;/li&gt;&lt;li&gt;Elle est fiable.&lt;/li&gt;&lt;li&gt;Elle est &lt;b&gt;Multi-Plateforme&lt;/b&gt;.&lt;/li&gt;&lt;/ul&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Le fait qu&#39;elle existe sous plusieurs systèmes d&#39;exploitations est appréciable, en effet à l&#39;heure actuelle beaucoup de Fournisseurs d&#39;Accès Internet vous permettent de vous connecter à une base de donnée, dans la majorité des cas cette base de donnée est Mysql. Pourquoi la choisissent elles ? En fait, ils ont fait le choix du logiciel libre, donc le système d&#39;exploitation est Linux, comme les internautes utilisent de plus en plus le couple Php/Mysql, cette base de données était le choix technologique le plus évident à faire.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Maintenant imaginez la situation suivante : Vous êtes développeur dans une société qui a sur Internet un site où les clients peuvent passer des commandes. Le site utilise Php et Mysql, comment faire pour que votre logiciel commercial puisse récupérer les commandes directement dans la base de donnée Mysql qui est sur Internet ?&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;MainOrArchivePage&gt;&lt;br /&gt;&lt;br /&gt;   &lt;a href=&quot;&lt;$BlogItemPermalinkURL$&gt;&quot;&gt;Suite&lt;/a&gt;&lt;br /&gt;&lt;/MainOrArchivePage&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Je vous sens dubitatif ! Heureusement super Jean-Luc a la solution : Nous allons, ensemble, développer un logiciel de connexion à une base de donnée Mysql, créer des requêtes, récupérer les résultats...Elle n&#39;est pas belle la vie ? Mais cependant certaines mises en garde sont nécessaires :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Je vous rappelle qu&#39;il est inutile de faire ce &quot;mini lab&quot; sans maîtriser les &quot;mini lab&quot; précédents. Je ne reviens pas sur les notions abordées dans les supports précédents donc voici l&#39;adresse ou vous les trouverez  : &lt;a href=&quot;http://www.btsig.org/&quot; class=&quot;lienArticle&quot;&gt;www.btsig.org&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Pour le bon déroulement de ce support téléchargez et installez easyphp 1.6 que vous trouverez à l&#39;adresse suivante : &lt;a href=&quot;http://www.easyphp.org/&quot; class=&quot;lienArticle&quot;&gt;http://www.easyphp.org/&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Durant le Mini lab, prenez le temps de comprendre ce que vous faite, aucun apprentissage efficace ne peut avoir lieu si on se contente de copier ou imiter. Donc si vous vous sentez « largué », pas de souci, apprenez à faire marche arrière et relisez. Je fais toujours en sorte que les explications soient claires, mais n&#39;ayez pas honte de ne pas comprendre immédiatement, faites l&#39;effort et vous serez toujours récompensé. N&#39;oubliez pas l&#39;excellente aide de WinDev (vous savez 1 !)&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Durant cet exercice, vous avez le droit de faire des pauses ;-))&lt;/div&gt;&lt;br /&gt;      &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;         &lt;tbody&gt;&lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/windev-mysql/images/image1.wmf&quot; alt=&quot;j0252349&quot; /&gt;           &lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;b&gt;Attention :&lt;/b&gt; Si vous n&#39;êtes pas administrateur de votre ordinateur une librairie de Mysql ne s&#39;installera pas correctement, il s&#39;agit de libmysql.dll, de plus le serveur Mysql s&#39;arrêtera à la moindre tentative de connexion. &lt;b&gt;Autre point important &lt;/b&gt;: Si des erreurs récurrentes se produisent alors que votre code est propre et que vous utilisiez Easyphp, téléchargez la dll libmysql.dll directement chez Mysql.De plus, allez sur &lt;a href=&quot;http://www.pcsoft.fr/&quot; class=&quot;lienArticle&quot;&gt;www.pcsoft.fr&lt;/a&gt; dans la rubrique téléchargement pour télécharger l&#39;accès natif à Mysql&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Avant de commencer, vérifiez qu&#39;Easyphp est actif (Vous devez apercevoir un E noir avec un point rouge clignotant dans la barre des taches). S&#39;il n&#39;est pas en fonctionnement, vous ne pourrez pas accéder au serveur MySql. Je vous laisse lire la doc fournie avec pour le faire fonctionner, c&#39;est simple.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Nous allons maintenant entrer dans le vif du sujet. Créez un nouveau projet nommé TP6 qui ne comporte aucune analyse, normal puisque nous allons accéder à des données distantes. Ce projet comportera 2 fenêtres : Une orienté gestion de , l&#39;autre sur l&#39;édition de requêtes.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Voici le prototype de la première fenêtre que vous nommerez départ et qui sera la première fenêtre du projet.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/windev-mysql/images/image2.png&quot; alt=&quot;tp6-1&quot; /&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;        &lt;b&gt;En haut à gauche&lt;/b&gt; : Ici vous trouvez 4 champs de saisie nommés : &lt;b&gt;Numip&lt;/b&gt;, &lt;b&gt;Login&lt;/b&gt;, &lt;b&gt;Mdp&lt;/b&gt;, &lt;b&gt;Etatcnx&lt;/b&gt;. Un bouton nommé &lt;b&gt;Cnx&lt;/b&gt;. Ces champs sont dans un champ libellé de style « Libellé-Acheval_DoubleB », dont le libellé est : « Connexion au serveur Mysql »&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;         &lt;b&gt;En haut à droite&lt;/b&gt; : Ici, créez un champ arbre que vous nommerez &lt;b&gt;listebase&lt;/b&gt;. Vous pouvez l&#39;encadrer par un champ libellé.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;         &lt;b&gt;En bas&lt;/b&gt; : Attention, ici c&#39;est une table mémoire que vous nommerez &lt;b&gt;Table1&lt;/b&gt; dont toutes les colonnes sont invisibles. Dans cette table sera affiché le contenu des tables de votre base de donnée Mysql. L&#39;affichage est activé par un choix de table dans l&#39;arbre &lt;b&gt;listebase&lt;/b&gt;. Comme nous ne connaissons pas à priori le nombre de colonnes de la table a afficher nous allons employer une grosse ruse Cheyenne. On va créer une quinzaine de colonnes texte nommées c1,c2,c3...c15 et toutes invisible, capito ? Nous créerons l&#39;affichage par programmation plus tard&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;         &lt;b&gt;Les boutons&lt;/b&gt; : Insérez 2 boutons un nommé &lt;b&gt;Requete&lt;/b&gt;, l&#39;autre &lt;b&gt;Quitter&lt;/b&gt;. Je vous laisse trouver le code du bouton Quitter.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Maintenant que la scène est installée, voyons les comportements des objets et ce que l&#39;on attend d&#39;eux. Pour ce connecter à une base de donnée Mysql nous avons besoin de divers renseignements :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;L&#39;adresse Ip de l&#39;ordinateur où est située votre base de donnée Mysql. Si vous l&#39;avez sur votre ordinateur, plusieurs possibilités s&#39;offrent à vous, soit vous inscrirez dans ce champ l&#39;adresse ip de votre ordinateur, soit localhost, soit une adresse de bouclage ex : 127.0.0.1.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Le login : Si vous venez d&#39;installer votre base de donnée le login par défaut est : &lt;b&gt;root&lt;/b&gt;. Sinon demandez un login à votre administrateur réseau.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Le mot de passe : Si vous venez d&#39;installer Mysql sur votre poste le mot de passe par défaut n&#39;est pas défini, donc cette zone restera vide, sinon contactez votre administrateur si vous n&#39;en avez pas.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Donc, lorsque ces renseignements seront saisis nous essayerons de nous connecter à la base de donnée via le bouton de connexion, si la connexion réussie nous remplirons l&#39;arbre avec les bases Mysql et pour chaques bases, les tables constituantes. Dans le champ etatcnx nous mettrons un texte nous indiquant le succès de la connexion sinon l&#39;échec.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;On y va ?Vous avez placé tous les objets ? Votre fenêtre ressemble à la mienne ? Vous l&#39;avez enregistrée sous le nom de départ ? Vous l&#39;avez déclarez comme première fenêtre du projet ? Non ! ! Mais qu&#39;est-ce que vous faites ?&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Nous allons avoir besoins de 2 variables globales à la fenêtre, allez dans le code de la fenêtre et dans la zone « déclaration globale de départ » inscrivez ceci :&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e309&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e309&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e309&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e309&quot; class=&quot;contenuCode&quot;&gt;GLOBAL&lt;br /&gt;mabase,matable sont des chaînes&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Ces 2 variables doivent être connues ou vues par tous les objets de la fenêtre, c&#39;est pour cela que l&#39;on les déclare globales au plus haut dans le conteneur principal. &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;         &lt;b&gt;NB :&lt;/b&gt; Le mot clé global pourrait dans ce cas là être omis.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Intéressons nous maintenant au comportement du bouton de connexion. Son rôle est d&#39;établir une connexion avec la base de données Mysql. Il a besoin de l&#39;adresse ip de la base, du login et du mot de passe pour établir le contact.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voici son code :&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e333&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e333&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e333&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e333&quot; class=&quot;contenuCode&quot;&gt;resultat est un entier&lt;br /&gt;&lt;br /&gt;resultat=SQLConnecte(Numip,login,mdp,&quot;&quot;,&quot;MySQL&quot;)&lt;br /&gt;SI resultat=0 ALORS&lt;br /&gt;etatcnx=&quot;Votre serveur Mysql n&#39;a pas repondu&quot;&lt;br /&gt;SINON&lt;br /&gt;etatcnx=&quot;Votre connexion est active&quot;&lt;br /&gt;lesbases()&lt;br /&gt;FIN&lt;br /&gt;SQLDeconnecte()// Une fois les traitements fait, on se déconnecte&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;importante est SQLConnecte son rôle est de connecter l&#39;application en cours à une base de données à interroger par SQL. Pour cela elle a besoin de paramètre qui sont le contenu du champ Numip, de login, du mot de passe. Le 4eme paramètre est vide (les 2 apostrophes), il est dévolu au nom de la base de donnée souhaitée. Le 5eme paramètre est le type de base de données attaqué, dans notre cas MySQL. Appuyez sur F1 en étant positionné sur le mot SQLConnecte et regardez dans l&#39;aide toutes les bases de données susceptibles d&#39;être interfacées avec WinDev !&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Cette procédure retourne un entier qui vaut 0 si la connexion n&#39;a pas pu être établie (mauvaise adresse ip, mauvais login, mot de passe, serveur Mysql arrêté.etc.). Une bonne habitude à prendre est de tester la réussite ou l&#39;échec d&#39;une fonction. Donc, si resultat=0 on informe l&#39;utilisateur qu&#39;il y a un boulon dans le potage. Sinon c&#39;est que tout va bien : on fait afficher dans le champ de saisie etatcnx que la connexion est active. Pour alléger le code nous allons créer une procédure locale à la fenêtre que nous nommerons lesbase. Le rôle de cette procédure est de nous remplir l&#39;arbre avec les bases de données MySql et les tables les composants. Voyons son code :&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e346&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e346&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e346&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e346&quot; class=&quot;contenuCode&quot;&gt;PROCEDURE lesbases()&lt;br /&gt;resultat est un booléen&lt;br /&gt;&lt;br /&gt;resultat=SQLExec(&quot;show databases&quot;,&quot;requete1&quot;)&lt;br /&gt;&lt;br /&gt;SI resultat ALORS // L&#39;exécution de la requête est réussie&lt;br /&gt;TANTQUE SQLFetch(&quot;requete1&quot;) = 0  &lt;br /&gt;ArbreAjoute(listebase,&quot;Bases&quot;+TAB+ SQLLitCol(&quot;requete1&quot;, 1),aDéfaut,aDéfaut,SQLLitCol(&quot;requete1&quot;, 1))&lt;br /&gt;lestables(SQLLitCol(&quot;requete1&quot;, 1))&lt;br /&gt;FIN&lt;br /&gt;SQLFerme(&quot;requete1&quot;)&lt;br /&gt;ArbreDéroule(listebase,&quot;Bases&quot;)&lt;br /&gt;SINON&lt;br /&gt;Info(&quot;Vous avez un problème de connexion&quot;)&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Résultat est un booléen qui va recevoir le résultat d&#39;exécution de ci va exécuter la requête nommée « requete1 », dont le texte associé est « show databases » (cette commande Sql fait retourner l&#39;ensemble des bases de donnée présentent sur votre serveur MySql).Si la requête s&#39;exécute bien resultat vaut vrai sinon faux. &lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e354&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e354&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e354&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e354&quot; class=&quot;contenuCode&quot;&gt;TANTQUE SQLFetch(&quot;requete1&quot;) = 0  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Cette ligne de code peut vous paraître étonnante, en fait ne lance pas la récupération de toutes les lignes du résultat de la requête : seul l&#39;enregistrement en cours est récupéré par bizarre est que tant qu&#39;elle retourne 0 la lecture de l&#39;enregistrement s&#39;est bien passée. Il y a des fois où la logique n&#39;est plus de ce monde ! Mais ne nous laissons pas perturber par cette petite bizarrerie.. !&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt; crée un tree-view avec les éléments que l&#39;on va lui passer. &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Dans notre cas il faut remplir avec le contenu résultant de la requête précédente. En fait le résultat de la requête est, dans ce cas là, une table d&#39;une colonne contenant un nom de base par ligne.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;SQLFetch parcourt les lignes de la table et SQLLitcol(&quot;requete1&quot;, 1) lit pour la requête passée en paramètre, le contenu de la colonne passée aussi en paramètre (ici 1).&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Je vous laisse regarder l&#39;aide d&#39;ArbreAjoute et comparer avec le code, vous allez vite comprendre son fonctionnement. Nous allons donc créer un arbre affichant les bases de données disponibles, mais pour chaque base il nous faut aussi insérer dans l&#39;arbre les tables qui &#39;est le rôle de la procédure globale lestable que nous allons créer.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Comme vous le remarquez la procédure lestables prend comme paramètre le nom de la base de donnée contenu dans SQLLitCol(&quot;requete1&quot;, 1)&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Créez donc cette procédure&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e384&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e384&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e384&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e384&quot; class=&quot;contenuCode&quot;&gt;PROCEDURE lestables(labase)&lt;br /&gt;resultat est un booléen&lt;br /&gt;&lt;br /&gt;SQLConnecte(Numip,login,mdp,labase,&quot;MySQL&quot;)&lt;br /&gt;resultat=SQLExec(&quot;show tables&quot;,&quot;requete2&quot;)&lt;br /&gt;SI resultat ALORS&lt;br /&gt;TANTQUE SQLFetch(&quot;requete2&quot;) = 0  &lt;br /&gt;ArbreAjoute(listebase,&quot;Bases&quot;+TAB+ labase+TAB+SQLLitCol(&quot;requete2&quot;, 1),aDéfaut,aDéfaut,SQLLitCol(&quot;requete2&quot;, 1))&lt;br /&gt;FIN&lt;br /&gt;SQLFerme(&quot;requete2&quot;)&lt;br /&gt;ArbreDéroule(listebase,&quot;Bases&quot;+TAB+labase)&lt;br /&gt;FIN&lt;br /&gt;SQLDeconnecte()&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Comme vous pouvez le constater cette procédure récupère comme argument une chaîne de caractère (labase) contenant le nom de la base de donnée a traiter. Il faut ensuite se connecter à cette base de donnée (ligne 3) pour demander l&#39;ensemble des tables la constituant (ligne 4).Une fois la requête exécutée, si elle a fonctionné, tant que des lignes existent dans le contenu du résultat de la requête, on les ajoute au bon endroit dans le tree-view (l&#39;arbre). On ferme la requête avec on déroule l&#39;arbre pour des raisons esthétiques. Pour des raisons de sécurité on utilise SQLDeconnecte() qui ferme la connexion en cours et libère l&#39;espace mémoire utilisé par fonction SQLDéconnecte doit être appelée systématiquement pour fermer la connexion, même si cette connexion a échoué&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Arrivé à ce stade, vous pouvez tester le résultat. Entrez les bons paramètres de connexion, appuyez sur le bouton connexion et sous vos yeux ébouriffés de surprise le tree-view est rempli de l&#39;arborescence bases de données + Tables. Si sous vos yeux effrayés vous ne voyez rien paraître, vérifiez les points suivants :&lt;/div&gt;&lt;br /&gt;      &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;Votre serveur est-il actif ?&lt;/li&gt;&lt;li&gt;Votre code est-il exempt de Bug ?&lt;/li&gt;&lt;li&gt;Les paramètres de connexion sont-ils free of âneries ?&lt;/li&gt;&lt;li&gt;Vos lunettes sont-elles propres ? &lt;/li&gt;&lt;li&gt;..&lt;/li&gt;&lt;/ul&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Maintenant, ce serait super de pouvoir lister le contenu d&#39;une table dont on aurait cliqué sur le nom dans l&#39;arbre. Pour cela il faudrait récupérer le nom de la table choisie et remplir la table mémoire. C&#39;est tout simple voici le code que vous allez inscrire dans la zone clic sur &lt;b&gt;listebase&lt;/b&gt; de l&#39;objet &lt;b&gt;listebase&lt;/b&gt; (l&#39;arbre).&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e426&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e426&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e426&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e426&quot; class=&quot;contenuCode&quot;&gt;resultat est une chaîne&lt;br /&gt;&lt;br /&gt;resultat=ArbreSelect(MoiMême)&lt;br /&gt;mabase=ExtraitChaîne(resultat,2)&lt;br /&gt;matable=ExtraitChaîne(resultat,3)&lt;br /&gt;&lt;br /&gt;SI matable&lt;&gt;EOT ET mabase &lt;&gt;EOT ALORS //Nous avons la base et la table&lt;br /&gt;remplirtable(mabase,matable)&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;ArbreSelect(MoiMême) renvoie l&#39;élément cliqué sous forme d&#39;une chaine. Le problème c&#39;est qu&#39;il ne renvoi pas la terminaison (la feuille) mais l&#39;arborescence complète. Par exemple si vous cliquez sur la table &lt;b&gt;clients&lt;/b&gt;, contenue dans la base &lt;b&gt;gestcom&lt;/b&gt; ayant comme racine &lt;b&gt;Bases &lt;/b&gt;la chaîne resultat sera comme ceci : « Bases Gestcom clients ». Les éléments susceptibles de nous intéresser sont &lt;b&gt;Gestcom&lt;/b&gt;, pour le nom de la base et &lt;b&gt;clients&lt;/b&gt; pour fonction ExtraitChaine va nous être d&#39;un grand secourt. On lui donne la chaîne initiale et on lui dit de nous renvoyer le Xieme mot. Dans notre cas nous allons mettre dans la variable globale mabase le deuxième terme de la chaîne et dans la variable matable le troisième terme. Si jamais vous avez cliqué sur le nom de la base au lieu de cliquer sur le nom de la table, resultat sera composé de 2 mots et non de trois, dans ce cas ExtraitChaine (resultat, 3) renverra &lt;b&gt;EOT&lt;/b&gt;. Nous allons pouvoir remplir la table si les 2 variables (mabase et matable) sont différentes de EOT. Pour alléger la lecture et faciliter la compréhension, on va donc créer un traitant de remplissage de table, la procédure remplirtable qui va prendre 2 arguments : le nom de la base et le nom de la table.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voici le code de remplirtable(mabase,matable)&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e457&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e457&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e457&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e457&quot; class=&quot;contenuCode&quot;&gt;PROCEDURE remplirtable(labase,latable)&lt;br /&gt;resultat est un booléen&lt;br /&gt;numconnexion est un entier&lt;br /&gt;texte est une chaîne&lt;br /&gt;&lt;br /&gt;TableSupprimeTout(Table1)&lt;br /&gt;&lt;br /&gt;numconnexion=SQLConnecte(Numip,login,mdp,labase,&quot;MySQL&quot;)&lt;br /&gt;&lt;br /&gt;texte=SQLColonne(numconnexion,latable,Faux)&lt;br /&gt;&lt;br /&gt;SQLExec(&quot;select * from &quot;+latable,&quot;requete3&quot;)&lt;br /&gt;SQLInfoGene()&lt;br /&gt;miseenforme(texte,SQL.NbCol)&lt;br /&gt;&lt;br /&gt;SQLTable(&quot;requete3&quot;, &quot;Table1&quot;)&lt;br /&gt;SQLFerme(&quot;requete3&quot;)&lt;br /&gt;SQLDeconnecte()&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voici l&#39;explication du code. On commence par vider la table mémoire nommé table1. Ensuite on se connecte à la base de donnée dont le nom fut passé en paramètre.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Cette ligne : texte=SQLColonne(numconnexion,latable,Faux) renvoie dans la variable « &lt;b&gt;texte&lt;/b&gt; » le nom des colonnes de la table choisie par l&#39;utilisateur dans le tree-view. Le nom des colonnes nous sera utile pour mettre en forme la table mémoire on mettra en entête de table le nom des colonnes, ce sera plus parlant que c1,c2,c3.c15. La ligne suivante fait une requête select classique qui liste le contenu intégral d&#39;un fichier donné (latable). &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;SQLInfoGene() va renseigner diverses variables sur la dernière requête lancée (requete3). &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Nous ce qu&#39;il nous intéresse, c&#39;est de connaître le nombre de colonnes que va générer notre requête. Notre table sélectionnée contient-elle 5 colonnes, 2, 10 ? En fait, a priori nous n&#39;en savons rien, c&#39;est pour cela que je vous ai demandé de créer une table mémoire de 15 colonnes par défaut. C&#39;est qui va nous dire combien la requête a de colonnes. Mais n&#39;oubliez pas que SQL.NbCol ne contient des infos qu&#39;après l&#39;appel de SQLInfoGene()&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Nous allons commencer à créer l&#39;entête de la table mémoire(table1) avant d&#39;y transférer les données. C&#39;est le rôle de la procédure « miseenforme(texte,SQL.NbCol) »&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e484&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e484&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e484&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e484&quot; class=&quot;contenuCode&quot;&gt;PROCEDURE miseenforme(lescolonnes,nbcol)&lt;br /&gt;i est un entier=1&lt;br /&gt;nomcol,exnomcol sont des chaînes&lt;br /&gt;&lt;br /&gt;TANTQUE i&lt;&gt;nbcol&lt;br /&gt;nomcol=ExtraitChaîne(lescolonnes,i,RC)&lt;br /&gt;exnomcol=&quot;C&quot;+i&lt;br /&gt;{exnomcol}..Titre=nomcol&lt;br /&gt;{exnomcol}..Etat=Visible&lt;br /&gt;i++&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Le but de cette procédure est de remplacer les c1,c2, c3...nbcol par un le nom de la colonne renvoyé par allons donc affecter le nouveau nom à l&#39;ancien. Nous avons passé a la procédure 2 paramètres : Une chaîne contenant les noms des colonnes séparés par un espace et le nombre de colonnes. Nous avons comme impératif de renommer la première colonne (C1) par le 1&lt;sup&gt;er&lt;/sup&gt; terme contenu dans la chaîne ( lescolonnes ), la deuxième colonne (C2) par le 2eme terme de la chaîne et cela jusqu&#39;à nbcol. Comme vous le voyez c&#39;est ce que fait la boucle tantque.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;On initialise une variable i à 1, puis tant qu&#39;elle est différente de nbcol on place dans nomcol le terme contenu dans la chaîne lescolonnes à l&#39;indice i. Ensuite on recrée le nom de colonne basé sur l&#39;indice pour être en phase. La partie la plus surprenante est le fait de mettre entre accolades le nom de &#39;est ce que l&#39;on appelle une indirection, comme le nom du champ est dans une variable on fait ainsi comprendre à WinDev de traiter le contenu de la variable comme étant le nom du champ souhaité. On modifie le nom de la colonne par la constante ..Titre et on la rend visible par ..Etat=Visible. Voilà la procédure a fait la mise en forme. Elle s&#39;arrête et repasse la main a la procédure appelante : la procédure remplirtable. L&#39;exécution continue sur (« requete3 », « Table1 »). Cette commande fait un transfert du contenu de la requête dans la table mémoire.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voilà le tout est joué, sauvegardez et testez votre travail. C&#39;est super non ?&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Mais tout cela serait plus magique si vous aviez une zone de saisie de requête sql pour créer des nouvelles bases de données, créer des nouvelles tables, insérer des enregistrements...&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;C&#39;est ce que l&#39;on va réaliser maintenant, mais tout d&#39;abord voici le code du bouton requete&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e513&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e513&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e513&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e513&quot; class=&quot;contenuCode&quot;&gt;SI mabase&lt;&gt;&quot;&quot; ALORS&lt;br /&gt;Ouvre(frequete,Numip,login,mdp,mabase)&lt;br /&gt;SINON&lt;br /&gt;Info(&quot;Choisissez une base de donnée&quot;)&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Si l&#39;utilisateur a cliqué sur une base du Tree-view alors on peut lancer l&#39;ouverture de la 2eme fenêtre nommée requête. Fenêtre à qui on passe 4 arguments de connexion : le numéro ip, le login, le mot de passe et la base sur laquelle on désire travailler.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Champ de saisie nommé larequeteVoici l&#39;image de la nouvelle fenêtre que vous nommerez « frequete »&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Bouton nommé executeChamp liste nommé resultat&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/windev-mysql/images/image3.png&quot; alt=&quot;tp6-2&quot; /&gt;&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voyons les éléments :&lt;/div&gt;&lt;br /&gt;      &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;Un champ de saisie nommé larequete dans lequel vous taperez le texte de votre requête&lt;/li&gt;&lt;li&gt;Un champ liste nommé résultat dans lequel le résultat de votre requête apparaîtra.&lt;/li&gt;&lt;li&gt;Un bouton execute qui contient le code chargé de se connecter à , de faire exécuter la requête et d&#39;afficher le résultat.&lt;/li&gt;&lt;/ul&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Pour que les variables passées par le code du bouton requête de la fenêtre « Départ » soient prisent en compte par la fenêtre « frequete », il faut saisir dans la zone « déclaration globale de frequete » la ligne suivante :&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e554&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e554&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e554&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e554&quot; class=&quot;contenuCode&quot;&gt;Procedure frequete (Numip,login,mdp,mabase)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voyons de suite le code du bouton &lt;b&gt;execution&lt;/b&gt; &lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e565&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e565&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e565&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e565&quot; class=&quot;contenuCode&quot;&gt;i est un entier&lt;br /&gt;texte est une chaîne&lt;br /&gt;&lt;br /&gt;ListeSupprimeTout(resultat) // on vide la liste resultat&lt;br /&gt;&lt;br /&gt;SQLConnecte(numip,login,mdp,labase,&quot;MySQL&quot;)// on se connecte à la base&lt;br /&gt;SI larequete&lt;&gt;&quot;&quot; ALORS // si du texte a été frappé&lt;br /&gt;SQLExec(larequete,&quot;requete4&quot;) // on fait exécuter la requête par Mysql&lt;br /&gt;SQLInfoGene() // on fait générer les variables concernant la requête&lt;br /&gt;SQLPremier(&quot;requete4&quot;) // on se positionne sur la première ligne des données retournées par la requête&lt;br /&gt;&lt;br /&gt;TANTQUE PAS SQL.EnDehors // Tant qu&#39;il reste des lignes à lire&lt;br /&gt;i=1&lt;br /&gt;texte=&quot;&quot; // Je vais construire dans texte la ligne en concaténant les colonnes&lt;br /&gt;TANTQUE i&lt;=SQL.NbCol // de i au nombre de colonnes&lt;br /&gt;texte=texte+TAB+SQLCol(&quot;requete4&quot;, i) // Je concatene&lt;br /&gt;i++&lt;br /&gt;FIN&lt;br /&gt;ListeAjoute(resultat,texte) // J&#39;ajoute dans la liste résultat la ligne que je viens de créer&lt;br /&gt;SQLSuivant(&quot;requete4&quot;) // je passe à la ligne suivante&lt;br /&gt;FIN&lt;br /&gt;SQLFerme(&quot;requete4&quot;) // je détruis ma requête&lt;br /&gt;SINON&lt;br /&gt;Info(&quot;Veuillez saisir une requête&quot;)&lt;br /&gt;FIN&lt;br /&gt;SQLDeconnecte() // Je me déconnecte&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Que puis-je dire de plus ? Tout est expliqué ! Ah ! Si ! ! Le cours numéro 6 est fini, je vous remercie d&#39;avoir eu la patience d&#39;arriver jusqu&#39;ici.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Je vous dis à bientôt pour un nouveau &quot;lab&quot;.&lt;/div&gt;&lt;br /&gt;        &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LII&quot;&gt;II. Exercice applicatif&lt;/h1&gt;              &lt;div class=&quot;paragraph&quot;&gt;         &lt;span style=&quot;text-decoration: underline;&quot;&gt;           &lt;b&gt;Créer un système d&#39;administration Mysql.&lt;/b&gt;         &lt;/span&gt;       &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Imaginez une fenêtre ou l&#39;on puisse créer des bases de données, les supprimer, créer des tables, les supprimer, ajouter des utilisateurs, des droits, des permissions..&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Vous voyez ? Essayez de faire le plus simple et le plus ergonomique, n&#39;oubliez jamais que l&#39;informaticien n&#39;est jamais l&#39;utilisateur !&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Bien sur vous aurez besoin de commandes Sql simples du type&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Drop database&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Drop table&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Create database....&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;A vous de jouer, bon courage !&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://windev15.blogspot.com/feeds/4868519587449023747/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://windev15.blogspot.com/2010/02/acces-des-bases-de-donnees-tierces.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1641451758379613344/posts/default/4868519587449023747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1641451758379613344/posts/default/4868519587449023747'/><link rel='alternate' type='text/html' href='http://windev15.blogspot.com/2010/02/acces-des-bases-de-donnees-tierces.html' title='Accès à des bases de données tierces (Mysql)'/><author><name>alltips</name><uri>http://www.blogger.com/profile/14375765100631168219</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1641451758379613344.post-9161042301695193160</id><published>2010-02-16T06:36:00.001-08:00</published><updated>2010-02-16T06:36:52.200-08:00</updated><title type='text'>Etude des Sockets</title><content type='html'>&lt;a href=&quot;http://wind.developpez.com/tutoriels/windev/etude-socket/&quot; title=&quot;Etude des Sockets&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;L0&quot;&gt;0. Présentation&lt;/h1&gt;              &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;         &lt;tbody&gt;&lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;b&gt;Objectifs&lt;/b&gt; : Études des Sockets, communication répartieRappels de notions réseaux, Tcp/ip, Ports.&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Grâce à ce nouveau Tp nous allons rentrer dans le monde merveilleux de la communication distante via réseau. Cette jolie introduction pour vous faire comprendre que ce support va vous apprendre à faire discuter 2 ( ou plusieurs ) ordinateurs entre-eux. Nous allons employer les Sockets et les threads.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Commençons par définir ces 2 termes :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Les Sockets : (Tous ceux qui pensent à une chaussette sont virés) Une Socket est définie comme une extrémité d&#39;une communication. &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Une paire de processus ( ou de Threads ) communiquant sur un réseau emploie une paire de sockets, une pour chaque processus. Une socket est constituée d&#39;une adresse IP concaténée à un numéro de port. En général les sockets utilisent une architecture Client/Serveur. Le serveur attend des requêtes entrantes du client en écoutant un port spécifique. Dès réception d&#39;une requête, il accepte une connexion de la socket du client. Les serveurs implémentant des services particuliers ( par exemple, telnet, ftp, mail, http ), écoutent des ports bien connus ( telnet écoute le port 23, un serveur ftp le port 21, un serveur web [ Http ] le port 80 ). Les ports inférieurs à 1024 sont considérés comme connus et sont utilisables pour les services standard. Lorsqu&#39;un thread client commence une requête de connexion, il se voit assigner un port par la machine hôte. Ce port est un nombre supérieur à 1024. &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Par exemple, lorsqu&#39;un client de l&#39;hôte X d&#39;adresse Ip 192.168.5.20 souhaite établir une connexion avec un serveur Web (qui écoute le port 80) d&#39;adresse 192.168.6.10, l&#39;hôte X peut se voir affecter le port 1625. La connexion est constituée d&#39;une paire de sockets : (192.168.5.20 : 1625) sur l&#39;hôte X et (192.168.6.10 : 80) sur le serveur Web.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Un thread peut être perçu comme un flot de contrôle à l&#39;intérieur d&#39;un processus. Dans notre cas il joue le rôle d&#39;interface entre les 2 ordinateurs, interceptant les données transmises.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Notre exercice consistera à créer 2 exécutables, un client et un serveur. Le serveur sera en attente de réception de message et le client essayera de se connecter au serveur et de lui envoyer des messages. Pour cela il nous faudra 2 projets un pour le client, un pour le serveur&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Je vous rappelle que plus on avance au fil des supports moins je détaille les fonctionnalités que je considère comme devant être acquises. Donc si à ce stade vous éprouvez des difficultés reprenez les cours précédents. Nous montons en gamme en terme d&#39;expertise donc il est probable que vous éprouverez certaines difficultés sur ce support. Restez motivé et recommencez le autant de fois que nécessaire. Le but étant de le réaliser sans avoir recours à ce support.&lt;/div&gt;&lt;br /&gt;        &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LI&quot;&gt;I. Partie Serveur&lt;/h1&gt;              &lt;div class=&quot;paragraph&quot;&gt;Vous allez commencer par créer un nouveau projet nommé « &lt;b&gt;Serveur&lt;/b&gt; ». Nous ne travaillerons pas sur des fichiers donc faites en sorte de n&#39;utiliser aucune analyse. Nous n&#39;aurons besoin que d&#39;une fenêtre que vous nommerez « &lt;b&gt;Depart&lt;/b&gt; » et qui sera la première fenêtre du projet. Faites en sorte quelle ressemble à celle ci :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Cette zone est destinée à recevoir le numéro du port d&#39;écoute. C&#39;est un objet champ de saisie que vous nommerez « portip »&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Ces 2 boutons seront nommés « demarre » et « arrete ». A vous de choisir qui est qui.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Ici s&#39;afficheront les phrases envoyées par le client. C&#39;est un objet liste que vous nommerez « liste1 »Cette zone de texte nous indiquera si le serveur est actif ou pas. C&#39;est un objet champ de saisie que vous nommerez « etatserveur »&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Analysons le fonctionnement du serveur : &lt;/div&gt;&lt;br /&gt;      &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;Il faut lui donner un port a écouter.&lt;/li&gt;&lt;li&gt;Il faut lancer la boucle d&#39;écoute ( boucle infinie ) et faire en sorte que les événements d&#39;entrés ( demande de connexion.) soient traités par des threads.&lt;/li&gt;&lt;li&gt;Une fois la connexion acceptée le texte recu sera inscrit dans la liste déroulante.&lt;/li&gt;&lt;/ul&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Retroussons nos manches et en avant pour le codage. Nous allons commencer par créer une procedure d&#39;attente ( la boucle d&#39;écoute ). Pour cela créez une procédure globale nommée &quot;&lt;b&gt;attente&lt;/b&gt;&quot;&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voici le code que nous allons analyser.&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e218&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e218&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e218&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e218&quot; class=&quot;contenuCode&quot;&gt;PROCEDURE attente()&lt;br /&gt;BOUCLE // début de la boucle&lt;br /&gt;SI SocketAttendConnexion(&quot;serveur&quot;) ALORS // si une demande de connexion est en attente&lt;br /&gt;canal est une chaîne&lt;br /&gt;canal=SocketAccepte(&quot;serveur&quot;) //Cette fonction permet de créer le canal de communication entre la socket serveur et la socket cliente.&lt;br /&gt;ThreadExécute(&quot;threadcnx&quot;,threadNormal,&quot;affichemes&quot;,canal) //Lance l&#39;exécution d&#39;un &quot;thread&quot;&lt;br /&gt;Multitache(-30) //La fonction Multitache avec un negatif suspend l&#39;application&lt;br /&gt;FIN&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Vous pouvez constater que nous nous trouvons devant une boucle sans fin ou en attente dite active. A l&#39;intérieur de cette boucle une fonction WinDev ( SocketAttendConnexion ), est chargée de verifier si des demandes de connexion se produisent. Comme parametre cette fonction prend un argument qui est le nom de la socket ici &quot;serveur&quot;. Ne vous inquietez pas pour l&#39;instant, vous allez voir ou nous allons définir la socket nommée &quot;serveur&quot;. Pour l&#39;instant l&#39;essentiel est de comprendre le principe de la boucle d&#39;attente active. Donc si une demande de connexion se produit pour la socket &quot;serveur&quot; on l&#39;accepte en créant un canal de communication. Vous pouvez considérer ce canal comme un tunel ou les données vont transiter.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;La ligne : ThreadExécute(&quot;threadcnx&quot;,threadNormal,&quot;affichemes&quot;,canal), est chargée de faire en sorte que le code de la fonction affichemes soit executée comme un Thread normal appelé &quot;threadcnx&quot; utilisant le parametre &quot;canal&quot;)&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Multitache(-30) : L&#39;exécution de l&#39;application est suspendue durant &lt;temporisation&gt; 100ème de seconde. D&#39;autres traitements peuvent être exécutés durant cette période de temps (ré-affichage ou exécution d&#39;un code de clic par exemple). Dans notre cas la boucle est gelée pour permettre aux threads de s&#39;exécuter durant leurs quantums. &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Donc : la socket s&#39;appelle « serveur », le canal crée s&#39;appelle canal, le thread gestionnaire se nomme « threadcnx ».&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;J&#39;admets qu&#39;au premier abord cela puisse vous sembler complexe, alors que c&#39;est extrêmement logique. Relisez le paragraphe précédent et imaginez le fonctionnement : la boucle sans fin, l&#39;attente de connexion, le traitement de la connexion..&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Maintenant nous allons nous intéresser à la procédure « affichemes ».C&#39;est elle le cour de notre serveur puisque c&#39;est la gestionnaire d&#39;événement. Pour ce faire créez une procédure globale « affichemes » (affichemes pour affiche messages).&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e243&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e243&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e243&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e243&quot; class=&quot;contenuCode&quot;&gt;PROCEDURE affichemes(canal)&lt;br /&gt;texte est une chaîne&lt;br /&gt;BOUCLE&lt;br /&gt;texte=SocketLit(canal,Vrai)&lt;br /&gt;ListeAjoute(&quot;liste1&quot;,texte)&lt;br /&gt;FIN&lt;br /&gt;ThreadArrête(&quot;&quot;,500)&lt;br /&gt;Multitache(-30)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Comme vous pouvez le constater la procédure prend comme paramètre le nom du canal reliant les 2 sockets. Je vous rappelle que cette procédure est lancée en temps que thread. lit le contenu du canal et le mets dans la variable texte. Le paramètre vrai signifie à SocketLit que la durée d&#39;attente sur canal est indéfinie. Une fois le message récupéré il doit être mis dans notre liste déroulante « liste1 ». Le reste de la procédure n&#39;appelle pas de commentaires particuliers.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Continuons par le code du bouton &quot;demarre&quot;.&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e256&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e256&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e256&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e256&quot; class=&quot;contenuCode&quot;&gt;SI PAS SocketCrée(&quot;serveur&quot;,PORTIP,NetAdresseIp()) ALORS&lt;br /&gt;Erreur(&quot;Erreur de création &quot; + ErreurInfo(errMessage))&lt;br /&gt;ETATSERVEUR=&quot;Problème lors du démarrage du serveur&quot;&lt;br /&gt;SINON&lt;br /&gt;ETATSERVEUR=&quot;Serveur démarré&quot;&lt;br /&gt;ThreadExécute(&quot;thread1&quot;,threadNormal,attente)&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Ce code lance l&#39;exécution du serveur.  utilise plusieurs parametres :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Le nom de la socket que l&#39;on va créer.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Le port sur lequel on écoute.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;L&#39;adresse ip du poste serveur. &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Comme vous le voyez à la lecture de ce code si la socket &quot;&lt;b&gt;serveur&lt;/b&gt;&quot; est créée on fait de notre procédure globale &quot;attente&quot; un thread qui appellera lui meme le thread &quot;&lt;b&gt;affichemes&lt;/b&gt;&quot;. C&#39;est pas super l&#39;informatique ? &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voici le code du bouton arreter&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e289&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e289&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e289&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e289&quot; class=&quot;contenuCode&quot;&gt;SocketFerme(&quot;serveur&quot;)&lt;br /&gt;ETATSERVEUR=&quot;Arret du serveur&quot;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voilà la partie serveur est maintenant terminée. Il ne vous reste plus qu&#39;a créer l&#39;exécutable (Menu Projet/Créer l&#39;executable).&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;        &lt;i&gt;           &lt;b&gt;NB: Si vous avez des Warnings concernant une boucle sans condition de sortie ne vous en souciez pas !&lt;/b&gt;         &lt;/i&gt;       &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Dés a présent vous avez concu un serveur, il ne nous reste plus qu&#39;a créer le client. Son rôle est d&#39;essayer de se connecter au serveur et de lui envoyer des message. C&#39;est clair ? Alors Avanti !&lt;/div&gt;&lt;br /&gt;        &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LII&quot;&gt;II. Partie Cliente&lt;/h1&gt;              &lt;div class=&quot;paragraph&quot;&gt;Pour le client, comme ce doit etre une application autonome, il nous faut donc créer un projet, sans analyse ayant pour nom &quot;C&lt;b&gt;lient&lt;/b&gt;&quot;. Ce projet ne contiendra qu&#39;une fenetre nommée &quot;&lt;b&gt;Depart&lt;/b&gt;&quot;. Elle ressemblera a ceci :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Objet champ de saisieNom : ADRIP&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/etude-socket/images/image2.png&quot; alt=&quot;tp5-2&quot; /&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Objet : Champ de saisie.Nom : ETATCNXObjet : Champ de saisie.Nom : messa&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Objet : champ de saisie.Nom : Portip&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Comme vous pouvez le constater le client est vraiment minimaliste. On saisit l&#39;adresse ip du serveur, le port d&#39;écoute, le message à transmettre. Le bonton Connexion nous servira pour établir la liaison, le bouton envoyer transmettra le message.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Interressons nous au bouton connexion. Son rôle est de nous mettre en relation avec la socket du serveur. Donc il est impératif que le serveur soit actif avant le client, mais ca les plus rusés l&#39;avaient remarqué.&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e355&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e355&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e355&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e355&quot; class=&quot;contenuCode&quot;&gt;SI PAS SocketConnecte(&quot;serveur&quot;, PORTIP,ADRIP) ALORS&lt;br /&gt;Erreur(&quot;erreur de connexion &quot; +  ErreurInfo(errMessage))&lt;br /&gt;SINON&lt;br /&gt;ETATCNX=&quot;Vous etes en ligne&quot;&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voici le code du bouton.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;On essaye de ce connecter à la socket nommée &quot;Serveur&quot; ( vous savez c&#39;est celle que l&#39;on vient de créer coté serveur ?!), écoutant le port défini ( PORTIP), à telle adresse IP (ADRIP). Si tout ce passe bien on ecrit &quot;Vous etes en ligne dans le champ de saisie Etatcnx. Sinon on envoie le message d&#39;erreur.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Ben oui, c&#39;est tout. Simple, non ?&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Maintenant voyons le code du bouton envoyer.&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e378&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e378&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e378&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e378&quot; class=&quot;contenuCode&quot;&gt;SI SocketEcrit(&quot;serveur&quot;, messa) = Faux ALORS&lt;br /&gt;Info(&quot;Un problème est survenu&quot;)&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;On envoit un message ( le texte contenu dans le champ de saisie &quot;&lt;b&gt;messa&lt;/b&gt;&quot; ) à la socket &quot;&lt;b&gt;serveur&lt;/b&gt;&quot;. Si ca ne fonctionne pas on affiche une boite de dialogue d&#39;avertissement.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voilà tout est fini, vous pouvez compiler, créer l&#39;executable et tester votre client/serveur. Pour la mise en ouvre vous avez besoin de lancer le serveur, le mettre en écoute d&#39;un port. Ensuite vous lancez le client que vous branchez sur le port d&#39;écoute et envoyez le message. Si vous etes en réseau utilisez la bonne adresse ip du serveur et have fun !!&lt;/div&gt;&lt;br /&gt;        &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LIII&quot;&gt;III. Exercices applicatifs&lt;/h1&gt;              &lt;div class=&quot;paragraph&quot;&gt;Maintenant que vous etes un pro de la socket essayez de réaliser l&#39;exercice suivant.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;A partir de l&#39;executable faites en sorte que le client oblige le serveur a executer une action ( par exemple activer la calculatrice )&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;        &lt;span style=&quot;text-decoration: underline;&quot;&gt;Pistes de réalisation : &lt;/span&gt;       &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Coté client creez un bouton qui envoie le chiffre 1 par exemple à la socket serveur.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Coté serveur analysez les mesages recu et si message =1 alors ...&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Avec cet exercice vous etes en train d&#39;apprendre les base d&#39;un outils de maintenance à distance. A vous de le perfectionner&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;        &lt;i&gt;Pour faire lancer une application windows par Windev voici la syntaxe : &lt;/i&gt;         &lt;i&gt;LanceAppli(&quot;CALC.EXE »). Calc.exe étant la calculatrice&lt;/i&gt;       &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://windev15.blogspot.com/feeds/9161042301695193160/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://windev15.blogspot.com/2010/02/etude-des-sockets.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1641451758379613344/posts/default/9161042301695193160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1641451758379613344/posts/default/9161042301695193160'/><link rel='alternate' type='text/html' href='http://windev15.blogspot.com/2010/02/etude-des-sockets.html' title='Etude des Sockets'/><author><name>alltips</name><uri>http://www.blogger.com/profile/14375765100631168219</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1641451758379613344.post-4572494163945158153</id><published>2010-02-16T06:35:00.002-08:00</published><updated>2010-02-16T06:36:22.642-08:00</updated><title type='text'>Création d&#39;un projet avec plusieurs fichiers liés</title><content type='html'>&lt;h1 class=&quot;TitreSection0&quot; id=&quot;L0&quot;&gt;0. Présentation&lt;/h1&gt;              &lt;div class=&quot;paragraph&quot;&gt;L&#39;objectif de ce cours est de vous familiariser avec l&#39;utilisation des fichiers liés.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Nous allons créer une mini GPAO (&lt;b&gt;G&lt;/b&gt;estion de &lt;b&gt;P&lt;/b&gt;roduction &lt;b&gt;A&lt;/b&gt;ssistée par &lt;b&gt;O&lt;/b&gt;rdinateur). Vous travaillez pour un assembleur informatique, son processus de production est le suivant : Il reçoit les différentes pièces détachées (disque dur, mémoires, cartes mères.) et assemble ces différentes pièces pour en faire un modèle fini. Comme vous pouvez le percevoir, le modèle conceptuel travaillera avec 2 entités (Ensemble fini et composants). Voici une représentation du MCD :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;image&quot; style=&quot;text-align: left;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image1.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;         &lt;tbody&gt;&lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image2.png&quot; alt=&quot;WB01071_&quot; /&gt;           &lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;b&gt;Remarque&lt;/b&gt; : Je n&#39;ai pas besoin de vous rappeler que les propriétés soulignées et en gras désignent les identifiants de l&#39;entité, donc je ne le fais pas.&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Vous allez commencer par créer un nouveau projet nommé TP4. Dans l&#39;Assistant, vous sélectionnerez votre thème préféré, confirmerez le choix de création d&#39;analyse et finirez le processus de l&#39;assistant. Un nouvel assistant de &lt;b&gt;Création d&#39;analyse&lt;/b&gt; va apparaître. Vous pouvez ensuite valider les différentes fenêtres de l&#39;Assistant jusqu&#39;à arriver à l&#39;Assistant de &lt;b&gt;Création de fichier&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Restez sur &lt;b&gt;Créer une nouvelle description de fichier&lt;/b&gt;, donnez &lt;b&gt;Ensemble&lt;/b&gt; comme Nom et &lt;b&gt;Ordinateurs assemblés&lt;/b&gt; comme Libellé. Pensez à « décocher » &lt;b&gt;Le fichier possède un identifiant automatique &lt;/b&gt;puisque nous avons &lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;b&gt;Refens&lt;/b&gt;&lt;/span&gt; qui sera notre identifiant. Gardez &lt;b&gt;Hyper File Réseau ou Monoposte&lt;/b&gt; comme &lt;b&gt;Type de base de&lt;/b&gt; &lt;b&gt;données&lt;/b&gt; et ne laissez coché que l&#39;option &lt;b&gt;une fenêtre en mode table&lt;/b&gt; dans la dernière partie de l&#39;assistant.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Maintenant la fenêtre suivante apparaît &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image3.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;C&#39;est elle qui va vous permettre de saisir toutes les propriétés de votre entité. Remplissez-la pour qu&#39;elle ressemble à ceci :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image4.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Une fois remplies, cliquez sur &lt;b&gt;Ok&lt;/b&gt; et retournez sous l&#39;éditeur de Windev. Enregistrez.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Attention un écran va vous demander si vous voulez créer une fenêtre ou allez sous l&#39;éditeur, cliquez sur &lt;b&gt;Allez directement dans l&#39;éditeur de Windev&lt;/b&gt; pour rester dans l&#39;analyse.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Si vous regardez bien votre éditeur d&#39;analyse en haut vous devez découvrir une barre d&#39;outils comme celle-ci :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image5.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voyez les utilisations des différentes icônes en passant le curseur de la souris dessus.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Comme vous êtes dégourdis et intelligents je vous laisse finir de concevoir le modèle !&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voilà à quoi vous devez arriver :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;image&quot; style=&quot;text-align: left;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image6.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Vous venez donc de créer le &lt;b&gt;Modèle Logique de Données&lt;/b&gt; (MLD). Enregistrez.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;        &lt;b&gt;Attention&lt;/b&gt; : N&#39;oubliez pas que ce n&#39;est pas parce que l&#39;analyse est créée que les fichiers sont physiquement créés sur votre disque dur. Allez dans le code du projet « Projet / Code du projet » et inscrivez la séquence suivante dans la zone « Initialisation de TP4 » :&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e272&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e272&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e272&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e272&quot; class=&quot;contenuCode&quot;&gt;HCréationSiInexistant(Composant)&lt;br /&gt;HCréationSiInexistant(Ensemble)&lt;br /&gt;HCréationSiInexistant(Intègre)&lt;br /&gt;HGèreIntégrité(&quot;*&quot;, &quot;*&quot;, hCardinalité+hEnModification+hEnSuppression, Faux)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;La dernière ligne indique à WinDev de ne pas se soucier de gérer l&#39;intégrité référentielle, nous le ferons nous-même.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Maintenant que l&#39;analyse est créée, nous allons commencer à construire notre application. Choisissez &lt;b&gt;Fichier&lt;/b&gt; / &lt;b&gt;Nouveau&lt;/b&gt; / &lt;b&gt;Fenêtre&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Créez une fenêtre nommée &lt;b&gt;départ&lt;/b&gt; qui sera la première fenêtre du projet. Faites en sorte qu&#39;elle ait les caractéristiques suivantes :&lt;/div&gt;&lt;br /&gt;        &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LI&quot;&gt;I. Onglet Général : &lt;/h1&gt;              &lt;div class=&quot;paragraph&quot;&gt;Nom logique : départ&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Description : Première fenêtre du projet&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Titre : Bienvenue dans la Mini Gp&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Onglet&lt;b&gt; IHM :&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Taille : Taille 640*480&lt;/div&gt;&lt;br /&gt;        &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LII&quot;&gt;II. Onglet Détail :&lt;/h1&gt;              &lt;div class=&quot;paragraph&quot;&gt;Type de fenêtre : Mère Mdi &lt;/div&gt;&lt;br /&gt;      &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;         &lt;tbody&gt;&lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image2.png&quot; alt=&quot;WB01071_&quot; /&gt;           &lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;b&gt;Remarque&lt;/b&gt; : Une fenêtre mère MDI est obligatoirement la première fenêtre d&#39;un projet WinDev. Cette fenêtre permet d&#39;afficher toutes les fenêtres de l&#39;application.Une fenêtre mère MDI a les caractéristiques suivantes (non modifiables) : bords modifiables, bouton d&#39;iconisation, d&#39;agrandissement, menu système,barre de titre, barre d&#39;icônes, possibilité d&#39;avoir un menu déroulant et des barres outils.Dans une fenêtre mère MDI, seuls les champs situés dans la zone &quot;barre d&#39;icônes&quot; peuvent être en saisie. En dehors de cette zone, aucun champ ne peut être en saisie, aucun clic souris n&#39;est actif.&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Nous allons placer une barre d&#39;outils dans cette fenêtre &lt;b&gt;départ&lt;/b&gt;, pour cela cliquez sur l&#39;objet &lt;b&gt;Créer une barre d&#39;outils&lt;/b&gt; &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image7.png&quot; alt=&quot;image&quot; /&gt; et placez le dans le bord supérieur gauche de la fenêtre. Faites un &lt;b&gt;clic droit&lt;/b&gt; sur ce nouvel objet et allez dans &lt;b&gt;Description&lt;/b&gt;. Nous allons placer 5 boutons dans cette barre d&#39;outils (un pour saisir les nouveaux composants, un pour créer des ensembles, un pour imprimer la liste des composants, un pour imprimer l&#39;ensemble et ses composants, le dernier pour quitter l&#39;application).&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Vous allez donc cliquer sur le bouton &lt;b&gt;C&lt;/b&gt;&lt;b&gt;réer&lt;/b&gt; puis choisissez &lt;b&gt;B&lt;/b&gt;&lt;b&gt;outon&lt;/b&gt;. Le résultat obtenu devrait ressembler à ceci :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image8.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Cliquez sur &lt;b&gt;Bouton1&lt;/b&gt;, puis sur le bouton &lt;b&gt;Editer&lt;/b&gt;, dans cette fenêtre &lt;b&gt;D&lt;/b&gt;&lt;b&gt;escription&lt;/b&gt;&lt;b&gt; d&#39;un bouton&lt;/b&gt; saisissez &lt;b&gt;nc&lt;/b&gt; dans la zone &lt;b&gt;Nom&lt;/b&gt;, supprimez le libellé par défaut, cliquez sur &lt;b&gt;Catalogue.&lt;/b&gt; pour la zone &lt;b&gt;Image&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Le catalogue apparaît, sur la gauche choisissez seulement &lt;b&gt;16*16&lt;/b&gt; (nous n&#39;aurons que des petites images), dans la zone &lt;b&gt;R&lt;/b&gt;&lt;b&gt;echerche&lt;/b&gt; frappez « dossier » puis appuyez sur le bouton &lt;b&gt;R&lt;/b&gt;&lt;b&gt;echercher&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Prenez le 4&lt;sup&gt;ème&lt;/sup&gt; bouton de la 4&lt;sup&gt;ème&lt;/sup&gt; ligne puis validez. Dans l&#39;onglet &lt;b&gt;Aide&lt;/b&gt; de la fenêtre description, dans la zone &lt;b&gt;B&lt;/b&gt;&lt;b&gt;ulle d&#39;aide&lt;/b&gt; inscrivez &lt;b&gt;Saisie d&#39;un nouveau composant&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Pour les boutons suivants, faites de même en suivant les instructions suivantes :&lt;/div&gt;&lt;br /&gt;      &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;         &lt;tbody&gt;&lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;b&gt;Boutons&lt;/b&gt;           &lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;b&gt;Nom&lt;/b&gt;           &lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bulle d&#39;aide&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Mot clé (recherche icône)&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton2&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Créer&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Créer des ensembles&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;« Créer »&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton3&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;ImprimeC&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Imprimer les composants&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;« Imprimer »&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton4&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;ImprimeE&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Imprimer les ensembles&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;« Imprimer »&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton5&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Fermer&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Quitter l&#39;application&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;« Annuler »&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Vous choisirez les icônes les plus en phase avec le but du bouton.&lt;/div&gt;&lt;br /&gt;      &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;         &lt;tbody&gt;&lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image2.png&quot; alt=&quot;WB01071_&quot; /&gt;           &lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;b&gt;Remarque&lt;/b&gt; : Si vous avez des difficultés pour placer les boutons (chevauchement par exemple), allez dans leur onglet &lt;b&gt;D&lt;/b&gt;&lt;b&gt;étail&lt;/b&gt; et affectez leurs les dimensions suivantes : largeur 32, hauteur 24.&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voici un exemple de ce que devrait être la barre d&#39;outils :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image9.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Nous allons créer les 4 fenêtres filles nécessaires pour faire fonctionner notre application (fenêtre filles car elles doivent s&#39;exécuter à l&#39;intérieur de la fenêtre mère, logique ! Non ? ). Pour le bouton &lt;b&gt;Quitter&lt;/b&gt;, je vous laisse mettre le code correspondant, vous n&#39;avez plus besoin de mon aide, sinon retour aux TP précédents.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Pour la première fenêtre associée au bouton&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image10.png&quot; alt=&quot;image&quot; /&gt;, respectez les consignes ci dessous :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Le code d&#39;ouverture de la fenêtre fille sera : &lt;b&gt;OuvreFille(Gcompo)&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;        &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LIII&quot;&gt;III. Onglet Général de la description&lt;/h1&gt;              &lt;div class=&quot;paragraph&quot;&gt;Nom logique : Gcompo&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Description : Gestion des composants&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Titre : Gestion des composants&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Onglet &lt;b&gt;IHM&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Largeur : 500&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Hauteur : 350&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Position : Relatif à la mère&lt;/div&gt;&lt;br /&gt;        &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LIV&quot;&gt;IV. Onglet Détail&lt;/h1&gt;              &lt;div class=&quot;paragraph&quot;&gt;Type de fenêtre : Fille Mdi&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voici à quoi elle devrait ressembler :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image11.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Infos : Ces 3 champs sont liés avec les champs du fichier Composant (faites-les glisser depuis l&#39;onglet à droite de l&#39;écran). Si certains ont des difficultés : retour au TP3. Faites en sorte que RefComp ait un masque de saisie &lt;b&gt;TOUT EN MAJUSCULES&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Créez 2 boutons : &lt;b&gt;BAjout&lt;/b&gt; et &lt;b&gt;BSup&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Nom de la table mémoire : Table1&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;RefComp : type texte longueur 15&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Désignation : type texte longueur 80&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;PrixAchat : type numérique (Titre : Prix d&#39;Achat)&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Choisir dans l&#39;assistant &lt;b&gt;Je veux remplir moi-même la table&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Mettez la table en &lt;b&gt;Affichage seulement&lt;/b&gt; (sinon la saisie ne serait pas validée)&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Pour ceux qui auraient encore des difficultés : voir TP3&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Maintenant analysons le comportement que devra avoir cette fenêtre à l&#39;ouverture : Elle devra parcourir le fichier Composant et afficher les tuples dans la table mémoire s&#39;il y en a.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Le bouton &lt;b&gt;Ajouter&lt;/b&gt; devra :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;.Inscrire la valeur des 3 champs dans le fichier correspondant en interceptant une erreur de doublonnage si l&#39;utilisateur saisi 2 fois une référence existante,&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;.Il devra aussi mettre à blanc les 3 champs pour préparer une nouvelle saisie,&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;.Réafficher la table mémoire (supprimer le contenu existant et re-écrire avec le contenu du fichier),&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;.Et enfin avertir l&#39;utilisateur que tout s&#39;est bien passé.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Le bouton &lt;b&gt;Supprimer&lt;/b&gt; devra :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;.Supprimer physiquement la ligne pointée dans la table mémoire&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;.Réafficher la table mémoire&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;Voici les différents codes (je vous rappelle qu&#39;ils ont déjà été étudiés à la leçon 3) :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Nous allons créer une procédure locale &lt;b&gt;affichetable&lt;/b&gt; qui aura pour rôle de réafficher la table mémoire (supprimer le contenu existant et re-écrire avec le contenu du fichier) :&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e747&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e747&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e747&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e747&quot; class=&quot;contenuCode&quot;&gt;TableSupprimeTout(Table1)&lt;br /&gt;HLitPremier(Composant,RefComp)&lt;br /&gt;TANTQUE H.trouve ET PAS H.EnDehors&lt;br /&gt;TableAjoute(Table1,Composant.RefComp+TAB+Composant.DésignationC+TAB+Composant.PrixAHT)&lt;br /&gt;HLitSuivant(Composant,RefComp)&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;Cette séquence devrait vous être familière donc je ne vous la commente pas, sinon retour au cours 3.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Rappel pour faire une procédure locale cliquez sur « Procédures locales » en bas de l&#39;écran :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image13.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Initialisation de Gcompo (la fenêtre) :&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e769&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e769&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e769&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e769&quot; class=&quot;contenuCode&quot;&gt;// Appel de la procédure affichetable&lt;br /&gt;affichetable()&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Maintenant on est sûr que dès que cette fenêtre s&#39;ouvrira, la table mémoire sera en phase avec le contenu du fichier.&lt;/div&gt;&lt;br /&gt;      &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;         &lt;tbody&gt;&lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image2.png&quot; alt=&quot;WB01071_&quot; /&gt;           &lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;b&gt;Remarque&lt;/b&gt; : Certains d&#39;entre vous se demandent peut être pourquoi utiliser des tables mémoire pour afficher le contenu des fichiers plutôt que des tables fichiers qui semblent toutes destinées à cette utilisation. Ma réponse est simple : la table mémoire vous apportera plus de souplesse et une gestion plus fine des enregistrements et des lignes dans certains cas. Et puis qui peut le plus peut le moins ;-)))&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voici le code du bouton &lt;b&gt;BAjout&lt;/b&gt; :&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e802&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e802&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e802&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e802&quot; class=&quot;contenuCode&quot;&gt;EcranVersFichier() // Transfère les valeurs contenues dans les champs de la fenêtre&lt;br /&gt;// dans la zone de structure du fichier&lt;br /&gt;HAjoute(Composant) // Passe la structure physiquement dans le fichier&lt;br /&gt;RAZ(Vrai)// Efface les valeurs contenues dans les champs liés pour saisir un nouveau composant&lt;br /&gt;affichetable()&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voici le code du bouton &lt;b&gt;BSup&lt;/b&gt; :&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e813&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e813&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e813&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e813&quot; class=&quot;contenuCode&quot;&gt;HLitRecherche(Composant,RefComp,RefComp) // Recherche dans la table Composant,&lt;br /&gt;// sur la rubrique RefComp, la valeur contenue dans RefComp de Table1&lt;br /&gt;SI HTrouve ALORS// Si la valeur est trouvée alors&lt;br /&gt;HSupprime(Composant)// On supprime physiquement la ligne dans le fichier Composant&lt;br /&gt;Info(&quot;Suppression réussie&quot;)// On informe l&#39;utilisateur de la réussite de la suppression&lt;br /&gt;affichetable()&lt;br /&gt;SINON// Sinon, on n&#39;a pas trouvé ?!!&lt;br /&gt;Info(&quot;Il y a un boulon dans le potage&quot;)// Bizarre, bizarre !&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Enregistrez la fenêtre et testez votre projet sans oublier de définir qu&#39;elle est la 1&lt;sup&gt;ère&lt;/sup&gt; fenêtre du projet (&lt;b&gt;départ&lt;/b&gt;), normalement les comportements doivent être cohérents. Dans le cas contraire, reprenez le support et vérifiez que vous n&#39;avez pas oublié quelques instructions.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Nous allons maintenant faire la fenêtre la plus intéressante au niveau intellectuel, celle qui gère l&#39;assemblage d&#39;un ordinateur.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Créez une nouvelle fenêtre (Fichier / Nouveau / Fenêtre). Prenez une fenêtre vierge et enregistrez la sous &lt;b&gt;Gensemble&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;N&#39;oubliez pas d&#39;en faire une fenêtre fille (cf. : étapes identiques à la fenêtre &lt;b&gt;Gcompo&lt;/b&gt;) et de mettre le code d&#39;ouverture de cette fenêtre dans le deuxième bouton de la barre d&#39;outils de la fenêtre &lt;b&gt;départ&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voici la fenêtre telle quelle devrait être : &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;23131211109876541 &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image14.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;&lt;br /&gt;      &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;         &lt;tbody&gt;&lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;b&gt;Objet N°&lt;/b&gt;           &lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;b&gt;Nom&lt;/b&gt;           &lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;             &lt;b&gt;Rôle&lt;/b&gt;           &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;1&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;RefEns&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Lié à Ensemble.RefEns (TOUT EN MAJUSCULES)&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;2&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;PrixVHT&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Lié à Ensemble.PrixVHT&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;3&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Désignation&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Lié à Ensemble.Désignation&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;4&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;BPremier&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton nous positionnant sur le premier enregistrement du fichier Ensemble&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;5&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;BPrecedent&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton nous positionnant sur l&#39;enregistrement précédent&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;6&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;BSuivant&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton nous positionnant sur l&#39;enregistrement suivant&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;7&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;BDernier&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton nous positionnant sur le dernier enregistrement du fichier Ensemble&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;8&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Table1&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Table mémoire contenant des rubriques similaires à la structure de Composant&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;9&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;BAjout&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton nous permettant d&#39;ajouter un composant à l&#39;ensemble&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;10&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;BSupprime&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton nous permettant de supprimer un composant à l&#39;ensemble&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;11&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;BNouveau&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton nous permettant de créer un nouvel ensemble&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;12&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;BValide&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton nous permettant de valider un ensemble&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;13&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;BSupp&lt;/td&gt;           &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;Bouton nous permettant de supprimer un ensemble&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Analyse des éléments de la fenêtre &lt;b&gt;G&lt;/b&gt;&lt;b&gt;ensemble&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;A l&#39;ouverture de la fenêtre dans le code d&#39;initialisation, nous devrons nous positionner sur le premier ensemble (s&#39;il existe) et rechercher tous ces composants constitutifs.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voici comment faire :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Il nous faut lire la référence de l&#39;ensemble (RefEns), parcourir le fichier de liaison (Intègre) sur la clé RefEns, tant que l&#39;on trouve Ensemble.RefEns=Intègre.RefEns il nous faut chercher dans la table composant la clé de liaison (Intègre.RefComp = Composant.RefComp) et récupérer Intègre.Qté. C&#39;est clair ? Non !! Alors relisez en ayant l&#39;analyse en tête.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Nous allons créer une fonction (en fait une procédure, WinDev ne faisant pas de différence entre fonction et procédure) qui, prenant en paramètre le code RefEns, nous rempli la table. Facile et efficace. Notez qu&#39;une requête SQL nous aurait évité pas mal de lignes, à vous de juger.&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e1072&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e1072&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e1072&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e1072&quot; class=&quot;contenuCode&quot;&gt;PROCEDURE remplir(code)&lt;br /&gt;TableSupprimeTout(Table1)&lt;br /&gt;FichierVersEcran(Gensemble) // on affecte aux champs de la fenêtre les données liées&lt;br /&gt;HLitRecherche(Intègre,RefEns,code) // On fait rechercher dans le fichier Intègre une valeur de RefEns égale à code&lt;br /&gt;TANTQUE HTrouve ET PAS HEnDehors&lt;br /&gt;HLitRecherche(Composant,RefComp,Intègre.RefComp) // A vous de trouver&lt;br /&gt;TableAjoute(Table1,Composant.RefComp+TAB+Composant.DésignationC+TAB+Composant.PrixAHT+TAB+Intègre.Qté)&lt;br /&gt;HLitSuivant(Intègre,RefEns)&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;En fait, comme vous pouvez le voir, nous venons de « jongler » avec 3 fichiers sans trop de difficultés. Regardons le code d&#39;initialisation de la fenêtre :&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e1080&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e1080&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e1080&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e1080&quot; class=&quot;contenuCode&quot;&gt;HLitPremier(Ensemble,RefEns)&lt;br /&gt;SI HNbEnr(Ensemble)&gt;0 ALORS // si le fichier Ensemble contient au moins un enregistrement&lt;br /&gt;remplir(Ensemble.RefEns)&lt;br /&gt;SINON&lt;br /&gt;Info(&quot;Le fichier est vide&quot;)&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voyons le code nécessaire aux boutons 4, 5, 6 et 7 (pour les icônes, faites un tour du côté des flèches en 16x16). Je vous donne le code du bouton 4, vous êtes suffisamment aguerri pour pouvoir créer le code des boutons 5, 6 et 7. Comment ça ? Réfléchissez un peu et vous y arriverez ! Non mais, il faudrait tout leur faire.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;(Si vous ne savez pas. hop, au TP 3). D&#39;ailleurs, je ne vous le donne pas, non je suis pas méchant, j&#39;ai seulement la flemme de vous réécrire la séquence de code du dessus. Eh oui, c&#39;est ce bout de code, analysez le et regardez à quel point il est idéal pour notre bouton 4.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Nous allons traiter le bouton 9. Ce bouton doit nous permettre de sélectionner dans le fichier &lt;b&gt;Composant&lt;/b&gt; le composant que nous voulons insérer dans la table mémoire. Nous allons voir si WinDev peut nous générer la fenêtre qui va bien. Allez sur Fichier / Nouveau / Fenêtre. Cherchez une fenêtre nommée &lt;b&gt;Vision plus&lt;/b&gt; et validez.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Dans l&#39;Assistant qui arrive, décochez &lt;b&gt;Avec code de rafraîchissement automatique&lt;/b&gt;, puis cliquez sur &lt;b&gt;Suivant&lt;/b&gt; 2 fois, ensuite cliquez sur &lt;b&gt;Composant&lt;/b&gt;, cliquez encore sur &lt;b&gt;Suivant&lt;/b&gt;, vérifiez que tous les champs soient cochés, cliquez encore sur &lt;b&gt;Suivant&lt;/b&gt; 2 fois. Prenez une taille 640*480. Puis saisissez &lt;b&gt;selection&lt;/b&gt; comme &lt;b&gt;Nom&lt;/b&gt;. Enfin cliquez sur &lt;b&gt;T&lt;/b&gt;&lt;b&gt;erminer&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Vous avez maintenant une fenêtre fonctionnelle dans laquelle on peut supprimer le bouton &lt;b&gt;Nouveau&lt;/b&gt; (on peut utiliser la création de composants avec notre 1&lt;sup&gt;er&lt;/sup&gt; bouton du menu). Réduisez-la pour quelle soit plus petite. Voici à quoi elle pourrait ressembler :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image15.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Regardons comment nous pourrions modifier le code pour qu&#39;il nous soit utile. Allez dans le code du bouton &lt;b&gt;OK&lt;/b&gt;. Vous pouvez voir que la fenêtre retourne &lt;b&gt;vrai&lt;/b&gt; si on clique sur &lt;b&gt;OK&lt;/b&gt;, faux sur &lt;b&gt;Annuler&lt;/b&gt;. Qui dit bandeau déplacé dit structure mémoire du fichier contenant les valeurs recherchées ! Donc, nous n&#39;aurons qu&#39;à lancer la fenêtre et tester si elle retourne &lt;b&gt;v&lt;/b&gt;&lt;b&gt;rai&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Fermez-la et retournez sur &lt;b&gt;Gensemble&lt;/b&gt; dans le code du bouton &lt;b&gt;BAjout&lt;/b&gt;. Saisissez la séquence de code suivante :&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e1181&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e1181&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e1181&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e1181&quot; class=&quot;contenuCode&quot;&gt;resultat est un booléen=Faux&lt;br /&gt;resultat=Ouvre(selection)&lt;br /&gt;SI resultat=Vrai ALORS // la fenêtre nous a renvoyé vrai, donc le bandeau a été déplacé&lt;br /&gt;TableAjouteLigne(Table1,Composant.RefComp,Composant.DésignationC,Composant.PrixAHT)&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Je vous laisse méditer sur la différence entre &lt;b&gt;tableajoute&lt;/b&gt; et &lt;b&gt;tableajouteligne&lt;/b&gt; (n&#39;oubliez pas d&#39;utiliser l&#39;aide, touche F1).&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Sauvegardez et exécutez la fenêtre, normalement le clic sur le bouton &lt;b&gt;B&lt;/b&gt;&lt;b&gt;A&lt;/b&gt;&lt;b&gt;jout&lt;/b&gt; lance bien la fenêtre &lt;b&gt;selection&lt;/b&gt; qui nous retourne vrai ou faux selon le bouton cliqué.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Pour saisir la &lt;b&gt;Qté&lt;/b&gt;, cliquez dans la colonne pour saisir le nombre souhaité. N&#39;oubliez pas de vérifier que la Table est &lt;b&gt;En saisie&lt;/b&gt; et d&#39;avoir seule la rubrique Qté &lt;b&gt;En saisie&lt;/b&gt;&lt;b&gt; / actif&lt;/b&gt;, les autres restant en mode &lt;b&gt;Affichage seulement&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Pour le bouton 10 (&lt;b&gt;BSupprime&lt;/b&gt;), la séquence de code a déjà été étudiée lors du TP3. Pour le bouton Nouveau (&lt;b&gt;BNouveau&lt;/b&gt;), il vous faut programmer un traitement qui efface les champs 1, 2, 3 et la table mémoire, vous savez faire, donc je passe.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Le bouton Supprime (&lt;b&gt;BSupp&lt;/b&gt;) va nous obliger à scanner 2 tables et supprimer les références « Ensemble » recherchées. Il faut donc prendre la valeur du champ 1 (RefEns), parcourir la table Intègre sur le champ RefEns et supprimer tous ceux égaux au champ RefEns. Et ensuite le supprimer dans la table Ensemble.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voici une séquence de code qui devrait être efficace :&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e1253&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e1253&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e1253&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e1253&quot; class=&quot;contenuCode&quot;&gt;SI OuiNon(&quot;Voulez vous vraiment supprimer cet enregistrement ?&quot;)=Oui ALORS&lt;br /&gt;HLitRecherche(Intègre,RefEns,RefEns)&lt;br /&gt;TANTQUE HTrouve ET PAS HEnDehors&lt;br /&gt;HSupprime(Intègre)&lt;br /&gt;HLitSuivant(Intègre)&lt;br /&gt;FIN&lt;br /&gt;HLitRecherche(Ensemble,RefEns,RefEns)&lt;br /&gt;SI HTrouve ALORS&lt;br /&gt;HSupprime(Ensemble)&lt;br /&gt;Info(&quot;La suppression est réussie&quot;)&lt;br /&gt;HLitPremier(Ensemble,RefEns)&lt;br /&gt;FIN&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Vous n&#39;avez pas besoin que je vous commente ce code, il est limpide.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;La séquence du bouton &lt;b&gt;Valider&lt;/b&gt; va être un peu plus rude, mais guère plus. En fait, lorsqu&#39;un nouvel ensemble est créé ou modifié par l&#39;adjonction d&#39;un nouveau composant, il va nous falloir faire plusieurs actions différentes.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Il faut supprimer l&#39;ensemble existant dans le fichier pour le recréer avec ses nouveaux composants, donc on commence par une phase de suppression (voir code ci-dessus) et on achève par une phase d&#39;insertion dans le fichier.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Le code est long mais n&#39;est pas complexe, prenez le temps de l&#39;étudier.&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e1277&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e1277&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e1277&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e1277&quot; class=&quot;contenuCode&quot;&gt;i est un entier&lt;br /&gt;&lt;br /&gt;HLitRecherche(Ensemble,RefEns,RefEns)&lt;br /&gt;SI HTrouve ALORS // l&#39;enregistrement existait dans le fichier, on va le supprimer&lt;br /&gt;HLitRecherche(Intègre, RefEns, RefEns)&lt;br /&gt;TANTQUE HTrouve ET PAS HEnDehors&lt;br /&gt;HSupprime(Intègre)&lt;br /&gt;HLitSuivant(Intègre)&lt;br /&gt;FIN&lt;br /&gt;HSupprime(Ensemble)&lt;br /&gt;FIN&lt;br /&gt;// Maintenant inscrivons l&#39;ensemble dans le fichier&lt;br /&gt;Ensemble.RefEns=RefEns&lt;br /&gt;Ensemble.DésignationE=DésignationE&lt;br /&gt;Ensemble.PrixVHT=PrixVHT&lt;br /&gt;HAjoute(Ensemble)&lt;br /&gt;&lt;br /&gt;// Remplissons le fichier Intègre&lt;br /&gt;POUR i=1 A TableOccurrence(Table1) // Pour i=1 aux max de la table mémoire&lt;br /&gt;Intègre.RefComp=Table1.RefComp[i] // [i] indique l&#39;indice de la ligne&lt;br /&gt;Intègre.RefEns=RefEns&lt;br /&gt;Intègre.Qté=Table1.Qté[i]&lt;br /&gt;HAjoute(Intègre)&lt;br /&gt;FIN&lt;br /&gt;Info(&quot;L&#39;ajout c&#39;est bien passé&quot;)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;        &lt;b&gt;Voilà, la super fenêtre de gestion des ensembles est finie. N&#39;oubliez pas de sauvegarder votre ouvre.&lt;/b&gt;       &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;image&quot; style=&quot;text-align: left;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image16.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Le troisième bouton de la barre d&#39;outil sert à imprimer la liste des composants, vous avez déjà étudié la procédure dans le TP 3 donc je n&#39;y reviens pas.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Nous allons nous laisser guider par l&#39;Assistant pour faire un état avec des données provenant des 3 tables. Allez dans &lt;b&gt;F&lt;/b&gt;&lt;b&gt;ichier / Nouveau / Etat&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Choisissez ensuite un type d&#39;état &lt;b&gt;tableau&lt;/b&gt;, cliquez sur &lt;b&gt;S&lt;/b&gt;&lt;b&gt;uivant&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Vérifiez que les données proviennent bien d&#39;une requête et cliquez sur &lt;b&gt;S&lt;/b&gt;&lt;b&gt;uivant&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Faites lui comprendre que les données proviennent d&#39;une requête que vous voulez définir maintenant, cliquez sur &lt;b&gt;S&lt;/b&gt;&lt;b&gt;uivant&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Maintenant vous devez avoir cette fenêtre à l&#39;écran :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image17.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Cliquez ensuite sur &lt;b&gt;Suivant&lt;/b&gt;. A la question « Voulez-vous des ruptures dans l&#39;état » répondez &lt;b&gt;O&lt;/b&gt;&lt;b&gt;ui&lt;/b&gt; et cliquez sur &lt;b&gt;S&lt;/b&gt;&lt;b&gt;uivant&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;La fenêtre suivante vous demande de sélectionner la rupture, vérifiez que &lt;b&gt;Référence d&lt;/b&gt;&lt;b&gt;e l&lt;/b&gt;&lt;b&gt;&#39;ensemble &lt;/b&gt;soit bien coché, cliquez sur &lt;b&gt;S&lt;/b&gt;&lt;b&gt;uivant&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Vous devriez avoir maintenant une fenêtre qui ressemble à ceci :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image18.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Cliquez ensuite sur &lt;b&gt;Suivant&lt;/b&gt;. La fenêtre suivante vous demande quels sont les champs numériques sur lesquels vous voulez effectuer un calcul, essayer de faire en sorte quelle ressemble à ceci :&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-multi-fichiers/images/image19.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Cliquez sur &lt;b&gt;S&lt;/b&gt;&lt;b&gt;uivant&lt;/b&gt;. Les choix suivants concernent les formats du papier, laissez les par défaut et cliquez sur &lt;b&gt;S&lt;/b&gt;&lt;b&gt;uivant&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Choisissez un gabarit et &lt;b&gt;S&lt;/b&gt;&lt;b&gt;uivant&lt;/b&gt;. Nommez cet état &lt;b&gt;Ie&lt;/b&gt;&lt;b&gt;nsemble&lt;/b&gt; (attention, le i est en minuscule), comme titre « Etat des ensembles ». Ouf ! Vous pouvez enfin cliquer sur &lt;b&gt;Terminer&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Comme votre état est plus large que la feuille, passez en mode paysage. Votre état apparaît maintenant dans l&#39;éditeur d&#39;état. Si vous voulez faire quelques retouches, c&#39;est maintenant.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Il ne vous reste plus qu&#39;à activer l&#39;état dans le bouton de la barre d&#39;outils avec la séquence de code suivante :&lt;/div&gt;       &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e1440&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e1440&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e1440&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e1440&quot; class=&quot;contenuCode&quot;&gt;iAperçu(i100)&lt;br /&gt;iImprimeEtat(Iensemble)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Voilà, ce modeste &quot;mini-lab&quot; est fini. Vérifiez que tous les boutons fonctionnent, que les traitements sont cohérents. Il y aurait des améliorations possibles (concevoir un compteur qui totalise les prix HT des composants entrant dans la composition d&#39;un ensemble.). Mais je considère que vous êtes apte à le faire vous-même.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Vous avez mérité la pause syndicale.&lt;/div&gt;&lt;br /&gt;        &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LV&quot;&gt;V. Exercice Pratique&lt;/h1&gt;              &lt;div class=&quot;paragraph&quot;&gt;         &lt;b&gt;Enoncé :&lt;/b&gt;       &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;La municipalité de votre lieu de résidence désire ouvrir une bibliothèque municipale. Connaissant vos nombreuses compétences informatiques, l&#39;adjoint au maire chargé de la culture vous demande de concevoir le logiciel chargé de la gestion des prêts de livre et des achats.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;        &lt;b&gt;Voici quelques éléments de réflexion :&lt;/b&gt;       &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Chaque livre est référencé par un numéro ISBN qui sert d&#39;identifiant et qui est défini de façon internationale, par exemple le livre « Redhat 8 administration et maintenance » écrit par Arnaud Brugnon aux éditions Campus Press a le numéro 2744014516. &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Le directeur de la bibliothèque voudrait pouvoir saisir les références complètes du livre (la date d&#39;achat, son prix d&#39;achat, la quantité achetée, le fournisseur, sa classification : policier, aventure.).&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Cette saisie doit lui permettre de connaître le nombre total de livre en stock, le coût du stock, le nombre et le coût par type de livre, le nombre de livre par auteur avec le titre et la quantité en stock. Si vous avez d&#39;autres statistiques à lui proposer, elles seront les bienvenues.&lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Un client est référencé par un numéro aléatoire généré par la base de données. Les emprunteurs doivent pouvoir être ajoutés, modifiés, supprimés. &lt;/div&gt;&lt;br /&gt;      &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;Les règles de gestion sont les suivantes :&lt;/div&gt;&lt;br /&gt;      &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;Une personne ne peut pas emprunter plus de 3 livres de la bibliothèque. Elle peut en emprunter 3 d&#39;un coup ou les uns après les autres ;&lt;/li&gt;&lt;li&gt;Elle doit ramener un livre 15 jours après son emprunt. Le système doit pouvoir faire un état des livres empruntés non rentrés et éditer un listing avec les noms, prénoms, adresses et N° de téléphone des emprunteurs et la liste des livres qu&#39;ils auraient du rendre. Ainsi, le bibliothécaire pourra téléphoner à la personne pour lui demander de rendre les ouvrages.&lt;/li&gt;&lt;/ul&gt;       &lt;div class=&quot;paragraph&quot;&gt;        &lt;br /&gt;On doit pouvoir imprimer ou visualiser :&lt;/div&gt;&lt;br /&gt;      &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;La liste complète des livres ainsi que leur quantité en stock ;&lt;/li&gt;&lt;li&gt;La liste des livres en prêt ;&lt;/li&gt;&lt;li&gt;La liste des inscrits n&#39;ayant jamais emprunté un livre.&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://windev15.blogspot.com/feeds/4572494163945158153/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://windev15.blogspot.com/2010/02/creation-dun-projet-avec-plusieurs.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1641451758379613344/posts/default/4572494163945158153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1641451758379613344/posts/default/4572494163945158153'/><link rel='alternate' type='text/html' href='http://windev15.blogspot.com/2010/02/creation-dun-projet-avec-plusieurs.html' title='Création d&#39;un projet avec plusieurs fichiers liés'/><author><name>alltips</name><uri>http://www.blogger.com/profile/14375765100631168219</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1641451758379613344.post-5029139956988466599</id><published>2010-02-16T06:35:00.001-08:00</published><updated>2010-02-16T06:35:35.259-08:00</updated><title type='text'>Travailler avec un fichier de données</title><content type='html'>&lt;a href=&quot;http://wind.developpez.com/tutoriels/windev/acces-donnees/&quot; title=&quot;Travailler avec un fichier de données&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LI&quot;&gt;I. Présentation&lt;/h1&gt;        &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;     &lt;tbody&gt;&lt;tr&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       &lt;b&gt;Objectifs&lt;/b&gt; : Travailler avec un fichier de données :Etude du gestionnaire d&#39;analyse,Manipulation        des tables mémoires, Manipulation de données, Création d&#39;états       &lt;/td&gt;     &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    L&#39;objectif de cette leçon est de vous familiariser avec l&#39;utilisation des fichiers, du gestionnaire      d&#39;analyse et de la conception d&#39;états.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Vous allez commencer par créer un nouveau projet nommé TP3. Dans l&#39;assistant, vous sélectionnerez      votre thème préféré, confirmerez le choix de &lt;b&gt;création d&#39;une Analyse&lt;/b&gt; et finirez le processus      de l&#39;assistant. Un nouvel assistant de création d&#39;analyse va apparaître, cliquez sur&lt;b&gt; &lt;/b&gt;&lt;b&gt;S&lt;/b&gt;&lt;b&gt;uivant&lt;/b&gt;.          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Vous pouvez choisir entre un Modèle Logique de Données et un Modèle Conceptuel de Données. Cliquez      sur&lt;b&gt; &lt;/b&gt;&lt;b&gt;S&lt;/b&gt;&lt;b&gt;uivant&lt;/b&gt;&lt;b&gt; &lt;/b&gt;pour choisir le MLD.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Dans la zone Nom de l&#39;analyse appelez là : &lt;b&gt;TP3&lt;/b&gt; et vérifiez qu&#39;elle soit bien associée      au projet en cours, cliquez ensuite sur &lt;b&gt;S&lt;/b&gt;&lt;b&gt;uivant&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Nous ne donnerons pas de mots de passe à l&#39;analyse donc cliquez encore sur &lt;b&gt;S&lt;/b&gt;&lt;b&gt;uivant&lt;/b&gt;.          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Cette nouvelle fenêtre vous demande de choisir le type de base de données que vous voulez &quot;attaquer&quot;.      C&#39;est ici par exemple que vous pourriez décider d&#39;utiliser une base de données tierce du type Mysql,      Access ou autres. Comme le but de cette leçon est de travailler avec WinDev nous allons faire en      sorte de &lt;b&gt;C&lt;/b&gt;&lt;b&gt;réer une nouvelle description de fichier&lt;/b&gt;. Ce choix étant validé nous allons      maintenant créer notre structure de fichier.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Ah oui ! J&#39;ai oublié de vous dire ce que nous allions faire. En fait nous allons programmer      une mini gestion de budget familial. Pour cela on va utiliser un seul fichier des mouvements dans      lequel on inscrira le descriptif des opérations, la date de l&#39;opération, le montant au débit ou le      montant au crédit. Cela devrait vous faire penser à votre relevé de compte bancaire.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Dans la zone &lt;b&gt;Nom&lt;/b&gt;, vous allez indiquer le nom suivant : &lt;b&gt;M&lt;/b&gt;&lt;b&gt;ouvement&lt;/b&gt;. Remarquez      les champs suivants qui se remplissent automatiquement. Vérifiez que la case « Le fichier possède      un identifiant automatique » soit cochée. Nous allons ainsi créer un identifiant automatique      par WinDev. L&#39;identifiant automatique est comparable à un compteur, c&#39;est lui qui vous garantit l&#39;unicité      de vos tuples. Je vous renvoie au cours d&#39;analyse Merise pour les compléments d&#39;informations que      vous pourriez avoir sur le rôle des identifiants !     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Cliquez sur &lt;b&gt;S&lt;/b&gt;&lt;b&gt;uivant&lt;/b&gt;. La nouvelle fenêtre vous demande de confirmer le fait que vous      voulez travailler avec des fichiers de type Hyper file (Format propriétaire WinDev). Cliquez sur      &lt;b&gt;S&lt;/b&gt;&lt;b&gt;uivant&lt;/b&gt;&lt;b&gt; &lt;/b&gt;puis de nouveau sur&lt;b&gt; Suivant&lt;/b&gt;. La nouvelle fenêtre vous propose      des options RAD (Rapid Application Development). Le RAD est à oublier, c&#39;est WinDev qui fait tout,      vous n&#39;apprendrez rien à le voir faire, il vaut mieux que ça soit vous qui créez que lui. Donc décochez      ces cases et cliquez sur &lt;b&gt;Terminer&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Vous voilà maintenant dans le gestionnaire d&#39;analyse, vous vous trouvez plus exactement dans la fenêtre      de description des fichiers. C&#39;est ici que nous allons déterminer la composition de chaque attribut      de notre fichier mouvement.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Vous pouvez remarquer que notre identifiant est déjà créé « Idmouvement » et vous voyez      la clé jaune à gauche qui symbolise l&#39;identifiant. Nous allons insérer les rubriques suivantes :          &lt;/div&gt;&lt;br /&gt;   &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;     &lt;tbody&gt;&lt;tr&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       &lt;b&gt;Nom&lt;/b&gt;      &lt;/td&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       &lt;b&gt;Libellé&lt;/b&gt;      &lt;/td&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       &lt;b&gt;Type&lt;/b&gt;      &lt;/td&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       &lt;b&gt;Taille&lt;/b&gt;      &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       Date       &lt;/td&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       Date de l&#39;opération       &lt;/td&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       Date       &lt;/td&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       Sera rempli automatiquement       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       Descriptif       &lt;/td&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       Description de l&#39;opération       &lt;/td&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       Texte       &lt;/td&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       50       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       Dépense       &lt;/td&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       Montant Débit       &lt;/td&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       Numérique (Format 999 999,99)       &lt;/td&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       Sera rempli automatiquement       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       Recette       &lt;/td&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       Montant Crédit       &lt;/td&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       Idem       &lt;/td&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       Idem       &lt;/td&gt;     &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Pour insérer, cliquez sur une ligne vide dans la rubrique choisie. A vous de bien remplir vos champs,      cela ne devrait vous poser aucun problème. Une fois la saisie terminée, cliquez sur &lt;b&gt;OK&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Vous pouvez maintenant &lt;b&gt;Retourner sous l&#39;éditeur de WinDev&lt;/b&gt;. Choisissez ensuite &lt;b&gt;Aller directement      dans l&#39;éditeur WinDev&lt;/b&gt; et &lt;b&gt;OK&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Voici une représentation de ce que vous devriez obtenir     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;image&quot; style=&quot;text-align: left;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-donnees/images/image1.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Maintenant que votre fichier est décrit, il ne vous reste plus qu&#39;à générer l&#39;analyse.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Nous allons maintenant fabriquer les fenêtres de notre application. Allez dans le menu &lt;b&gt;Fichier&lt;/b&gt;      / &lt;b&gt;Nouveau&lt;/b&gt; et cliquez sur &lt;b&gt;Fenêtre. &lt;/b&gt;Choisissez une fenêtre vierge.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Cette fenêtre sera la première fenêtre de notre application. Dans sa description (clic droit sur      la fenêtre), vous lui donnerez les caractéristiques suivantes :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Nom logique : &lt;b&gt;départ&lt;/b&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Description : &lt;b&gt;Fenêtre principale de l&#39;application&lt;/b&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Titre : &lt;b&gt;Bienvenue dans votre mini compte bancaire&lt;/b&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;b&gt;Appliquez&lt;/b&gt; les modifications et cliquez sur &lt;b&gt;Ok&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Nous allons insérer dans cette fenêtre une table mémoire qui sera le conteneur du fichier. Choisissez      un champ table dans la barre d&#39;outils et positionnez le sur votre fenêtre. Dites à l&#39;assistant que      vous remplirez la table vous-même, cliquez sur &lt;b&gt;Suivant&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Choisissez Type de « &lt;b&gt;Table en affichage&lt;/b&gt; » puis &lt;b&gt;Terminer&lt;/b&gt;. La table est définie      par défaut, allez dans la &lt;b&gt;Description&lt;/b&gt; (clic droit sur la table).     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Respectez les mêmes conventions de nommage que celles indiquées car tout le reste du projet s&#39;appuiera      sur ces noms là !!     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Le nom de la table : Tmouv     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Nom de la colonne 1 : tdate     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Type de la colonne 1 : Date     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Titre de la colonne 1 : Date     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Nom de la colonne 2 : tdescription     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Type de la colonne 2 : Texte     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Titre de la colonne 2 : Description de l&#39;opération     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Taille de saisie : 50     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Nom de la colonne 3 : tdébit     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Type de la colonne 3 : Numérique     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Titre de la colonne 3 : Dépense     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Nom de la colonne 4 : tcrédit     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Type de la colonne 4 : Numérique     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Titre de la colonne 4 : Recette     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Nom de la colonne 5 : clé     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Type de la colonne 5 : Numérique     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Masque de saisie : 999 999 999.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Dans l&#39;onglet &lt;b&gt;IHM &lt;/b&gt;de cette 5&lt;sup&gt;ème&lt;/sup&gt; colonne, décochez &lt;b&gt;Visible&lt;/b&gt;, nous mettrons      dans ce champ l&#39;identifiant de la ligne. Il n&#39;est pas nécessaire de le montrer à l&#39;utilisateur, c&#39;est      pour çà que je vous conseille de le mettre invisible.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Une fois tous les champs renseignés, cliquez sur &lt;b&gt;Appliquer&lt;/b&gt; puis &lt;b&gt;OK&lt;/b&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Voici ce qu&#39;il vous reste à concevoir pour terminer notre projet :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;image&quot; style=&quot;text-align: left;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-donnees/images/image2.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;    &lt;table class=&quot;infobulle&quot; style=&quot;border: 0pt none ; width: 98%; text-align: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 40px; vertical-align: top;&quot; class=&quot;colonne&quot;&gt;&lt;img src=&quot;http://www.developpez.be/images/kitidea.gif&quot; alt=&quot;idea&quot; /&gt;&lt;/td&gt;&lt;td class=&quot;colonne&quot;&gt;     Il me semble que ça fait longtemps que vous n&#39;avez pas sauvegardé votre projet ! ce n&#39;est pas très      prudent. N&#39;oubliez pas de déterminer cette fenêtre comme la première fenêtre du projet     &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Maintenant que le décor est planté, nous pouvons commencer la programmation.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    La premier chose à faire est de dire à WinDev de nous créer le fichier &lt;b&gt;Mouvement&lt;/b&gt; s&#39;il n&#39;existe      pas, pour cela allez dans le menu Projet / Code du projet et dans la zone &lt;b&gt;Initialisation de TP3&lt;/b&gt;      inscrivez le code suivant :     &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e556&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e556&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e556&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e556&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;HCréationSiInexistant(Mouvement)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;     &lt;table class=&quot;infobulle&quot; style=&quot;border: 0pt none ; width: 98%; text-align: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 40px; vertical-align: top;&quot; class=&quot;colonne&quot;&gt;&lt;img src=&quot;http://www.developpez.be/images/kitidea.gif&quot; alt=&quot;idea&quot; /&gt;&lt;/td&gt;&lt;td class=&quot;colonne&quot;&gt; &lt;b&gt;Remarque&lt;/b&gt; : Cette ligne indique à WinDev de commencer à chercher si le fichier &lt;b&gt;Mouvement&lt;/b&gt;        existe, s&#39;il ne le trouve pas il le conçoit. Le code placé dans cette zone est exécuté avant le        chargement de la première fenêtre.     &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Le code du bouton Quitter est très facile : Dans clic sur &lt;b&gt;Quitter&lt;/b&gt; inscrivez :     &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e576&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e576&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e576&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e576&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;Ferme&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Voyons maintenant la décomposition possible des événements. Il faut qu&#39;au chargement de la fenêtre      la table se remplisse avec les enregistrements contenus dans le fichier situé sur le disque dur.      Pour cela nous allons parcourir l&#39;ensemble des lignes du fichier « &lt;b&gt;Mouvement.fic&lt;/b&gt; »      et les placer les unes après les autres dans la table mémoire. C&#39;est ce que nous allons faire maintenant.          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Allez dans le code de la fenêtre dans la zone « &lt;b&gt;Initialisation de départ&lt;/b&gt; » et saisissez      le code suivant :     &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e595&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e595&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e595&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e595&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;HLitPremier(Mouvement,IDMouvement)&lt;br /&gt;TANTQUE PAS HEnDehors&lt;br /&gt;TableAjoute(Tmouv,Mouvement.Date+TAB+Mouvement.Descriptif+TAB+Mouvement.Dépense+TAB+Mouvement.Recette+TAB+Mouvement.IDMouvement)&lt;br /&gt;HLitSuivant(Mouvement)&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;b&gt;Explication du code :&lt;/b&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    HLitPremier(Mouvement,IDMouvement)&lt;i&gt; //&lt;/i&gt;&lt;i&gt; C&lt;/i&gt;&lt;i&gt;ette ligne ordonne à WinDev d&#39;ouvrir le fichier      Mouvement et de lire la première ligne en plaçant les champs correspondants en mémoire.&lt;/i&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    TANTQUE PAS HenDehors&lt;i&gt; //&lt;/i&gt;&lt;i&gt; &lt;/i&gt;&lt;i&gt;Ici on commence une boucle qui sera vraie tant que      l&#39;on reste dans le fichier. Le mot clé Hendehors renvoie Vrai si on est hors du fichier. Donc PAS      HenDehors est vrai tant que la fin du fichier n&#39;est pas atteinte. C&#39;est tout simple en fait, non ?&lt;/i&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;i&gt;La séquence tableajoute est connue&lt;/i&gt;&lt;i&gt;,&lt;/i&gt;&lt;i&gt; elle permet de positionner du texte&lt;/i&gt;&lt;i&gt; -&lt;/i&gt;&lt;i&gt;      ici les rubriques du fichier&lt;/i&gt;&lt;i&gt; -&lt;/i&gt;&lt;i&gt; &lt;/i&gt;&lt;i&gt;à&lt;/i&gt;&lt;i&gt; l&#39;intérieur d&#39;un fichier.&lt;/i&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Hlitsuivant(Mouvement)&lt;i&gt; //&lt;/i&gt;&lt;i&gt; F&lt;/i&gt;&lt;i&gt;ait descendre le pointeur du fichier d&#39;une ligne vers      le bas.&lt;/i&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Le bouton &lt;b&gt;Ajouter&lt;/b&gt; va ouvrir une fenêtre de saisie qui nous permettra de rentrer les informations.      Donc le code sera dans &lt;b&gt;Clic sur&lt;/b&gt;&lt;b&gt;ajout&lt;/b&gt; :     &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e679&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e679&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e679&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e679&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;Ouvre(saisie)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;image&quot; style=&quot;text-align: left;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-donnees/images/image5.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     Il est normal que WinDev vous renvoie un message d&#39;erreur si nous essayons d&#39;exécuter le projet car la      fenêtre saisie n&#39;existe pas, créons-la de suite.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Fichier / Nouveau / Fenêtre     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Dans la description de la fenêtre :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;b&gt;Nom logique&lt;/b&gt; : saisie     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;b&gt;Description&lt;/b&gt; : Fenêtre de saisie     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;b&gt;Titre&lt;/b&gt; : Saisissez votre opération     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Faites glisser les champs &lt;b&gt;Date&lt;/b&gt;, &lt;b&gt;Descriptif&lt;/b&gt;, &lt;b&gt;Dépense&lt;/b&gt;, &lt;b&gt;Recette&lt;/b&gt; sur la fenêtre      &lt;b&gt;saisie&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;image&quot; style=&quot;text-align: left;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-donnees/images/image6.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Votre fenêtre devrait correspondre à celle-ci :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-donnees/images/image7.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;    &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;     &lt;tbody&gt;&lt;tr&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       Pour être sûr que chaque champ est bien lié à une rubrique du fichier, cliquez sur l&#39;un d&#39;entre eux et        vérifiez dans la barre de message en bas à gauche que le message « Lié à : Mouvement.XXXXXX »        soit présent.       &lt;/td&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-donnees/images/image8.png&quot; alt=&quot;&quot; /&gt;      &lt;/td&gt;     &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Cette fenêtre ne comporte que 2 boutons, le bouton &lt;b&gt;Annuler&lt;/b&gt; nous servira juste à fermer la      fenêtre. Vous connaissez la séquence de code le permettant, ce n&#39;est donc plus la peine que je vous      indique la marche à suivre. En cas de problème je vous rappelle que l&#39;aide de WinDev est accessible      par la touche &lt;b&gt;F1&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Consacrons-nous au bouton &lt;b&gt;Valider&lt;/b&gt;, la validation consiste à placer les rubriques de la fenêtre      dans le fichier et à valider l&#39;ajout. Pour placer les rubriques de la fenêtre dans le fichier, l&#39;ordre      est le suivant :     &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e780&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e780&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e780&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e780&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;EcranVersFichier(saisie) // saisie étant le nom de la fenêtre&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    La validation d&#39;ajout est commandée par l&#39;ordre suivant :     &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e788&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e788&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e788&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e788&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;HAjoute(Mouvement) // Mouvement étant le fichier dans lequel on ajoute&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Il nous reste plus qu&#39;à ajouter un ordre de fermeture de la fenêtre.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Voici le code intégral du bouton &lt;b&gt;Valider&lt;/b&gt; :     &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e804&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e804&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e804&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e804&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;EcranVersFichier(saisie)&lt;br /&gt;HAjoute(Mouvement)&lt;br /&gt;Ferme&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Vous pouvez faire en sorte de programmer le contrôle pour qu&#39;il vérifie que l&#39;on n&#39;a qu&#39;un débit      ou qu&#39;un crédit, ou alors que l&#39;un des champs n&#39;est pas vide. Le code à placer juste avant celui      que l&#39;on voit ci-dessus pourrait ressembler à ceci :     &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e812&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e812&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e812&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e812&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;SI Date=&quot;&quot; OU Descriptif=&quot;&quot; OU (Dépense=0 ET Recette=0) ALORS&lt;br /&gt;Info(&quot;L&#39;un des champs n&#39;a pas été rempli !&quot;)&lt;br /&gt;Ferme&lt;br /&gt;FIN&lt;br /&gt;SI Dépense &lt;&gt;0 ET Recette &lt;&gt;0 ALORS&lt;br /&gt;Info(&quot;Vous ne pouvez saisir qu&#39;un montant au Débit ou alors au Crédit !&quot;)&lt;br /&gt;Ferme&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     Testez votre fenêtre avec le bouton &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-donnees/images/image9.png&quot; alt=&quot;&quot; /&gt; ou en cliquant à droite de l&#39;écran      sur la fenêtre avec le bouton droit pour choisir &lt;b&gt;Tester&lt;/b&gt;. Insérez des valeurs dans les champs      et validez.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Pour voir si votre nouvelle ligne est présente dans le fichier, allez dans le menu &lt;b&gt;Outils / WDMAP&lt;/b&gt;      et choisissez &lt;b&gt;Mouvement&lt;/b&gt; comme &lt;b&gt;Nom du fichier&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Maintenant que vos lignes s&#39;insèrent, lancez le projet en cliquant sur GO&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-donnees/images/image9.png&quot; alt=&quot;&quot; /&gt;.          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Cliquez sur le bouton &lt;b&gt;Ajouter&lt;/b&gt;, saisissez et validez un nouvel enregistrement. Vous pouvez      constater que la table mémoire ne réagit pas correctement : en effet l&#39;insertion n&#39;a pas été      détectée et donc la table mémoire n&#39;est pas synchronisée avec le fichier. Nous allons essayer de      remédier à ce problème. En fait, il faudrait que lorsque la fenêtre &lt;b&gt;s&lt;/b&gt;&lt;b&gt;aisie&lt;/b&gt; se ferme,      la fenêtre &lt;b&gt;départ&lt;/b&gt; recharge la table mémoire.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Placez-vous dans le code de la fenêtre &lt;b&gt;dé&lt;/b&gt;&lt;b&gt;part&lt;/b&gt;, vous&lt;b&gt; &lt;/b&gt;devez trouver une zone      nommée &lt;b&gt;« prise de focus de d&lt;/b&gt;&lt;b&gt;é&lt;/b&gt;&lt;b&gt;part »&lt;/b&gt;. La prise de focus est le fait      de remettre active une fenêtre inactive, en cliquant sur la barre de titre par exemple.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Voici le code à insérer dans cette zone :     &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e885&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e885&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e885&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e885&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;TableSupprimeTout(Tmouv) // Efface la table mémoire pour éviter d&#39;insérer les enregistrements à la suite des précédents&lt;br /&gt;HLitPremier(Mouvement,IDMouvement)&lt;br /&gt;TANTQUE PAS HEnDehors&lt;br /&gt;TableAjoute(Tmouv,Mouvement.Date+TAB+Mouvement.Descriptif+TAB+Mouvement.Dépense+TAB+Mouvement.Recette+TAB+Mouvement.IDMouvement)&lt;br /&gt;HLitSuivant(Mouvement)&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Testez cette modification, comme vous le voyez, les comportements sont maintenant cohérents.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Intéressons-nous au bouton &lt;b&gt;Supprimer&lt;/b&gt;. Dans la table, nous avons une rubrique qui est l&#39;identifiant      de la ligne. Pour supprimer cette ligne dans le fichier nous allons donc rechercher cet identifiant      dans le fichier et supprimer la ligne correspondante.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Voici la séquence de code nécessaire :     &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e906&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e906&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e906&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e906&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;HLitRecherche(Mouvement,IDMouvement,clé)&lt;br /&gt;SI HTrouve ALORS&lt;br /&gt;HSupprime(Mouvement)&lt;br /&gt;Info(&quot;La suppression est effective&quot;)&lt;br /&gt;SINON&lt;br /&gt;Info(&quot;Grave problème de l&#39;application&quot;)&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;b&gt;Explications :&lt;/b&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    La première ligne fait rechercher dans le fichier Mouvement et sur l&#39;identifiant la valeur du champ      &lt;b&gt;clé&lt;/b&gt; pointée dans notre table mémoire. Ce n&#39;est pas parce que la rubrique &lt;b&gt;clé&lt;/b&gt; est invisible      que nous ne pouvons pas en connaître la valeur.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Si on trouve la ligne ayant le même identifiant que &lt;b&gt;clé&lt;/b&gt; alors on la supprime et on affiche      un message indiquant la bonne marche des opérations. Sinon dans un cas fort improbable où il ne trouve      pas l&#39;enregistrement on inscrit un message d&#39;erreur.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Je vous laisse le soin de tester cette nouvelle fonctionnalité de votre programme. Comme vous venez      de le remarquer, la mise à jour de la table mémoire ne s&#39;est pas faite. La valeur a été supprimée      mais la table ne le sait pas. Nous allons remédier à ce problème.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Le code de réaffichage de la table mémoire existe déjà (ex : dans la zone de &lt;b&gt;prise de focus&lt;/b&gt;      de la fenêtre &lt;b&gt;départ&lt;/b&gt;) nous allons donc ré-exécuter un traitement existant. Sous la ligne « Info(&quot;La      suppression est effective&quot;) » inscrivez la commande suivante :     &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e952&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e952&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e952&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e952&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;ExécuteTraitement(depart,trtPriseFocus)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Cette commande fait rejouer un traitement existant.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Testez et vérifiez la cohérence de votre projet.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Maintenant &lt;b&gt;nous avons à calculer le solde&lt;/b&gt; (Débit - Crédit), pour ce faire nous allons créer      une procédure qui scannera le fichier et fera les calculs pour nous.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/acces-donnees/images/image10.png&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;       &lt;table class=&quot;infobulle&quot; style=&quot;border: 0pt none ; width: 98%; text-align: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 40px; vertical-align: top;&quot; class=&quot;colonne&quot;&gt;&lt;img src=&quot;http://www.developpez.be/images/kitidea.gif&quot; alt=&quot;idea&quot; /&gt;&lt;/td&gt;&lt;td class=&quot;colonne&quot;&gt;       Remarques : Les procédures locales ne sont vues que par les objets de la fenêtre, les procédures        globales sont actives pour tous les éléments du projet     &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;     &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Maintenant, vérifiez bien que vous vous trouvez dans la zone &lt;b&gt;code&lt;/b&gt; de la procédure &lt;b&gt;calcsolde&lt;/b&gt;.          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Le code doit parcourir le fichier Mouvement, affecter le contenu de &lt;b&gt;débit&lt;/b&gt; dans une variable,      le contenu de &lt;b&gt;crédit&lt;/b&gt; dans une autre et cela jusqu&#39;à la fin du fichier et ensuite affecter      la différence entre le débit et le crédit au champ &lt;b&gt;solde&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Voici le code de la procédure :     &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e1009&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e1009&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e1009&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e1009&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;PROCEDURE calcsolde()&lt;br /&gt;sdebit,scredit sont des réels=0 // on affecte la valeur 0 aux deux variables&lt;br /&gt;&lt;br /&gt;HLitPremier(Mouvement,IDMouvement)&lt;br /&gt;TANTQUE PAS H.endehors&lt;br /&gt;Sdebit+=Mouvement.Dépense // += signifie Sdebit=Sdebit+Mouvement.Dépense&lt;br /&gt;Scredit+=Mouvement.Recette&lt;br /&gt;HLitSuivant(Mouvement,IDMouvement)&lt;br /&gt;FIN&lt;br /&gt;&lt;br /&gt;solde=sdebit-scredit&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Le code est suffisamment simple pour ne pas avoir à l&#39;expliquer. La question qui se pose est où lancer      &lt;b&gt;calcsolde&lt;/b&gt;. Les plus rusés d&#39;entre vous auront compris qu&#39;il nous faut activer cette procédure      aux mêmes endroits où l&#39;on a activé le rafraîchissement de la table mémoire. Je vous laisse modifier      les zones de code en conséquence (dans le &lt;b&gt;code&lt;/b&gt; de la fenêtre &lt;b&gt;départ&lt;/b&gt;). N&#39;oubliez pas      de tester la cohérence de votre projet.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Il ne nous reste plus qu&#39;à fabriquer l&#39;état de sortie. Choisissez &lt;b&gt;Fichier / Nouveau / Etat&lt;/b&gt;.      Choisissez un état de type &lt;b&gt;Tableau&lt;/b&gt;. En cliquant sur &lt;b&gt;Suivant&lt;/b&gt; WinDev vous demande la      source de donnée, il vous faut préciser que ce sont des enregistrements provenant d&#39;un fichier Hyper      file. Sélectionnez le fichier &lt;b&gt;Mouvement&lt;/b&gt;, la clé de parcours est un identifiant qui sert pour      donner l&#39;ordre de tri. Continuez à appuyer sur &lt;b&gt;Suivant&lt;/b&gt;, je vous laisse découvrir les questions      posées et à vous de prendre les bonnes décisions. Vous savez lire, donc vous prendrez les bonnes      décisions ! Je vous demande juste d&#39;appeler l&#39;état &lt;b&gt;Etatmouv&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;table class=&quot;infobulle&quot; style=&quot;border: 0pt none ; width: 98%; text-align: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 40px; vertical-align: top;&quot; class=&quot;colonne&quot;&gt;&lt;img src=&quot;http://www.developpez.be/images/kitidea.gif&quot; alt=&quot;idea&quot; /&gt;&lt;/td&gt;&lt;td class=&quot;colonne&quot;&gt;       Remarques : Les détails du choix du style, de la mise en forme sont à votre discrétion, faites comme        bon vous semble. N&#39;oubliez pas que le client n&#39;a pas les mêmes goûts graphiques que vous, donc        faites sobre. Eviter les styles « &lt;b&gt;Noir sur fond Noir&lt;/b&gt; » &lt;b&gt;« Rose sur fond        Vert »&lt;/b&gt; et autres singularités visuelles qui feront penser à l&#39;utilisateur qu&#39;il devient        déficient visuel.     &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Une fois votre état fini et enregistré, entrez dans la zone &lt;b&gt;code&lt;/b&gt; du bouton &lt;b&gt;Imprime&lt;/b&gt; :          &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e1069&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;titre_code&quot;&gt;other&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e1069&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e1069&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e1069&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;iAperçu(i100) // On enverra l&#39;état à l&#39;écran avec un zoom de 100 %&lt;br /&gt;iImprimeEtat(Etatmouv) // Génération de l&#39;état et utilisation des paramètres définis par iApercu&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;table class=&quot;infobulle&quot; style=&quot;border: 0pt none ; width: 98%; text-align: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 40px; vertical-align: top;&quot; class=&quot;colonne&quot;&gt;&lt;img src=&quot;http://www.developpez.be/images/kitidea.gif&quot; alt=&quot;idea&quot; /&gt;&lt;/td&gt;&lt;td class=&quot;colonne&quot;&gt;       Remarques : Les Commandes WinDev sont classées. Celles qui commencent par H sont des commandes d&#39;accès        aux fichiers, celles qui commencent par i sont des commandes de pilotage d&#39;état.     &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;     &lt;table class=&quot;infobulle&quot; style=&quot;border: 0pt none ; width: 98%; text-align: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 40px; vertical-align: top;&quot; class=&quot;colonne&quot;&gt;&lt;img src=&quot;http://www.developpez.be/images/kitidea.gif&quot; alt=&quot;idea&quot; /&gt;&lt;/td&gt;&lt;td class=&quot;colonne&quot;&gt;     N&#39;oubliez pas de &lt;b&gt;refaire ce TP plusieurs fois&lt;/b&gt;, le but étant de se passer du guide papier et d&#39;apprécier      la facilité avec laquelle on peut travailler avec WinDev.     &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;      &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LII&quot;&gt;II. Exercices applicatifs&lt;/h1&gt;        &lt;br /&gt;&lt;h2 class=&quot;TitreSection1&quot; id=&quot;LII-A&quot;&gt;II-A. Répertoire d&#39;amis&lt;/h2&gt;          &lt;div class=&quot;paragraph&quot;&gt;      &lt;b&gt;Enoncé : &lt;/b&gt;     &lt;/div&gt;&lt;br /&gt;    &lt;div class=&quot;paragraph&quot;&gt;      &lt;br /&gt;     Ecrire un programme gérant un fichier des amis. Pour chacun d&#39;eux, on souhaite connaître le nom,       le prénom et le numéro de Téléphone.      &lt;/div&gt;&lt;br /&gt;    &lt;div class=&quot;paragraph&quot;&gt;      &lt;br /&gt;     Faites en sorte que le programme puisse permettre à l&#39;utilisateur de :      &lt;/div&gt;&lt;br /&gt;    &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;       Saisir un nouvel ami.       &lt;/li&gt;&lt;li&gt;       Supprimer l&#39;ami qui vous a fait une embrouille.       &lt;/li&gt;&lt;li&gt;       Modifier le numéro de téléphone d&#39;un ami.       &lt;/li&gt;&lt;li&gt;       Imprimer la liste des amis.       &lt;/li&gt;&lt;li&gt;       Afficher le nombre d&#39;amis.       &lt;/li&gt;&lt;li&gt;       Quitter.       &lt;/li&gt;&lt;/ul&gt;        &lt;br /&gt;&lt;h2 class=&quot;TitreSection1&quot; id=&quot;LII-B&quot;&gt;II-B. La Vidéothèque&lt;/h2&gt;          &lt;div class=&quot;paragraph&quot;&gt;      &lt;b&gt;Enoncé :&lt;/b&gt;     &lt;/div&gt;&lt;br /&gt;    &lt;div class=&quot;paragraph&quot;&gt;      &lt;br /&gt;     Un proche vous demande de lui concevoir un programme d&#39;archivage de ses casettes vidéo. Il veut       connaître le titre du film, l&#39;année de sortie, l&#39;acteur masculin principal, l&#39;actrice féminine principale       et le genre du film (comédie, dramatique, policier, western, enfants, adultes..) Il vous demande       aussi des états imprimés triés soit par année de sortie, soit par genre, soit avec aucun tri.      &lt;/div&gt;&lt;br /&gt;    &lt;div class=&quot;paragraph&quot;&gt;      &lt;br /&gt;     Comme vous êtes un développeur consciencieux, vous allez faire un programme qui apporte toutes satisfactions       à votre ami.      &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://windev15.blogspot.com/feeds/5029139956988466599/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://windev15.blogspot.com/2010/02/travailler-avec-un-fichier-de-donnees.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1641451758379613344/posts/default/5029139956988466599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1641451758379613344/posts/default/5029139956988466599'/><link rel='alternate' type='text/html' href='http://windev15.blogspot.com/2010/02/travailler-avec-un-fichier-de-donnees.html' title='Travailler avec un fichier de données'/><author><name>alltips</name><uri>http://www.blogger.com/profile/14375765100631168219</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1641451758379613344.post-7942700036026391035</id><published>2010-02-16T06:34:00.001-08:00</published><updated>2010-02-16T06:34:58.764-08:00</updated><title type='text'>Connaître les objets de base de WinDev.</title><content type='html'>&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LI&quot;&gt;I. Présentation&lt;/h1&gt;        &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;     &lt;tbody&gt;&lt;tr&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       &lt;b&gt;Objectifs&lt;/b&gt; : Connaître les objets de base de WinDev avec manipulation des :combo-box, interrupteurs,        tables mémoires.&lt;br /&gt;      &lt;b&gt;Pré requis&lt;/b&gt; : Connaître l&#39;éditeur WinDev        &lt;/td&gt;     &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Pour cette seconde partie, nous allons créer des fenêtres comportant plusieurs objets de base dont      nous allons étudier le comportement.     &lt;/div&gt;&lt;br /&gt;   &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;      Créez un projet nommé TP2 sans Analyse et une fenêtre nommée « sélecteurs » et « Bonjour »       pour &lt;b&gt;Titre&lt;/b&gt;.      &lt;/li&gt;&lt;/ul&gt;      &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LII&quot;&gt;II. Champ Sélecteur&lt;/h1&gt;        &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Insérez un champ sélecteur à l&#39;intérieur de votre fenêtre.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Allez dans sa description (clic droit / Description) dans la zone &lt;b&gt;Nom&lt;/b&gt; du champ inscrivez :      Civilité. Idem dans le &lt;b&gt;Libellé&lt;/b&gt; du champ.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Dans la zone &lt;b&gt;Options&lt;/b&gt; inscrivez :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;b&gt;Madame &lt;/b&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;b&gt;Mademoiselle&lt;/b&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;b&gt;Monsieur&lt;/b&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Rajouter un champ de saisie que vous nommerez &lt;b&gt;choix&lt;/b&gt; avec comme libellé « Elément sélectionné : ».          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Votre fenêtre doit ressembler à ceci :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Vous allez faire en sorte que le champ « Elément sélectionné » se renseigne selon la Civilité.      Pour cela, allez dans le &lt;b&gt;Code&lt;/b&gt; du champ « civilité » (clic droit) dans la zone « A      chaque modification de Civilité » et saisissez le code suivant :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;          &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e217&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e217&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e217&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e217&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;SELON Civilité&lt;br /&gt;CAS 1: choix=&quot;Madame&quot;&lt;br /&gt;CAS 2: choix=&quot;Mademoiselle&quot;&lt;br /&gt;CAS 3: choix=&quot;Monsieur&quot;&lt;br /&gt;FIN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     Comme vous le remarquez, WinDev ne renvoi pas le libellé du choix effectué mais l&#39;index (ou position)      de l&#39;élément (1, 2 ou 3).     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Testez la fenêtre en cliquant sur Go.     &lt;/div&gt;&lt;br /&gt;     &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LIII&quot;&gt;III. Les listes déroulantes&lt;/h1&gt;        &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Créez une nouvelle fenêtre que vous nommerez « liste » et « Liste déroulante »      en &lt;b&gt;Titre&lt;/b&gt;. A droite de l&#39;écran, cliquez sur le 2&lt;sup&gt;ème&lt;/sup&gt; onglet puis sur le bouton droit      de la souris pour pouvoir choisir &lt;b&gt;Nouvelle fenêtre&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    A l&#39;intérieur, placez :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Une combo (&lt;b&gt;Créer une combo&lt;/b&gt;) que vous nommerez « liste » et qui aura comme libellé      « Civilité » (ne pas saisir de liste de valeurs à afficher).     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Un champ de saisie nommé « &lt;b&gt;choix&lt;/b&gt; » et ayant « &lt;b&gt;Choix&lt;/b&gt; » comme libellé.          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Un bouton nommé « remplir » et ayant comme libellé « Remplir la liste Civilité ».          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    La fenêtre ressemblera à ceci :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Nous allons programmer le bouton pour qu&#39;il remplisse la combo avec les éléments souhaités (Madame,      Mademoiselle, Monsieur). Puis nous allons définir le comportement de la combo pour qu&#39;elle affecte      le champ « choix ».     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Dans la zone « Clic sur &lt;b&gt;remplir&lt;/b&gt; » du &lt;b&gt;Code&lt;/b&gt; du bouton écrivez le code suivant :          &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e298&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e298&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e298&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e298&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;ListeSupprimeTout(liste) // Pour éviter d&#39;ajouter les éléments à chaque clic sur le bouton&lt;br /&gt;ListeAjoute(liste,&quot;Madame&quot;)&lt;br /&gt;ListeAjoute(liste,&quot;Mademoiselle&quot;)&lt;br /&gt;ListeAjoute(liste,&quot;Monsieur&quot;)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     Vérifiez que votre liste soit correctement remplie en cliquant sur le bouton &lt;b&gt;Remplir&lt;/b&gt; puis en l&#39;ouvrant      avec la flèche vers le bas :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;image&quot; style=&quot;text-align: left;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/objets-windev/images/image7.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Dans la zone « sélection d&#39;une ligne de. » du &lt;b&gt;Code&lt;/b&gt; de la combo &lt;b&gt;Civilité&lt;/b&gt; écrivez      le code suivant :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    choix=liste..ValeurAffichée     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Par cette simple ligne vous demandez à la combo de copier la valeur affichée dans le champ « choix ».          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;b&gt;Sauvegardez et testez la fenêtre.&lt;/b&gt;    &lt;/div&gt;&lt;br /&gt;     &lt;table class=&quot;infobulle&quot; style=&quot;border: 0pt none ; width: 98%; text-align: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 40px; vertical-align: top;&quot; class=&quot;colonne&quot;&gt;&lt;img src=&quot;http://www.developpez.be/images/kitidea.gif&quot; alt=&quot;idea&quot; /&gt;&lt;/td&gt;&lt;td class=&quot;colonne&quot;&gt;        N&#39;oubliez pas d&#39;utiliser l&#39;aide pour approfondir vos connaissances !!       &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;       &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LIV&quot;&gt;IV. Les tables mémoires&lt;/h1&gt;        &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Le champ table permet de simplifier l&#39;affichage et la saisie d&#39;informations stockées en mémoire ou      provenant d&#39;un fichier de données, d&#39;une vue ou d&#39;une requête. Une table est composée de lignes et      de colonnes. L&#39;intersection d&#39;une ligne et d&#39;une colonne définit une cellule. Une table peut être      gérée ligne par ligne, colonne par colonne ou cellule par cellule.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Les informations affichées dans la table peuvent :     &lt;/div&gt;&lt;br /&gt;   &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;      être déterminés par programmation : on parle alors de &lt;i&gt;&lt;b&gt;Table Mémoire&lt;/b&gt;&lt;/i&gt; ;      &lt;/li&gt;&lt;/ul&gt;    &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;      provenir d&#39;un fichier de données ou d&#39;une requête : on parle alors de &lt;i&gt;&lt;b&gt;Table fichier&lt;/b&gt;&lt;/i&gt;&lt;i&gt;.&lt;/i&gt;     &lt;/li&gt;&lt;/ul&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Les tables permettent de sélectionner un ou plusieurs éléments de la table.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;b&gt;Pour créer un champ de type Table :&lt;/b&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;      Sous l&#39;éditeur de fenêtres, cliquez sur l&#39;icône .      &lt;/li&gt;&lt;/ul&gt;    &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;      Cliquez dans la fenêtre à la position où le champ doit être créé. L&#39;assistant de création d&#39;un champ       table se lance automatiquement.      &lt;/li&gt;&lt;/ul&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Pour afficher les caractéristiques du champ, sélectionnez l&#39;option « Description » dans      le menu contextuel du champ. Deux types d&#39;informations peuvent être visualisées :     &lt;/div&gt;&lt;br /&gt;   &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;      les informations concernant la table dans son ensemble (il suffit de sélectionner le nom de la table) ;            &lt;/li&gt;&lt;/ul&gt;    &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;      les informations concernant chacune des colonnes de la table (il suffit de sélectionner le nom d&#39;une       des colonnes de la table).      &lt;/li&gt;&lt;/ul&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Pour notre exemple, créez une fenêtre nommée « &lt;b&gt;tablemem &lt;/b&gt;» et « Table mémoire »      pour Titre, créez un champ de type table et positionnez le sur la fenêtre.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Indiquez à l&#39;assistant que vous allez remplir la table vous-même. Cliquez sur &lt;b&gt;Terminer&lt;/b&gt; pour      sortir de l&#39;Assistant, sans vous soucier des autres choix qu&#39;il vous propose. Nous allons modifier      manuellement les propriétés de la table.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Pour ce faire, cliquez sur la table avec le bouton droit de la souris pour faire apparaître le menu      contextuel. Choisissez « &lt;b&gt;Description&lt;/b&gt; ».     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Nommez la table « &lt;b&gt;matable&lt;/b&gt; ».     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Créez 3 colonnes en appuyant 2 fois sur le bouton « &lt;b&gt;Nouveau&lt;/b&gt; ».     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Pour la première colonne : Nommez la « &lt;b&gt;Nom&lt;/b&gt; », son type restera &lt;b&gt;Texte&lt;/b&gt;,      dans la zone « &lt;b&gt;Titre&lt;/b&gt; » de l&#39;onglet « &lt;b&gt;Général&lt;/b&gt; » incrivez « &lt;b&gt;Le&lt;/b&gt;&lt;b&gt;Nom&lt;/b&gt; ».      Dans la zone « &lt;b&gt;taille&lt;/b&gt;&lt;b&gt;de&lt;/b&gt;&lt;b&gt;saisie&lt;/b&gt; » inscrivez &lt;b&gt;« 50 »&lt;/b&gt;.      Ainsi l&#39;utilisateur ne pourra pas inscrire un nom de plus de 50 caractères.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Pour la deuxième colonne : Nommez la « &lt;b&gt;Prénom&lt;/b&gt; », son type sera &lt;b&gt;Texte&lt;/b&gt;,      dans la zone « &lt;b&gt;Titre&lt;/b&gt; », inscrivez « &lt;b&gt;Le&lt;/b&gt;&lt;b&gt;Prénom&lt;/b&gt; » et 20 caractères      de taille de saisie.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Pour la troisième colonne : Nommez la « &lt;b&gt;Age&lt;/b&gt; », son type sera &lt;b&gt;Numérique&lt;/b&gt;,      dans la zone « &lt;b&gt;Titre&lt;/b&gt; » inscrivez « &lt;b&gt;Age&lt;/b&gt; », dans la combo « &lt;b&gt;masque&lt;/b&gt;&lt;b&gt;de&lt;/b&gt;&lt;b&gt;saisie&lt;/b&gt; »      trouvez le masque « &lt;b&gt;999&lt;/b&gt; » (en haut de liste), cela signifie que seuls des entiers      de 3 chiffres maximum seront acceptés.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Une fois ces manipulations réalisées vous pouvez cliquer sur « &lt;b&gt;Appliquer&lt;/b&gt; » et « &lt;b&gt;Ok&lt;/b&gt; »      pour valider vos choix.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Ajouter 4 Boutons :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Le premier se nommera « &lt;b&gt;remplirtable&lt;/b&gt; » et aura comme libellé « &lt;b&gt;Remplir&lt;/b&gt; » ;          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Le second se nommera « &lt;b&gt;supligne&lt;/b&gt; » et aura comme libellé « &lt;b&gt;Supprimer&lt;/b&gt; » ;          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Le troisième se nommera « &lt;b&gt;videtable&lt;/b&gt; » et aura comme libellé « &lt;b&gt;Vider&lt;/b&gt;&lt;b&gt;la&lt;/b&gt;&lt;b&gt;table&lt;/b&gt; » ;          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Le quatrième se nommera « &lt;b&gt;quitter&lt;/b&gt; » et comme libellé « &lt;b&gt;Quitter&lt;/b&gt; ».          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Voici une représentation de votre fenêtre :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/objets-windev/images/image11.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Nous allons étudier les différents codes permettant de remplir la table avec des informations, supprimer      la ligne sélectionnée, vider complètement la table et enfin fermer la fenêtre.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Dans la zone « &lt;b&gt;Clic sur remplirtable&lt;/b&gt; » du bouton « &lt;b&gt;Remplir&lt;/b&gt; », insérez      le code suivant (n&#39;hésitez pas à employer le copier-coller pour éviter de le retaper) :     &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e624&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e624&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e624&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e624&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;TableAjoute(matable,&quot;Auguy&quot;+TAB+&quot;Amandine&quot;+TAB+14)&lt;br /&gt;TableAjoute(matable,&quot;Durand&quot;+TAB+&quot;Cédric&quot;+TAB+11)&lt;br /&gt;TableAjoute(matable,&quot;Baptiste&quot;+TAB+&quot;Sylvain&quot;+TAB+5)&lt;br /&gt;TableAjoute(matable,&quot;Dumas&quot;+TAB+&quot;Béatrice&quot;+TAB+35)&lt;br /&gt;TableAjoute(matable,&quot;Martin&quot;+TAB+&quot;Jean-Luc&quot;+TAB+37)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     « Auguy » correspond au Nom, « Amandine » au Prénom et « 14 » à l&#39;âge.      TAB indique le changement de colonne.     &lt;/div&gt;&lt;br /&gt;    &lt;table class=&quot;infobulle&quot; style=&quot;border: 0pt none ; width: 98%; text-align: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 40px; vertical-align: top;&quot; class=&quot;colonne&quot;&gt;&lt;img src=&quot;http://www.developpez.be/images/kitinfo.gif&quot; alt=&quot;info&quot; /&gt;&lt;/td&gt;&lt;td class=&quot;colonne&quot;&gt;Utilisez l&#39;aide pour avoir plus de renseignements sur la fonction Tableajoute.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;      &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Dans la zone « &lt;b&gt;clic sur supligne&lt;/b&gt; » de « &lt;b&gt;Supprimer&lt;/b&gt; », insérez le      code suivant :     &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e644&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e644&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e644&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e644&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;TableSupprime(matable)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     Dans la zone « &lt;b&gt;clic sur videtable&lt;/b&gt; » de « &lt;b&gt;Vider la table&lt;/b&gt; », insérez      le code suivant :     &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e656&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e656&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e656&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e656&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;TableSupprimeTout(matable)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     Dans la zone « &lt;b&gt;clic sur quitter&lt;/b&gt; » de « &lt;b&gt;Quitter&lt;/b&gt; », insérez le code suivant :          &lt;/div&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table style=&quot;margin: 10px auto; width: 90%; border-collapse: collapse;&quot; id=&quot;codeTabled0e668&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;div id=&quot;codeWrapperd0e668&quot; class=&quot;codeWrapper&quot;&gt;&lt;div id=&quot;codeOverflowd0e668&quot; style=&quot;overflow: auto;&quot;&gt;&lt;pre&gt;&lt;code id=&quot;contenuCoded0e668&quot; class=&quot;contenuCode&quot;&gt;&lt;br /&gt;Ferme&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     Testez les différents boutons et appuyez sur la loupe (à coté du nom de la colonne) pour tester son comportement      par défaut.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Comme vous pouvez le constater, WinDev est puissant et peu de lignes de codes suffisent. Il est bien      évident que le remplissage de la table peut être fait à partir de la lecture d&#39;un fichier.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Pour terminer ce cours, il nous reste à faire une fenêtre de départ comportant 3 boutons qui      ouvriront les différentes fenêtres.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Créez donc une nouvelle fenêtre vierge que vous nommerez « &lt;b&gt;depart&lt;/b&gt; », son &lt;b&gt;Titre&lt;/b&gt;      sera « Bonjour ». Insérez-y 4 boutons : 3 serviront à lancer les fenêtres, 1 à quitter      l&#39;application :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/objets-windev/images/image12.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Pour indication, le code d&#39;ouverture d&#39;une fenêtre est : ouvre, le code de fermeture est :      ferme. Je vous laisse mettre le code correspondant.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Il ne vous restera qu&#39;à ne pas oublier d&#39;enregistrer cette fenêtre pour pouvoir la déclarer comme      première fenêtre du projet.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Dans la zone exploratrice des éléments du projet, faites un clic droit sur la fenêtre départ et choisissez      « &lt;b&gt;Première&lt;/b&gt;&lt;b&gt;fenêtre&lt;/b&gt;&lt;b&gt;du&lt;/b&gt;&lt;b&gt;projet&lt;/b&gt; ».     &lt;/div&gt;&lt;br /&gt;     &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LV&quot;&gt;V. Exercice applicatif&lt;/h1&gt;        &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Créez un projet exo1tp2 et une fenêtre nommée « &lt;b&gt;départ&lt;/b&gt; » ressemblant à celle ci :          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/objets-windev/images/image14.png&quot; alt=&quot;image&quot; /&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Le but de l&#39;exercice, comme vous le voyez, est de remplir la table en utilisant dans le code du bouton      &lt;b&gt;Calcul&lt;/b&gt; les valeurs contenues dans les champs « &lt;b&gt;Multiplicateur&lt;/b&gt; » et « &lt;b&gt;Profondeur&lt;/b&gt; ».      Pour ce faire, vous utiliserez la structure itérative « &lt;b&gt;Pour&lt;/b&gt; ».     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Comme toujours, n&#39;hésitez pas à utiliser l&#39;aide.     &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://windev15.blogspot.com/feeds/7942700036026391035/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://windev15.blogspot.com/2010/02/connaitre-les-objets-de-base-de-windev.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1641451758379613344/posts/default/7942700036026391035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1641451758379613344/posts/default/7942700036026391035'/><link rel='alternate' type='text/html' href='http://windev15.blogspot.com/2010/02/connaitre-les-objets-de-base-de-windev.html' title='Connaître les objets de base de WinDev.'/><author><name>alltips</name><uri>http://www.blogger.com/profile/14375765100631168219</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1641451758379613344.post-8148295846115093142</id><published>2010-02-16T06:33:00.000-08:00</published><updated>2010-02-16T06:34:19.483-08:00</updated><title type='text'>Connaître les éléments de base de l&#39;éditeur WinDev</title><content type='html'>&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LI&quot;&gt;I. Présentation&lt;/h1&gt;        &lt;div style=&quot;text-align: center;&quot;&gt;&lt;table class=&quot;tableau&quot; style=&quot;margin: 0px auto; text-align: left;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;     &lt;tbody&gt;&lt;tr&gt;      &lt;td class=&quot;colonne&quot; style=&quot;&quot;&gt;       &lt;b&gt;Objectifs&lt;/b&gt; :Connaître les éléments de base de l&#39;éditeur WinDev. Création d&#39;un convertisseur Francs        / Euro.&lt;br /&gt;      &lt;b&gt;Pré requis&lt;/b&gt; :Aucun       &lt;/td&gt;     &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Pour ce premier cours, nous allons créer un convertisseur Franc / Euro.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Lancer WinDev 10 en double cliquant sur son icône: &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img1.JPG&quot; alt=&quot;&quot; /&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    La fenêtre d&#39;accueil apparaît (si ce n&#39;est pas le cas, fermez le projet, quittez puis relancez WinDev) :          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img2.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Cliquez sur &lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;b&gt;C&lt;/b&gt;&lt;/span&gt;&lt;b&gt;réer un projet&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    La fenêtre Assistant vous indique qu&#39;elle va vous aider en fonction de vos choix. On n&#39;en attend      pas moins d&#39;elle.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Cliquez sur &lt;b&gt;Suivant&lt;/b&gt;. Cette fenêtre va vous permettre de saisir le nom de ce nouveau projet      et le lieu de stockage physique des éléments constitutifs.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img3.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Inscrivez « convertisseur » dans la zone nom, il sera repris automatiquement dans le champ      du bas. Continuez en cliquant sur &lt;b&gt;Suivant&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Créez un Type de projet &lt;b&gt;Exécutable &lt;/b&gt;puis&lt;b&gt; Suivant&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img4.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Comme vous travaillez seul pour cet écran, faites un clic sur &lt;b&gt;suivant&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img5.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Cliquez sur &lt;b&gt;ne pas utiliser de charte de programmation&lt;/b&gt; et ensuite sur &lt;b&gt;suivant&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img6.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Prenez le Thème de Gabarit par défaut ou choisissez en un autre. Cliquez sur &lt;b&gt;Suivant&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img7.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Le choix des langues ne nous intéresse pas pour l&#39;instant. Cliquez sur &lt;b&gt;Suivant&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img8.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Choisissez &lt;b&gt;Ne pas utiliser d&#39;Analyse&lt;/b&gt; puisque pour notre projet nous n&#39;utiliserons pas de fichiers      de données.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img9.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Continuez en cliquant sur &lt;b&gt;Suivant &lt;/b&gt;et&lt;b&gt; Terminer&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    L&#39;assistant va vous poser la dernière question ? Voulez vous créer une fenêtre ? Cliquez &lt;b&gt;Créer      une fenêtre&lt;/b&gt; puis choisissez &lt;b&gt;Vierge&lt;/b&gt; dans l&#39;onglet&lt;b&gt; Standard&lt;/b&gt;. Validez par &lt;b&gt;OK&lt;/b&gt;.          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img10.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    A ce stade nous avons une fenêtre vide dans l&#39;éditeur. Il nous reste à lui donner un nom, une taille      et définir quelques comportements.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Placez la souris dans la fenêtre vierge et faites un clic droit. Dans ce menu contextuel, validez      &lt;b&gt;Description&lt;/b&gt;. Vous obtenez la fenêtre à remplir comme ci-dessous :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img11.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Remplissez les divers champs de façons identiques et sélectionnez l&#39;onglet&lt;b&gt; IHM &lt;/b&gt;(&lt;b&gt;I&lt;/b&gt;nterface      &lt;b&gt;H&lt;/b&gt;omme-&lt;b&gt;M&lt;/b&gt;achine).     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img12.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Changez la taille, le fait qu&#39;elle ne sera pas redimensionnable puis validez par &lt;b&gt;OK&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Remarquez les différences, vous avez maintenant une fenêtre avec un nom, un titre et une taille définie.          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     Il est temps de sauvegarder, Cliquez sur &lt;b&gt;Fichier&lt;/b&gt; puis &lt;b&gt;Enregistrer&lt;/b&gt;&lt;b&gt;.&lt;/b&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;b&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img13.JPG&quot; alt=&quot;&quot; /&gt;&lt;/b&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Cliquez sur le bouton &lt;b&gt;Enregistrer&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    A l&#39;intérieur de cette fenêtre, placez 4 objets : 3 &quot;&lt;b&gt;champs de saisie&lt;/b&gt;&quot; et un bouton (faites      un glisser/déposer ou drag &amp;amp; drop des champs dans la fenêtre « Bienvenue dans le méga convertisseur »).          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img14.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Le premier champ se nommera &lt;b&gt;franc&lt;/b&gt; et aura comme libellé &quot;Zone francs :&quot;. Cliquez 2 fois      dessus pour en modifier les caractéristiques :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img15.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Le second se nommera &lt;b&gt;taux&lt;/b&gt; et aura comme libellé &quot;Taux de change :&quot;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Le troisième se nommera &lt;b&gt;conver&lt;/b&gt;&lt;b&gt;tir&lt;/b&gt; et aura comme libellé &quot;Résultat de la conversion :&quot;.      Le bouton (sans cliquer sur la petite flèche vers le bas placée juste en dessous) enfin se nommera      &lt;b&gt;calcule&lt;/b&gt; et aura comme libellé &quot;calcule&quot;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Voici à quoi doit ressembler votre fenêtre (avec en surimpression le nom des champs) :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img16.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Il nous reste à mettre le code correspondant dans le bouton &quot;calcule&quot;. Pour cela, faites un clic      droit dessus et choisissez &quot;&lt;b&gt;Code&lt;/b&gt;&quot;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img17.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Entrez la séquence comme indiqué ci-dessus puis fermez la fenêtre de l&#39;éditeur de code : cliquez      sur l&#39;icône de fermeture en haut à droite de l&#39;écran (croix du bas).     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img18.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Il est temps d&#39;enregistrer notre projet par le menu &lt;b&gt;Fichier / Enregistrer tout&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Une fois l&#39;enregistrement achevé, nous allons tester le projet, pour cela cliquez sur &lt;b&gt;Lancer le      test du projet&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img19.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    WinDev vous demande de définir la première fenêtre de notre méga projet, choisissez &quot;&lt;b&gt;depart&lt;/b&gt;&quot;      dans la combo et &lt;b&gt;validez&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Vous avez maintenant devant vous notre super convertisseur. Mais avouez qu&#39;il est franchement moche      :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    - trop grand ;     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    - couleurs tristes ;     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    - et même des comportements par défaut peu pratiques.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;b&gt;Lesquels ?&lt;/b&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    C&#39;est simple : Essayez de saisir le taux de conversion de l&#39;euro 6,55957 !     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Comme vous le voyez, le champ ne prend que 2 chiffres après la virgule ! De plus vous allez être      obligé de le saisir à chaque fois !!! Ah, c&#39;est beau l&#39;informatique !!!     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Nous allons remédier à tous ces petits détails :     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Pour la taille de la fenêtre, placez votre souris sur l&#39;angle inférieur droit de la fenêtre &quot;depart&quot; :          &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img20.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Une fois que le curseur change d&#39;aspect, tenez appuyé le bouton gauche de la souris et remontez vers      l&#39;angle supérieur gauche. Relâchez la souris quand la taille souhaitée sera atteinte.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    La couleur de fond n&#39;est pas très gaie. Clic droit n&#39;importe où dans la fenêtre : &lt;b&gt;Description&lt;/b&gt;,      puis onglet &lt;b&gt;Style &lt;/b&gt;et&lt;b&gt; &lt;/b&gt;Combo &quot;&lt;b&gt;Gabarit en cours&lt;/b&gt;&quot;. Prenez Orange. Validez 2      fois par &lt;b&gt;Ok&lt;/b&gt;.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Ce n&#39;est pas plus beau ainsi ? Quoi, bof ?! De toute façon maintenant vous savez faire, alors prenez      la couleur qui vous plait le plus !     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Changeons le comportement du bouton &quot;taux&quot;, faites un clic droit dessus, &lt;b&gt;Description&lt;/b&gt;. Vérifiez      que le type soit &lt;b&gt;Numérique&lt;/b&gt;. Maintenant dans la zone Masque de saisie&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img21.JPG&quot; alt=&quot;&quot; /&gt;,      frappez &lt;b&gt;9,99999&lt;/b&gt;. Appliquez les modifications puis cliquez sur le bouton &lt;b&gt;Editer le code&lt;/b&gt;&lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img22.JPG&quot; alt=&quot;&quot; /&gt; (en bas à gauche).     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Insérer le code : &lt;b&gt;MoiMême=6.55957&lt;/b&gt; dans la zone &quot;Initialisation de&lt;b&gt; taux&lt;/b&gt;&quot;. Ainsi à chaque      démarrage du convertisseur la zone de saisie sera remplie. Notez que nous aurions pu écrire : taux=6.55957.      MoiMême désigne l&#39;objet dans lequel on se trouve.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img23.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Refermez la fenêtre en cliquant sur la croix du bas (en haut à droite).     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Relancer le test de l&#39;application en cliquant sur &lt;img src=&quot;http://wind.developpez.com/tutoriels/windev/editeur-windev/images/img24.JPG&quot; alt=&quot;&quot; /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     et utilisez votre super convertisseur.     &lt;/div&gt;&lt;br /&gt;     &lt;br /&gt;&lt;h1 class=&quot;TitreSection0&quot; id=&quot;LII&quot;&gt;II. Exercice applicatif.&lt;/h1&gt;        &lt;div class=&quot;paragraph&quot;&gt;     Créez une application « EXO1 » contenant :     &lt;/div&gt;&lt;br /&gt;   &lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;      une fenêtre      &lt;/li&gt;&lt;li&gt;      2 champs textes      &lt;/li&gt;&lt;li&gt;      1 champ numérique      &lt;/li&gt;&lt;li&gt;      1 bouton      &lt;/li&gt;&lt;/ul&gt;    &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Lorsque l&#39;utilisateur clique sur le bouton, les champs textes se remplissent avec votre nom dans      le premier champ, votre prénom dans le deuxième champ texte et votre année de naissance dans le champ      numérique que vous aurez pré-programmés.     &lt;/div&gt;&lt;br /&gt;   &lt;div class=&quot;paragraph&quot;&gt;     &lt;br /&gt;    Vous avez toute liberté au niveau de l&#39;ergonomie, du nommage des champs, de la fenêtre, du bouton.      Je vous rappelle que tout le code doit être contenu dans le bouton.     &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://windev15.blogspot.com/feeds/8148295846115093142/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://windev15.blogspot.com/2010/02/connaitre-les-elements-de-base-de.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1641451758379613344/posts/default/8148295846115093142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1641451758379613344/posts/default/8148295846115093142'/><link rel='alternate' type='text/html' href='http://windev15.blogspot.com/2010/02/connaitre-les-elements-de-base-de.html' title='Connaître les éléments de base de l&#39;éditeur WinDev'/><author><name>alltips</name><uri>http://www.blogger.com/profile/14375765100631168219</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>