Académique Documents
Professionnel Documents
Culture Documents
Auto-Formation
GAF WinDev.BOOK Page 2 Mardi, 11. juillet 2006 5:42 17
WinDev 10 Express
Documentation version 10 (1) - 0606
Version d’évaluation
Visitez régulièrement le site www.pcsoft.fr, espace actualités pour vérifier si des mises à jour sont proposées.
Cette documentation n’est pas contractuelle. PC SOFT se réserve le droit de modifier ou de supprimer tout
sujet traité dans ce document.
Tous les noms de produits ou autres marques cités dans cet ouvrage sont des marques déposées par leurs propriétaires respectifs.
© PC SOFT 2006 : Aucune reproduction intégrale ou partielle du présent ouvrage sur quelque support que ce soit ne peut être effectuée sans
l’autorisation expresse de PC SOFT.
GAF WinDev.BOOK Page 3 Mardi, 11. juillet 2006 5:42 17
SOMMAIRE
Licence d’utilisation
Licence d’utilisation du logiciel en version "Express" .........................................................................................19
Onglet "Note"...........................................................................................................................................155
Onglet "Aide" ...........................................................................................................................................155
Onglet "Style"...........................................................................................................................................155
La barre de message d’une fenêtre ................................................................................................................... 156
Les plans d’une fenêtre ....................................................................................................................................... 156
Traitements associés à une fenêtre .................................................................................................................. 157
Déclarations globales.............................................................................................................................157
Initialisation.............................................................................................................................................157
Fermeture................................................................................................................................................157
Prise de focus .........................................................................................................................................157
Perte de focus.........................................................................................................................................158
Modification de la taille..........................................................................................................................158
Fenêtres générées..................................................................................................................................246
Conclusion ............................................................................................................................................................ 247
10
11
PARTIE 7 : PROGRAMMATION
Leçon 7.1. Le multi-fenêtrage
Présentation ......................................................................................................................................................... 320
Manipulations sur une fenêtre en W-Langage ................................................................................................. 321
Ouverture et fermeture d'une fenêtre...................................................................................................321
Iconiser une fenêtre ...............................................................................................................................322
Une fenêtre dans tous ses états ! .........................................................................................................323
Positionnement d’une fenêtre par rapport à une autre ......................................................................323
Exemples .............................................................................................................................................................. 323
Exemple de programme gérant le multi fenêtrage de fenêtres libres (non MDI) ..............................323
Exemple de programme gérant des fenêtres MDI...............................................................................327
Accès aux champs, aux procédures et aux traitements .................................................................................. 330
12
13
14
Partie 9 : Communication
15
16
17
Conclusion
Annexe
Sommaire
18
Sommaire
19
LICENCE D’UTILISATION
Licence d’utilisation du logiciel en version "Express"
Attention: En installant et en utilisant un logiciel WINDEV version Express vous avez accepté les
termes de la licence suivante :
Le LOGICIEL désigne le droit d'utilisation du logiciel WinDev, dans cette version de démonstration
(appelée également Version Express, Version d'évaluation ou Version limitée).
L'EVALUATEUR représente la personne (physique ou morale) installant et / ou utilisant le logiciel.
1. Version Express
Ce LOGICIEL est proposé ici dans une version de "démonstration".
Cette version de démonstration est exclusivement destinée au test de ses fonctionnalités, et/ou à
une utilisation par des étudiants d'un établissement reconnu par l'état pendant la durée de leurs
études, en dehors de toute utilisation commerciale, partielle ou totale.
De nombreuses fonctionnalités sont bridées, limitées ou différentes de la version "commerciale".
Pour créer des applications destinées à être utilisées, il est nécessaire d'acquérir et d'utiliser une
version "commerciale" et non cette version de démonstration et de test.
Il est strictement interdit de créer en totalité ou en partie une ou des applications dans un autre but
que le TEST du LOGICIEL, ou la réalisation de Travaux Pratiques dans le cadre d'études.
L'utilisation des applications créées dans un but autre que le test de courte durée est interdite.
Toute utilisation autre que l'essai du logiciel, et/ou une utilisation pour une durée supérieure à
celle autorisée, constitue une utilisation illégale qui donnera lieu à des poursuites.
Il est interdit de dupliquer et diffuser ce logiciel, même dans cette version de démonstration, sans
l'accord écrit de PC SOFT.
2. Licence
Ce LOGICIEL doit être utilisé sur une et une seule machine par une et une seule personne à un ins-
tant donné. Le LOGICIEL est déclaré utilisé dès qu'il se trouve en "mémoire centrale" (également
appelée RAM) d'un ordinateur.
Ce logiciel ne peut être utilisé que pour la durée autorisée.
Introduction
3. Propriété du LOGICIEL
Ce logiciel est la propriété de PC SOFT. L'EVALUATEUR a simplement acquis le droit d'utiliser ce
LOGICIEL selon les conditions définies.
4. Documentation
La duplication de la documentation, en totalité ou en partie, est strictement interdite.
20
5. Utilisation
L'EVALUATEUR doit utiliser le LOGICIEL pour l'usage pour lequel il est diffusé. Il est interdit de modi-
fier ou tenter de modifier ce LOGICIEL, de désassembler ou tenter de désassembler ce LOGICIEL. Il
est interdit d'enlever ou de tenter d'enlever les mentions de copyright pouvant apparaître et/ou
étant contenues dans le LOGICIEL.
La location ou le prêt de ce LOGICIEL est interdit.
Il est interdit d'utiliser WinDev "Express" pour créer et diffuser tout ou partie d'outil de développe-
ment, de LOGICIEL de création d'applications, de générateur de programmes, ou de tout LOGICIEL
de même nature que WinDev lui-même. Interrogez-nous en cas de doute.
Les fonctions de génération de code JAVA ne peuvent être utilisées que dans le cadre de la manipu-
lation habituelle du LOGICIEL, dans le but de créer une APPLICATION autonome.
Le code généré par WinDev "Express" ne doit pas être réutilisé dans d’autres logiciels ou dispositifs
de création de logiciel. Le code généré avec cette fonctionnalité ne peut pas être inclus dans un
logiciel, payant ou gratuit, qui ferait concurrence à WINDEV, WINDEV MOBILE ou WEBDEV, en tota-
lité ou en partie.
6. Absence de responsabilités
Le LOGICIEL et la documentation qui l'accompagne sont fournis en l'état, SANS AUCUNE GARANTIE
D'AUCUNE SORTE. PC SOFT ne saurait être tenu pour responsable pour tout dommage de quelque
nature que ce soit, et en particulier en cas de perte ou détérioration des données, en cas de perte
financière, en cas de perte d'exploitation, en cas de divergence des informations contenues dans la
documentation avec le comportement du LOGICIEL, en cas de comportement du LOGICIEL différent
de celui attendu. L'EVALUATEUR est seul et unique responsable du fonctionnement et du support
des programmes qu'il aura réalisé avec le LOGICIEL.
7. Cas particuliers
7.1 Compilateur d'aide
Si le LOGICIEL est accompagné du compilateur d'aide "MS Help Compiler", il est précisé que la
société Microsoft en détient les droits. PC SOFT ne détient que le droit de permettre à l'EVALUA-
TEUR de créer et diffuser des aides réalisées à l'aide de ce compilateur d'aide.
21
Acceptation de la licence :
Le fait de conserver et d'utiliser ce logiciel indique la compréhension et l'acceptation des termes de
cette licence.
Ce contrat ne peut pas être modifié, sauf par un courrier original paraphé de la direction générale
de PC SOFT.
Ce contrat de licence est régi par le droit français; tout litige qui pourrait en résulter sera de la com-
pétence exclusive des tribunaux du siège social de PC SOFT.
PC SOFT,
3, rue de Puech Villa
BP 44 408
34197 Montpellier Cedex 5
France
Introduction
22
INTRODUCTION
Préliminaires
Attention : ce manuel est un cours d'auto-formation. Il est conseillé de consulter l’aide en ligne lors-
que vous utilisez WinDev.
Le manuel du cours d'auto-formation a pour objectif de vous faire découvrir WinDev, de vous fami-
liariser avec les éditeurs et de vous apprendre les concepts de WinDev. Ce manuel n'est PAS
exhaustif des possibilités de WinDev.
Consacrez au moins deux journées pour suivre ce cours et pour apprendre WinDev : vous les renta-
biliserez vite !
Si vous essayez de démarrer le développement d'une application sans avoir suivi ce cours, vous
perdrez du temps, beaucoup plus que deux jours.
WinDev évoluant en permanence, les copies des fenêtres illustrant le cours peuvent être différen-
tes de celles du produit que vous possédez.
L’aspect langage n’est qu’un des nombreux aspects de développement. En prenant en compte
tous les aspects du développement, la programmation devient beaucoup plus simple.
Vous disposez en Annexe, page 474, d’un glossaire récapitulant les termes utilisés qui pourraient
vous poser des difficultés.
Au fil de la lecture du cours, si vous voulez approfondir un concept ou si vous voulez avoir plus de
détails sur une fonction de programmation, consultez l'aide en ligne (accessible directement
depuis les éditeurs ou dans le guide).
La taille d’une leçon n’est pas obligatoirement proportionnelle à son intérêt ...
N'oubliez pas d'étudier ensuite les dizaines d'exemples livrés avec WinDev : ils sont très
didactiques !
23
Le guide
Le guide regroupe plus de 150 assistants et de nombreux exemples. Accessible grâce à la "sou-
coupe" ( ) il vous permettra de vous familiariser avec les fonctionnalités de WinDev et
même de découvrir des fonctionnalités que vous ne connaissiez pas ou peu ! La soucoupe est affi-
chable par l’option "Affichage .. Barre d’outils .. Soucoupe".
Ce symbole présente une "Astuce", la lecture du texte associé est vivement conseillée.
24
Mais le suivi de ce nouveau cours ne pourra être que bénéfique : ce sera une bonne occasion de
"réviser" les possibilités de WinDev !
WinDev est un outil de développement complet qui intègre tous les outils nécessaires au cycle de
réalisation d’une application.
Contrairement à d’autres langages de développement traditionnels, il n’est pas nécessaire de cher-
cher et de rajouter des modules pour pouvoir concevoir, tester et installer une application.
Le L5G (Langage de 5ème Génération) de WinDev, le W-Langage, vous étonnera par sa simplicité :
quelques heures suffisent pour appréhender le langage, une semaine suffit en général pour maîtri-
ser toute sa puissance !
Comme il est en français, le W-Langage (disponible également en anglais) vous fera gagner du
temps !
Introduction
Si vous ne connaissez pas WinDev, il est conseillé de suivre la leçon “Avant de commencer ...”,
page 29.
25
Environnement de travail
Les principales nouveautés de l’environnement de travail :
• Editeur de projet :
•Gestionnaire de sources.
•Positionnement personnalisé des différents volets et onglets de l’environnement (volet "Pro-
jet", volet "Analyse", ...).
•Perso-Notes : Saisie des penses-bêtes dans les différents éléments du projet (option "Nou-
velle Perso-Notes" du menu contextuel).
•FishEye : Zoom sur la partie du graphe du projet survolée (icone "FishEye").
•Détection des éléments non-utilisés dans le projet avec possibilité de les supprimer et de
les archiver (option "Outils .. Nettoyer le répertoire du projet").
•Image des composants dans les perso-dossiers.
•Débranchement d’un warning donné (option "Ne plus afficher" du menu contextuel).
• Editeur de fenêtres :
•Nouveaux champs : champ Graphe, champ Zone Répétée.
•RID (Rapid graphical Interface Design) : Possibilité de créer uniquement l’interface des fenê-
tres en fonction de l’analyse du projet.
•Zoom interactif : Zoom d’une partie spécifique d’une fenêtre (option "Affichage .. Barres
d’outils .. Modules additionnels .. Zoom interactif").
•Onglet "Détail" des champs : options visuelles et donc facilement compréhensibles.
•Multilangue : description des différents formats des dates, des heures, des monétaires et
des numériques pour une langue donnée (onglet "Langues" dans la description du projet).
• Editeur d’états :
•Possibilité de fournir gratuitement avec l’application le logiciel "Etats et Requêtes". Ce logi-
ciel permet de créer et de modifier les états et requêtes de l’application.
•Champ clicable et champ Lien en aperçu.
•Gabarits personnalisables pour l’aperçu avant impression.
Introduction
• Editeur de code :
•Brique de code : possibilité de saisir des morceaux de code réutilisable (option "Code .. Bri-
ques de code .. Gestionnaire des briques de code").
•Bulle d’aide sur une fonction : affichage des valeurs de retour.
•Saisie assistée : propose les paramètres des fenêtres.
•Complétion : liste les éléments déjà manipulés.
•Correction automatique : propose une liste des corrections possibles.
•Correcteur orthographique des variables.
•Gestion centralisée des erreurs.
•Préfixage automatique des variables et des champs.
•Débogueur : débogage multithread, débogage des composants, saisie de code possible
pendant le débogage, édition de classes, des tableaux, ...
26
• Editeur d’UML :
•Mise à jour automatique du diagramme lors de la modification du code d’une classe ou
d’une structure.
• Editeur de modélisation :
Nouvel éditeur permettant de modéliser facilement et sans contrainte les différentes éta-
pes d’un traitement, l’organisation d’un service, le déroulement d’un mode opératoire, ...
• Bases de données :
•Utilitaire HFDiff : compare le contenu de deux fichiers de données de structure identique.
•Hyper File Client/Serveur : support des transactions, journalisation, contraintes d’intégrité.
•3-Tiers
Programmation
Les principales nouveautés de programmation :
• Analyse d’impact des modifications effectuées.
• Création de procédures par sélection de code.
• Parcours des tableaux du langage, des lignes sélectionnées ou de toutes les lignes d’un
champ table (instruction POUR TOUT).
• Interrogation directive : amélioration de la compréhension des messages destinés aux utilisa-
teurs.
• Importation de données access améliorée.
• Nouvelles fonctions :
•Fonctions de gestion du planificateur (fonctions PlanificateurXXX).
•Fonctions de gestion des champs Zone Répétée (fonctions ZoneRépétéeXXX).
•Fonctions de chronométrage (fonctions ChronoXXX).
•Fonctions de manipulation des annuaires LDAP (fonctions LDAPXXX).
•Fonctions de gravage de CD-ROM
•Fonctions de gestion des ports USB (fonctions USBXXX)
•Fonctions de gestion des données attachées aux photos numériques.
•Fonctions de gestion des couleurs TSL.
•...
PARTIE 1
A la découverte de WinDev
GAF WinDev.BOOK Page 28 Mardi, 11. juillet 2006 5:42 17
GAF WinDev.BOOK Page 29 Mardi, 11. juillet 2006 5:42 17
29
Durée estimée : 1h
30
WinDev permet à vos équipes de réaliser toutes les applications dont vous rêvez.
L’environnement de WinDev se présente de la manière suivante :
Partie 1 : A la découverte de WinDev
WinDev 10 permet de créer des applications qui gèrent des données. Les applications WinDev
accèdent à toutes les bases de données, relationnelles ou non du marché. Toutes les bases de
données sont supportées. WinDev 10 est livré en standard avec :
• Hyper File Classic, une puissante base de données relationnelle, déjà utilisée sur des millions de
sites !
• Hyper File Client / Serveur, une puissante base de données relationnelle Client/Serveur.
31
Survol de WinDev
Pour cette leçon, vous allez effectuer vos premières manipulations (simples, rassurez-vous !) sous
l’environnement de WinDev 10.
4 •Lancez WinDev 10 :
soit en cliquant sur l’icone du bureau :
4 1.
Sélectionnez l’option "Ouvrir un projet exemple".
Sélectionnez le répertoire "Exemples didactiques\WD Requetes".
2. Sélectionnez ensuite le fichier "WD Requetes.wdp".
32
3. Validez en cliquant sur le bouton "Ouvrir". L’application "WD Requetes" s’ouvre sous WinDev.
Partie 1 : A la découverte de WinDev
L’environnement de WinDev
L’environnement de travail WYSIWYG ("Ce que vous voyez est ce que vous aurez") de WinDev 10
apporte un confort à la productivité.
Le volet "Projet" donne une vision globale du projet : un double-clic (ou un "Drag and
Drop") sur un élément ouvre cet élément directement dans l’éditeur approprié.
Le contenu peut être affiché sous forme de liste ou de "TreeView" (notre exemple).
L’environnement de WinDev 10 est très intuitif. Les différents volets peuvent être affichés à tout
moment grâce à l’option "Affichage .. Barre d’outils".
33
4 1.
Vous allez ouvrir une fenêtre de l’exemple "WD Requetes". Pour cela :
Cliquez sur le bouton "WD Requetes" présent dans la barre de documents ouverts.
2. Dans le graphe du projet affiché, tapez rapidement le nom de la fenêtre à ouvrir : "Menu".
Cette fenêtre est la première fenêtre du projet : c’est la première fenêtre qui sera affichée lors
du démarrage de l’application. Cette fenêtre apparaît sur un fond orange dans le graphe du pro-
jet.
3. Double-cliquez sur la fenêtre sélectionnée pour l’ouvrir.
En réalisant cette manipulation vous avez pu constater qu’une information est apparue en haut à
droite du graphe du projet. Lors du survol de cette information, l’ADD (Aide Au Développement)
vous indique une autre possibilité pour ouvrir rapidement vos éléments du projet.
Vous pouvez tester cette astuce : la recherche d’éléments par la combinaison de touches
[CTRL]+[E]. Il suffit de saisir les lettres contenues dans l’élément recherché pour que la liste des
éléments correspondants s’affiche :
34
L’éditeur de fenêtres
L’éditeur de fenêtres de WinDev permet de réaliser simplement de superbes fenêtres reliées aux
données. La fenêtre que vous venez d’ouvrir s’est affichée sous l’éditeur de fenêtres de WinDev.
Vous pouvez observer différents champs dans cette fenêtre.
Partie 1 : A la découverte de WinDev
4 Positionnez votre souris dans la fenêtre, au-dessus d’un texte ou d’une image. Cliquez avec le
bouton gauche de la souris.
Le champ est alors sélectionné.
Vous pouvez constater que des informations concernant le champ sont affichées dans la barre de
messages.
Ces informations correspondent au nom du champ sélectionné, à sa position, sa taille ainsi que le
zoom d’affichage actuel sous l’éditeur de fenêtres.
35
Grâce à un double-clic sur le champ, vous pouvez accéder à toutes les caractéristiques du champ :
nom, libellé, liaison avec un fichier de données, ...
L’éditeur de code
Le langage intégré de WinDev, le W-Langage, permet de décrire tous les traitements désirés. Le W-
Langage est un L5G (Langage de 5ème Génération) qui simplifie énormément la programmation de
vos applications Windows.
L’éditeur de code participe à la puissance et à la productivité de WinDev. La saisie du code est
intuitive, rapide et se fait directement dans le champ ou la fenêtre concernée.
Tous les événements sont gérés : clic, double-clic, touche pressée, survol de la souris, ...
Pour un plus grand confort et une meilleure lisibilité, chaque mot est coloré en fonction de son
type.
Par exemple, dans la fenêtre de code que vous venez d’ouvrir :
• Le mot "Ouvre" est en bleu : c’est une fonction du W-Langage.
• Le mot "FenInfo" est en cyan : c’est un élément du projet.
• La phrase "Code SQL généré" est colorée en mauve : c’est une chaîne de caractères affichée
à l’écran.
Vous disposez également d’une assistance à la saisie de code : lors de la frappe du nom d’une
fonction, le type de paramètre attendu par cette fonction est affiché dans une bulle d’aide ainsi
36
que dans la barre de messages de WinDev. La complétion sur les noms des variables ou des fonc-
tions utilisées est également proposée lors de la saisie du code.
Chaque champ, chaque éditeur et chaque fonction ou propriété du W-Langage possèdent une aide
en ligne.
4 1.
Vous allez visualiser l’aide de la fonction Ouvre. Pour cela :
Positionnez le curseur de la souris sur le nom de la fonction "Ouvre".
2. Appuyez sur la touche [F1] de votre clavier. La page d’aide associée à la fonction est alors
affichée.
Partie 1 : A la découverte de WinDev
Dans cette page d’aide, la documentation de la fonction est affichée pour tous les produits, les lan-
gages, les plate-formes disponibles. Pour voir la documentation concernant uniquement un produit,
un langage ou une plate-forme, il suffit de cliquer sur les icones de la barre d’outils de la fonction.
L’éditeur d’analyses
L’analyse est une phase importante de la description d’une application. L’analyse permet de
décrire la structure des données utilisées par l’application.
Grâce à WinDev, il est facile de définir les analyses, sur des données nouvelles ou existantes. Tout
cela se fait de manière très intuitive.
L’éditeur d’analyses permet de créer votre base de données, les fichiers de données et les liaisons
entre ces fichiers de données.
4 Vous allez ouvrir l’analyse de l’exemple "WD Requetes". Pour cela, sélectionnez l’option de
menu "Projet .. Charger l’analyse".
37
WinDev 10 permet de créer des applications reliées à des données grâce au RAD (option de menu
"Atelier .. RAD Application Complète").
L’éditeur de requêtes
L’éditeur de requêtes permet de créer automatiquement des requêtes sur des fichiers de données,
aussi bien des requêtes simples que complexes. Cela simplifie la programmation : fenêtres, tables,
combos, états ... pourront s’appuyer sur des requêtes.
4 1.
Vous allez ouvrir une requête de l’exemple "WD Requetes". Pour cela :
Sélectionnez l’option "Fichier .. Ouvrir ...",
2. Sélectionnez le fichier "RequeteCalcul.WDR".
3. Cliquez sur "Ouvrir".
38
Il est inutile de connaître le SQL pour créer de puissantes requêtes : le code SQL est automatique-
ment généré par WinDev.
4 Sélectionnez l’option de menu "Requête .. Code SQL".
39
Le code SQL généré par WinDev est affiché dans l’éditeur de requêtes :
L’éditeur d’états
L’éditeur d’états permet de créer rapidement des états imprimables directement depuis vos appli-
cations. Un assistant est systématiquement proposé pour créer des états : il pose les questions
permettant de n’oublier aucun élément !
4 1.
Vous allez ouvrir un état de l’exemple "WD Requetes". Pour cela :
Sélectionnez l’option "Fichier .. Ouvrir ...".
2. Sélectionnez le fichier "EtatRequeteCalcul.WDE".
40
Vous pouvez saisir du code W-Langage dans tous les éléments d’un état : vous pourrez ainsi réali-
ser les traitements les plus spécifiques, sans jamais rencontrer de blocage.
Vous pourrez également générer du HTML, du XML, du XLS, du PDF ou du RTF en un clin d’oeil ! De
plus, il n’y a pas de redevances ou de royalties à verser pour diffuser les états avec vos applications
WinDev !
L’éditeur d’aide
WinDev est livré avec un éditeur d’aide permettant de créer les fichiers d’aide associés à votre
application. Vous pouvez créer l’aide en même temps que vous développez votre application. Ainsi,
vos utilisateurs pourront consulter l’aide de votre application à tout moment.
L’éditeur d’installation
Le générateur d’installation crée des programmes d’installation sur CD ou disquettes, mais égale-
ment des fichiers auto-extractibles (utile pour proposer un programme en téléchargement sur Inter-
net). L’installation sur le poste final est plus rapide.
L’installation "Réseau" est gérée automatiquement. Vous avez ainsi la certitude que chaque poste
utilisera la dernière version de votre application.
Vous pouvez également réaliser une installation à partir d’un serveur WEB (serveur HTTP) : les utili-
sateurs pourront télécharger l’application à partir d’un site Internet.
Partie 1 : A la découverte de WinDev
En conclusion
Vous avez pu survoler une partie de l’environnement de WinDev 10.
Vous pourrez explorer plus en détail les principales fonctionnalités de WinDev en suivant ce cours
d’auto-formation.
Vous disposez à tout moment d’une aide en ligne accessible par la touche [F1] de votre clavier.
Vous avez également la possibilité de contacter le Support Technique Gratuit de PC SOFT et accé-
der au service "Assistance Directe®" en vous connectant sur le site Internet de PC SOFT (http://
www.pcsoft.fr).
Pensez à visiter régulièrement le site Internet de PC SOFT (http://www.pcsoft.fr) pour obtenir des
mises à jour des exemples fournis avec WinDev.
PARTIE 2
Premières applications
GAF WinDev.BOOK Page 42 Mardi, 11. juillet 2006 5:42 17
GAF WinDev.BOOK Page 43 Mardi, 11. juillet 2006 5:42 17
43
Durée estimée : 1h
44
Présentation
Pour avoir un avant-goût de ce que vous allez réaliser, lancez WinDev 10. Sélectionnez le menu "?"
dans la barre de menu, puis l’option "Guide d’Auto-formation". Dans le menu déroulant qui s’affi-
che, sélectionnez l’option "Faire connaissance".
Remarque : Dans la suite de ce cours, l’accès aux différentes options des menus sera représenté de la
manière suivante : "Menu Principal .. Sous Menu .. Option".
Cet exemple a été volontairement limité à ces différents types de traitements. Vous vous familiari-
serez plus tard avec d’autres fonctionnalités ... Il en existe des centaines. Vous n’allez pas vous
ennuyer !
45
46
47
4 1.
Saisissez le libellé du bouton :
Cliquez sur le bouton.
2. Saisissez directement le libellé "&Ferme".
48
Le "&" permet de définir la lettre d’appel du bouton : la lettre qui suit est automatiquement sou-
lignée et considérée comme lettre d’appel. L’utilisation de la touche [ALT] et de la lettre souli-
gnée entraîne la même action qu’un clic de la souris sur ce bouton.
3. Validez en appuyant sur la touche "Entrée".
4. Affichez la description de ce bouton (option "Description" du menu contextuel). Le nom du
bouton a été créé automatiquement en fonction :
• de la charte de programmation utilisée (dans ce cas, les boutons sont préfixés par les lettres
BTN_).
• du libellé du bouton.
5. Fermez la fenêtre de description par le bouton "OK" ou "Annuler".
Il ne reste plus qu’à associer à ce bouton le code permettant de fermer la fenêtre. Ce code est écrit
dans le langage de programmation de WinDev : le W-Langage.
4 1.
Pour saisir le code du bouton :
Faites un clic droit sur le bouton et sélectionnez l’option "Code".
2. Saisissez la ligne "Ferme()" dans le code de "Clic sur BTN_Ferme".
Partie 2 : Vos premières applications
L’instruction W-Langage pour fermer une fenêtre est tout simplement Ferme.
C’est une instruction en français. Cependant, pour les inconditionnels de la lan-
gue de Shakespeare, vous pouvez également saisir les commandes du W-Lan-
Notes
Vous observez des changements de couleurs lors de la saisie. En effet, l’éditeur de code colore les
différents mots en fonction de leur nature (couleur bleue pour les fonctions WinDev, ...). Vous pou-
vez personnaliser ces couleurs par l’option "Affichage .. Options d’édition de code".
4 Fermez
tions.
la fenêtre de code (option "Fichier .. Fermer") et validez l’enregistrement des modifica-
49
Gestion du compteur
Pour gérer le compteur numérique, vous allez créer :
• un champ dans lequel va s’afficher la valeur numérique,
• deux boutons qui vont permettre d’ajouter 1 ou de soustraire 1 au compteur.
4 Pour créer le champ de saisie : cliquez sur l’icone et déplacez la souris vers votre fenêtre.
Avec WinDev, pas besoin de saisir du code. Ce type d’information fait partie des
caractéristiques du champ. Le contenu du champ peut être initialisé à l’aide de
l’onglet "Contenu".
50
4Bien
Cliquez sur l’onglet "Contenu" et saisissez la valeur initiale, par exemple, "100".
entendu, comme partout dans WinDev, vous pouvez procéder de manière traditionnelle en
saisissant la ligne suivante en W-Langage dans le code d’initialisation du champ :
COMPTEUR = 100
4 Nous allons maintenant créer le champ "Spin" qui va nous permettre de modifier la valeur du
compteur. Pour créer le champ spin :
1. Cliquez sur l’icone .
2. Déplacez la souris vers la fenêtre pour positionner le champ.
4 Affichez le code du champ Spin (option "Code" du menu contextuel du champ). Ce champ con-
tient deux codes spécifiques :
• Le code d’incrémentation : ce code est exécuté lorsque l’utilisateur manipule le champ spin
pour augmenter une valeur.
• Le code de décrémentation : ce code est exécuté lorsque l’utilisateur manipule le champ spin
pour diminuer une valeur.
Partie 2 : Vos premières applications
Cette ligne de code signifie que l’on ajoute 1 à la valeur du champ SAI_COMPTEUR. Le champ
SAI_COMPTEUR est alors manipulé comme une variable.
Pour les non initiés au langage C, "++" indique une incrémentation de 1 unité.
Vous pouvez également utiliser la syntaxe :
SAI_COMPTEUR += 1
Remarque : Dès la saisie des premiers caractères, WinDev propose tous les mots du vocabulaire
W-Langage contenant ces caractères. L’assistance au développement est poussée très loin. Vous
ne pouvez plus vous tromper en saisissant le nom d’un élément : les erreurs de syntaxes sont mini-
misées. Il suffit de sélectionner le mot désiré et de valider par la touche [Entrée]. Vous pourrez ainsi
vous concentrer sur l’algorithme.
51
De plus, le compilateur détecte en temps réel les erreurs et vous les indique :
52
Par défaut, les caractères seront saisis en majuscules ou en minuscules selon la position de la
touche [CAPSLOCK] du clavier. Ce genre de saisie peut être très gênant lors d’une recherche
par exemple.
WinDev propose la gestion d’un masque de saisie pour un champ. Le masque de saisie permet
de mettre en forme la valeur saisie, automatiquement et sans aucune ligne de code.
ère
4 Modifiez le format du champ de saisie (masque de saisie) et sélectionnez "1 lettre en majus-
cule" (la première lettre saisie sera en majuscule et les autres seront en minuscules). Ce mas-
que de saisie va nous être utile pour afficher le prénom saisi avec une majuscule comme
première lettre. Validez ensuite par "OK".
Pour afficher le résultat de la saisie, vous auriez peut-être envie de créer une nouvelle fenêtre et
d’afficher le résultat dans un champ "Libellé". Or, il existe en W-Langage des fonctions permettant
d’afficher un résultat dans des fenêtres système. Ces fonctions se nomment Info ou Erreur.
Pour notre exemple, nous utiliserons la fonction Info.
53
La fonction Info affiche dans une boîte de dialogue le message passé en paramètre. Notre mes-
sage est construit à partir du texte "Vous avez saisi " et de la valeur du champ "SAI_SAISIE1". Le
signe "+" indique une opération dite de "concaténation" entre deux chaînes.
4 Enregistrez la fenêtre et testez-la (en cliquant sur l’icone puis sur ).
4 Saisissez une valeur dans le champ.
4 Cliquez sur le bouton [Afficher].
4 Validez.
Pour sortir du test et revenir sous l’éditeur de fenêtres, cliquez sur l’icone de la barre de titre.
54
55
Pour avoir une présentation parfaite, il faut aligner les champs dans la fenêtre. WinDev propose
Le correcteur d’interface en temps réel. Vous aurez pu remarquer qu’au fur et à mesure que vous
ajoutiez des champs, l’éditeur de fenêtres proposait des "guides" ou "barres" (magnétisme) permet-
tant d’aligner le nouveau champ avec les champs existants. La correction d’interface est donc éta-
blie en "temps réel".
Les alignements pré-définis permettent d’agir sur la position, la taille ou encore l’espacement
d’une sélection de champs. Ces options sont disponibles dans le menu de WinDev, par l’option
"Champ .. Alignement".
Le correcteur d’interface réalise une étude complète de votre fenêtre et vous propose d’appliquer
56
des règles les plus courantes d’optimisation d’interface. Pour lancer le correcteur d’interface, utili-
sez l’icone de la barre d’outils d’alignement.
Tous les modes sont supportés du mode "256 couleurs" au mode "couleurs vraies" (16 bits, 24
bits, ou 32 bits).
Pour sélectionner un clipart, vous pouvez effectuer une recherche selon un mot-clé.
Dans la fenêtre de recherche :
• Saisissez un mot-clé (par exemple "Animaux")
57
• Cliquez sur le bouton "Rechercher". Les images se rapprochant le plus du mot-clé s'affichent
dans la fenêtre.
• Indiquez le format à générer (l’option "pas de conversion" conserve le format original de
l’image)
• Choisissez l’image que vous préférez en cliquant dessus (par exemple un poisson).
• Indiquez le nombre d’images souhaitées : cette option est utile pour les images de boutons.
Dans notre cas, nous utiliserons une seule image.
• Le nom de l’image sélectionnée s'affiche alors dans la fenêtre de description de l’image et le
fichier de l'image (au format voulu) est copié dans le répertoire du projet.
qui est affichée. Nous vous conseillons d’utiliser ce mode d’affichage pour des
images de type Photo, Carte, Schéma, ... Vous n’apprécieriez pas de voir votre
photo toute déformée !
58
L'option "Affichage Haute Qualité" permet en mode homothétique d'améliorer la qualité de l'image
lorsque celle-ci est réduite par rapport à sa taille initiale.
WinDev gère des images avec un fond transparent. Dans ce cas, il faut :
• soit créer une image avec une couleur de fond "Magenta Clair" (couleur RVB : 255, 0, 255).
Le magenta est automatiquement considéré comme la couleur de transparence.
• soit créer une image dont la couleur du pixel (point) en haut à gauche est la couleur de réfé-
rence pour la transparence. Vous êtes maître de la couleur "transparente".
Attention !
59
Nous allons créer deux nouveaux champs image pour afficher les différents types d’animation pos-
sibles :
• Image animée automatiquement (au format GIF par exemple)
• Image animée par WinDev
4 Créez un champ image pour afficher une image au format GIF animée.
1. Cliquez sur l’icone .
2. Faites un clic droit sur le champ et sélectionnez l’option "Description".
3. Cliquez sur le bouton "Catalogue".
4. Dans l’onglet "Goodies", sélectionnez l’option "Animations". Choisissez votre animation
parmi celles proposées (par exemple la terre qui tourne).
5. Validez.
6. Testez la fenêtre avec le bouton "GO". L’animation apparaît automatiquement, sans aucune
configuration.
4 1.
Nous allons copier le dernier champ image créé.
Sélectionnez le dernier champ image créé.
2. Utilisez la combinaison de touches [CTRL] + [C], puis [CTRL] + [V].
3. Cliquez dans la fenêtre à la nouvelle position du champ copié. Le champ Image est copié,
avec toutes ses caractéristiques.
4. Faites un clic droit sur le champ et sélectionnez l’option "Description".
5. Dans la fenêtre de description, cliquez sur l’onglet "Détail".
6. Sélectionnez l’option "Animé à la création", puis sur cliquez l’icone . La fenêtre de des-
cription des paramètres de l’animation s’affiche.
Vous pouvez saisir le nombre de dessins en largeur (6 dans notre exemple), en hauteur (4 dans
notre exemple), le type d’animation, le sens de l’animation, le nombre d’étapes ainsi que la
60
durée entre chaque étape de l’animation, ... Pour visualiser directement le résultat, cochez
l’option "Utiliser l’image du champ".
Exemple
Pour plus de détails sur l’utilisation de tous les paramètres proposés, consultez
l’exemple "WD Animated", livré en standard avec WinDev.
Partie 2 : Vos premières applications
61
dans un champ.
4 1.
Pour configurer l’image de fond de la fenêtre :
Faites un clic droit sur le fond de la fenêtre et sélectionnez l’option "Description"
2. Dans la fenêtre de description, cliquez sur l’onglet "Image" puis sur l’icone (option
"Image de fond").
Décrire le menu
4 Pour créer une option menu et pour la modifier, il suffit d’utiliser le menu contextuel du menu
(c) PC SOFT - Version Express - Diffusion interdite
GAF WinDev.BOOK Page 62 Mardi, 11. juillet 2006 5:42 17
62
Plusieurs choix sont possibles. Les principales options de gestion de menu sont :
• "Description de l’option" pour modifier le libellé de l’option et la lettre d’appel.
• "Code" pour saisir le code source correspondant au traitement à exécuter lors du clic sur
cette option.
• "Ajouter après" pour ajouter une option de menu après l’option en cours.
• "Insérer une option" pour insérer une option de menu avant l’option en cours.
• "Insérer un sous-menu" pour insérer dans l’option en cours un sous-menu (arborescence).
63
Dans vos applications, nous vous conseillons de suivre le standard des menus
Windows. Veillez en particulier aux points suivants :
• Chaque option du menu principal doit proposer au moins une sous-option.
tère "&").
• Si un choix de menu appelle une fenêtre de traitement, terminez le libellé
par trois points (…).
• L’option "Quitter" doit être la dernière sous-option de la première option de
la barre de menu (exemple : "Fichier .. Quitter").
• Si une option d’aide est présente, elle doit se trouver à la fin de la première
ligne de menu (l’option la plus à droite).
64
Vous l’aurez deviné : la fonction Ouvre permet d’afficher une fenêtre pour effectuer une saisie. La
fonction Ferme quant à elle, ferme la fenêtre en cours (nous l’avons déjà vu).
Si la fenêtre contenant le menu est la première fenêtre affichée par l’application, la fermeture de la
Partie 2 : Vos premières applications
fenêtre contenant le menu (par l’option "Fichier .. Quitter l’application" dans notre exemple) équi-
vaut à quitter l’application.
Pour plus d’informations sur ces fonctions, consultez l’aide en ligne (mots-clés : "Menu, Fonctions
W-Langage").
65
4 1.
Pour intégrer le menu "?" dans votre application :
Sélectionnez l’option "Fenêtres .. Menu principal .. Ajouter le menu "?"". L’assistant de créa-
tion du menu utilitaire se lance.
2. Cliquez sur "Suivant".
3. Sélectionnez les options que votre application va proposer :
66
2. Ici, ce sera la fenêtre "Menu". Sélectionnez cette fenêtre parmi celles proposées puis cliquez
Partie 2 : Vos premières applications
Fini les compilations en ligne de commande, les problèmes de librairie à "linker", les paramètres de
compilation, ... quelques clics et c’est tout !
Bravo, félicitations ! Vous savez maintenant créer un programme exécutable autonome. Ce pro-
gramme fonctionne en mode 32 bits et est compatible avec toutes les versions de Windows : Win-
dows 95, 98, Millenium, XP, NT, 2000 et 2003 !
67
La diffusion de l’application
WinDev 10 simplifie la diffusion de vos applications.
Un assistant vous guide dans la création de la procédure d’installation (choix de menu "Atelier ..
Créer la procédure d’installation …").
Différents supports d’installation sont disponibles :
• Disquettes d’installation,
• CD-ROM,
• Exécutable auto-extractible (très pratique pour la mise en téléchargement de votre applica-
tion),
• Répertoire découpé à la taille de disquettes,
• Répertoire unique.
L’installation peut être au choix autonome ou avec mise à jour automatique.
Installation autonome
Ce mode d’installation est à réserver pour la diffusion d’applications s’exécutant sur des postes
indépendants (postes non reliés à un réseau, application monoposte, …).
Ce mode d’installation propose 3 modèles :
• installation standard : Ce modèle est proposé par défaut
• installation compacte : Ce modèle permet de créer un programme d’installation plus léger
De plus, pour encore réduire la taille du programme d’installation, il est également possible de ne
pas diffuser le framework WinDev (les DLL WinDev nécessaires au fonctionnement de votre exécu-
table). Ce framework sera automatiquement téléchargé sur un site de PC SOFT lors de l’installation.
Dans ce cas, un accès Internet doit être disponible sur le poste d’installation.
68
69
Durée estimée : 1h
70
Introduction
Le W-Langage est un langage de 5ème génération. Vous apprécierez sa clarté et sa puissance au fil
du cours d’auto-formation.
Quelques exemples :
Indice est un entier
NomFournisseur est une chaîne
TablePrix est un tableau de 10 monétaires
I, J, K sont des entiers
Compteur est un entier = 120
B1 est un booléen = Faux
Partie 2 : Vos premières applications
Pour plus d’informations sur ces types de variables et les autres types non cités, consultez l’aide en
ligne (mot-clé: "Types de données").
Variable locale
Une "variable locale" ne peut être utilisée que dans le traitement dans lequel elle a été déclarée.
Elle est "locale" au traitement.
Par défaut, une variable est locale. Cependant, pour rendre un programme plus "lisible pour la
maintenance", il est conseillé de faire précéder la déclaration des variables locales du mot-clé
"LOCAL". Exemple :
LOCAL
MaVariableLocale est une chaîne
Variable globale
Une "variable globale" peut être utilisée dans tous les traitements appelés par le traitement dans
lequel la variable est déclarée.
71
Pour qu’une variable soit "globale", il suffit de faire précéder la déclaration des variables globales
du mot-clé "GLOBAL". Exemple :
GLOBAL
MaVariableGlobale est une chaîne
Afin qu’une variable globale d’une fenêtre "A" puisse être utilisée dans les autres fenêtres "X"
ouvertes par la fenêtre "A", écrivez dans le traitement "Déclarations globales de la fenêtre" de tou-
tes les fenêtres "X" :
EXTERNE NomDeLaVariable
La plupart des développeurs est tentée de déclarer toutes ses variables en "glo-
bal" dans un projet. Ce type de programmation est en effet "facile". Les variables
étant toutes globales, elles sont alors manipulables depuis n’importe quel traite-
ment.
Attention !
72
Instructions du W-Langage
Il existe des centaines d’instructions W-Langage, nous détaillerons ici les instructions de conditions
et les instructions de boucle.
Quelques exemples
SELON Jour
CAS "Lundi"
Partie 2 : Vos premières applications
Quelques exemples
Ind est un entier
POUR Ind = 1 à 100
Cpt = Cpt + 1
FIN
73
Il est pratique d’utiliser la fonction Multitâche dans une boucle longue, afin de
Astuce
Le mot-clé MoiMême
MoiMême est un mot-clé qui retourne le nom du champ en cours. MoiMême permet de rendre un
code local (traitement d’un champ, ...) ou global (procédure globale, classe, ...) indépendant du
champ en cours.
MoiMême..Libellé = "Nouveau libellé"
74
Définition
Lorsqu’un traitement est appelé plusieurs fois dans un projet ou dans une fenêtre, il est souvent
intéressant de créer une procédure contenant ce traitement. Il suffira alors d‘appeler la procédure
ou la fonction à chaque fois que cela sera nécessaire.
WinDev permet de gérer simplement des procédures et des fonctions.
En temps normal, une fonction renvoie un résultat alors qu’une procédure sert à exécuter un traite-
ment spécifique. Sous WinDev, il n’y a pas de différence entre une procédure et une fonction. C’est
pourquoi dans la suite de ce cours, nous utiliserons uniquement le terme "procédure".
Vous avez la possibilité de créer des procédures "locales" et des procédures "globales".
Procédure locale
Une procédure "locale" est liée à une fenêtre et uniquement à cette fenêtre.
Une procédure, lorsqu’elle est locale, peut être utilisée uniquement dans les traitements de la fenê-
tre et des champs de la fenêtre dans laquelle elle a été déclarée. Elle fait partie de la fenêtre.
Les procédures "globales" sont contenues dans des "collections de procédures". Chaque "collection
de procédures" est un fichier qui contient toutes les procédures globales qui lui sont associées. Ce
fichier est présent le plus souvent dans le répertoire du projet et possède l’extension ".WDG".
Chaque projet contient au moins une collection de procédures. Cette collection est créée par
défaut lors de la création du projet et a pour nom "Procédures globales de <nom_projet>".
Vous pouvez créer autant de collections de procédures que vous le désirez dans un projet.
Une collection de procédures permet de :
• partager des procédures globales entre plusieurs développeurs, pour un même projet.
• partager des procédures globales entre plusieurs projets.
75
4 Consultez la liste des différentes procédures (accessibles depuis le Kouglof). Observez le mode
de déclaration de ces procédures. Vous pouvez également tester la fenêtre pour visualiser leur
traitement.
Une fenêtre peut également renvoyer une valeur au traitement qui l’a appelée. Pour plus de détails,
consultez l’aide en ligne sur la propriété ValeurRenvoyée.
l’appui sur la touche de fonction [F2] permet de visualiser le code de cette procé-
dure. L’appui simultané sur les touches [CTRL]+[F2] permet de revenir dans le
code précédent sur le nom de la procédure.
76
ment.
• Lorsqu’un traitement est utilisé plusieurs fois dans un ensemble de fenêtres, il
est conseillé d’utiliser une procédure globale au projet qui contiendra ce traite-
ment.
Partie 2 : Vos premières applications
77
78
Introduction
Si vous avez déjà développé avec ce bon vieux Basic des années 80, la manipulation des chaînes
de caractères s’effectuait avec les fonctions standard comme LEFT, RIGHT ...
Dans WinDev, la fonction ExtraitChaine complète ces fonctions.
Il existe également les fonctions Gauche, Droite, Milieu, Position qui vous permettront de traduire
de vieux algorithmes en W-Langage.
De même, pour faire plaisir aux développeurs qui aiment manipuler les pointeurs ou les octets,
vous avez la possibilité d’utiliser dans WinDev les opérateurs [[ ]].
La fenêtre "Manipulation chaînes" présente l’utilisation de ces fonctions. Elle illustre les différentes
manipulations que nous expliquerons dans cette leçon :
Partie 2 : Vos premières applications
4 Ouvrez si nécessaire le projet "WD Découverte.WDP" (option "Fichier .. Ouvrir le projet"). Ce pro-
jet se trouve dans le sous-répertoire "AutoFormation\Corriges\WD Découverte" du répertoire
d’installation de WinDev 10.
4 Ouvrez la fenêtre "Manipulation chaînes.WDW" (option "Fichier .. Ouvrir").
4 Testez la fenêtre.
Nous allons donner ici les principales manipulations possibles sur les chaînes de caractères, les
valeurs numériques, les dates et les heures.
Toutes les fonctions ne sont pas citées. Pour plus de détails, consultez l’aide en ligne (mot-clé :
"Chaîne de caractères, Manipuler une chaîne (W-Langage)").
79
Une chaîne peut être construite à partir de plusieurs autres chaînes. On parle alors de concaténa-
tion de chaînes.
Pour concaténer deux chaînes, il suffit d'utiliser l'opérateur "+".
// Nous utilisons ici la fonction Info pour que le résultat
// s’affiche à l’écran
Info(TEXT2 + TEXT1)
Une chaîne peut être transformée en majuscules avec la fonction Majuscule ou en minuscules
avec la fonction Minuscule :
Info(Majuscule(TEXT2))
Info(Minuscule(TEXT2))
Une chaîne peut être recherchée dans une autre avec la fonction Position :
ChaineRecherche est une chaîne = "WinDev"
Pos est un entier
Pos = Position(TEXT2, ChaineRecherche)
80
SI Pos=0 ALORS
Info(ChaineRecherche + " non trouvé dans le texte 2")
SINON
Info(ChaineRecherche + " trouvé dans texte 2")
FIN
Manipuler un numérique
4 Ouvrez la fenêtre "Calculs Numériques.WDW". Cliquez par exemple sur son nom dans le volet
WinDev (onglet "Projet", option "Fenêtres").
4 Testez la fenêtre. Cette fenêtre présente un aperçu des manipulations sur les "numériques".
Un champ de type numérique peut être initialisé :
Partie 2 : Vos premières applications
La partie entière d'un nombre est connue par la fonction PartieEntiere, la partie décimale par la
fonction PartieDecimale :
Info("Partie entière de "+NUM1+" : "+PartieEntiere(NUM1), ...
"Partie décimale de "+NUM1+" : "+PartieDecimale(NUM1))
81
Les monétaires
4 Ouvrez la fenêtre "Réels_Monetaires.wdw". Cliquez par exemple sur son nom dans le volet Win-
Dev (onglet "Projet", option "Fenêtres").
4 Testez la fenêtre.
Cette fenêtre présente un aperçu des manipulations possibles sur les "Monétaires".
Le type "Monétaire" est un réel codé sur 10 octets. Il permet de donner la solution à deux problè-
mes non résolus par les réels :
• avoir plus de 15 chiffres significatifs (les réels doubles gèrent 15 chiffres significatifs maximum),
le type "Monétaire" gère 23 chiffres significatifs.
• éviter une erreur induite par le codage binaire des réels :
• Un réel gère jusqu'à 15 chiffres significatifs. Or, en réalité, le codage binaire des réels ne per-
met pas de coder tous les réels de 15 chiffres significatifs.
• Le type "Monétaire" a un codage différent des réels qui n'induit pas d'erreur d'arrondi. En
effet, le code suivant donne un résultat faux :
// Avec une variable de type Réel, le calcul est faux
x est un Réel
x = 18.6 - 8.6 - 10
Erreur ("18.6-8.6-10="+x)
82
Pour effectuer des divisions sur des monétaires, il est conseillé de passer par des variables inter-
médiaires de type "Monétaire".
x, y sont des Monétaires
x = 12345678901234567.123456
y = 12345678901234567.123456
x = x/y
Info ("21345678901234567.123456", ...
"/","12345678901234567.123456","= "+x)
i est un entier
c est une chaîne
i = 123
c = i //la variable c contient la chaîne "123"
c = "456"
i = c //la variable i contient la valeur 456
Si vous voulez transformer un nombre en une chaîne de caractères en respectant un format bien
précis, il suffit d’utiliser la fonction NumériqueVersChaine.
4 Ouvrez la fenêtre "FenetreVersChaine.wdw". Cliquez par exemple sur son nom dans le volet
WinDev (onglet "Projet", option "Fenêtres").
4 Testez la fenêtre.
A chaque fois que vous devez utiliser la fonction NumeriqueVersChaine et que vous ne savez
pas exactement quels paramètres utiliser, vous pouvez exécuter cette fenêtre : elle vous don-
nera la syntaxe à utiliser en fonction du résultat souhaité.
Notes
83
84
Présentation
Une fois l’an 2000 passé, tout le monde s’est dit : "Ouf ! On n’a plus à se soucier du format des
dates !". Effectivement, on peut s’estimer tranquille ... pour quelques centaines d’années !
Cependant, il est toujours bon de savoir gérer correctement le format des dates et des heures dans
vos programmes.
Pour gérer simplement les dates et les heures dans vos applications, WinDev met à votre disposi-
tion :
• un champ de saisie de type Date ou Heure. Avec ce champ, plus aucun problème pour saisir une
date ou une heure valide.
• des variables de type Date, Heure, DateHeure et Durée. Ces variables simplifient la manipulation
des dates et des heures par programmation et permettent de multiples calculs.
4 Ouvrez si nécessaire le projet "WD Découverte.WDP" (option "Fichier .. Ouvrir le projet"). Ce pro-
jet se trouve dans le sous-répertoire "AutoFormation\Corriges\WD Découverte" du répertoire
d’installation de WinDev 10.
Partie 2 : Vos premières applications
4 Ouvrez la fenêtre "DATEHEURE.WDW". Cette fenêtre illustre les explications données dans la
suite de cette leçon.
Les dates et les heures sont des chaînes qui ont un format prédéfini.
Dans un champ de type "Date" ou de type "Heure", il faut distinguer le masque de saisie de la
valeur retournée (mémorisée) :
• Le masque de saisie est le format avec lequel la date et l’heure seront affichées.
• La valeur retournée est la valeur retournée par le champ vers le programme.
85
4 Si"AAAAMMJJ"
le masque de saisie d'un champ date est "JJ/MM/AA" et la valeur retournée est
:
DATEJ="19981225" //affiche la date sous la forme "25/12/98"
DATEJ="981225" //affiche la date sous une forme incorrecte
4 Si"AAMMJJ"
le masque de saisie d'un champ date est "MM/JJ/AAAA" et la valeur retournée est
:
DATEJ="981225" //affiche la date sous la forme "12/25/1998"
DATEJ="19981225" //affiche la date sous une forme incorrecte
Il faut donc faire attention au format de la valeur retournée dans un champ de type date ou heure.
Les fonctions du W-Langage qui manipulent :
• des dates utilisent le format "AAAAMMJJ".
Les dates
Quel jour sommes-nous?
Pour connaître la date du jour, il suffit d'utiliser la fonction DateDuJour (ou DateSys). La fonction
DateDuJour retourne la date système de votre ordinateur sous la forme d'une chaîne de caractères
au format "AAAAMMJJ".
Exemple :
Info("Nous sommes le " + DateDuJour()) // ou DateSys()
86
Selon le même principe, on peut calculer l'âge d'une personne. Il suffit de diviser
le nombre de jours obtenus par 365.
87
Les heures
Quelle heure est-il ?
Pour connaître l'heure, il suffit d'utiliser la fonction Maintenant (ou HeureSys). La fonction Mainte-
nant retourne l'heure actuelle de votre système sous la forme d'une chaîne de caractères au format
"HHMMSSCC" :
Info("Il est " + HeureSys()) // ou Maintenant()
4 Vous souhaitez afficher l'heure au format standard "HH:MM:SS:CC" ? Le code devient alors :
Info("Il est " + HeureVersChaine(HeureSys()))
La fonction Gauche retourne les n premiers caractères d'une chaîne (8 dans notre exemple).
88
Le type "Date" permet de gérer des dates comprises entre le 01/01/0001 et le 31/12/9999 (de
quoi être tranquille pour un bon moment !).
Plus sérieusement, pour manipuler la valeur de ces variables, vous pouvez utiliser les syntaxes
suivantes :
MaDate est une Date = "20021021"
Info(DateVersChaine(MaDate)) //Affiche "21/10/2002"
MaDate..Année = MaDate..Année + 1
MaDate..Mois = MaDate..Mois + 1
MaDate..Jour = MaDate..Jour + 1
Info(DateVersChaine(MaDate)) //Affiche "22/11/2003"
PARTIE 3
Fenêtres et champs
GAF WinDev.BOOK Page 90 Mardi, 11. juillet 2006 5:42 17
GAF WinDev.BOOK Page 91 Mardi, 11. juillet 2006 5:42 17
91
92
Présentation
Au tout début de ce guide, vous avez découvert l’environnement de WinDev. Vous avez peut être
constaté que cet environnement était constitué de plusieurs éditeurs (éditeur de fenêtres, d’analy-
ses, d’états, ...).
Pour chaque éditeur, des barres de menus, des barres d’outils, des volets (flottants ou fixés) sont
disponibles.
Partie 3 : Fenêtres et champs d’une fenêtre
1. La barre de menu
2. Les barres d’outils
3. Documents ouverts
4. Volets fixés à droite (explorateur de projet dans cet exemple)
5. Volets fixés en bas (volet "Code" affiché dans cet exemple)
93
Les bulles d’aide permettent d’identifier l’action de chaque icone des barres d’outils.
Ces barres d’outils sont déplaçables et personnalisables.
4 1.
Pour déplacer une barre d’outils :
Sélectionnez la barre d'outils :
•Si la barre d’outils est ancrée, cliquez sur l'extrémité gauche de la barre.
•Si la barre d’outils est flottante, cliquez sur la barre de titre.
2. Maintenez le bouton gauche de la souris enfoncé pendant le déplacement : une ombre per-
4 1.
Pour ajouter un icone dans une barre d'outils :
Ouvrez la fenêtre de personnalisation des barres d'outils (option "Affichage .. Barre d’outils ..
Personnaliser les barres d’outils").
2. Effectuez un "glisser/déplacer" ("Drag and Drop") d’un icone de la fenêtre de personnalisa-
tion vers l'emplacement désiré dans la barre d'outils.
4 1.
Pour supprimer un icone d'une barre d'outils :
Ouvrez la fenêtre de personnalisation des barres d'outils (option "Affichage .. Barre d’outils ..
Personnaliser les barres d’outils").
2. Effectuez un "glisser/déplacer" ("Drag and Drop") de l'icone de la barre d'outils vers la fenê-
tre de personnalisation.
Les volets
WinDev propose différents volets affichables à tout moment. Ces volets peuvent être affichés ou
non, regroupés dans l’ordre de votre choix. Vous pouvez ainsi définir la configuration qui corres-
pond le mieux à votre environnement et la rappeler à tout moment.
4 1.
Pour afficher des volets :
Sélectionnez l’option "Affichage .. Barres d’outils .. "
2. Sélectionnez le volet à afficher ou à rendre invisible (une coche est présente devant le nom
des volets actuellement affichés sous l’éditeur).
94
La configuration de vos volets vous convient ? Vous voulez la mémoriser ? Rien de plus simple :
vous pouvez sauvegarder jusqu’à 4 configurations grâce aux touches CTRL ALT 1, CTRL ALT 2, ... Et
pour afficher la configuration voulue, il suffit d’utiliser la touche ALT suivie du numéro de configura-
tion voulue.
Partie 3 : Fenêtres et champs d’une fenêtre
95
96
Introduction
Nous commencerons par exécuter un projet exemple. Nous détaillerons son fonctionnement au fur
et à mesure des leçons suivantes et nous verrons ensemble comment réaliser les différents traite-
ments qui le composent.
4 Dans le menu de WinDev, sélectionnez l’option "? .. Guide d’Auto
champs". Vous pouvez parcourir les différentes options du menu.
formation .. Fenêtres et
Le projet se charge.
Ce chapitre présente les manipulations les plus fréquentes effectuées sur les champs d’une fenê-
tre. Ces manipulations peuvent également être effectuées dans l’éditeur d’états.
4 Ouvrez la fenêtre "Manip.WDW" présente dans le répertoire du projet. Pour celà, utilisez le rac-
courci CTRL + E et saisissez "Manip". Sélectionnez la fenêtre et ouvrez-là.
Cette fenêtre va vous permettre d'apprendre les principales manipulations à effectuer.
97
4 1.
Pour copier un champ :
Cliquez avec le bouton droit sur le champ à copier.
2. Sélectionnez l'option "Copier" dans le menu contextuel ([CTRL]+[C] au clavier).
3. Positionnez-vous si nécessaire dans la fenêtre où le champ doit être copié.
4. Sélectionnez l’option "Coller" dans le menu contextuel ([CTRL]+[V] au clavier).
Remarque : il est également possible d’utiliser les icones suivantes : pour copier et pour
coller.
98
Pour gérer l'altitude de vos champs, WinDev permet de visualiser vos fenêtres en 3 dimensions. En
effet, l’affichage en deux dimensions devient vite limité pour ce genre d'opération.
L'altitude des différents champs de la fenêtre apparaît alors immédiatement. Un champ sélec-
tionné dans ce mode d'affichage reste sélectionné lors du passage à l'affichage en deux dimen-
sions.
4 1.
Pour afficher une vue en 3 dimensions de vos fenêtres :
Affichez la fenêtre sous l'éditeur.
2. Sélectionnez l'option "Affichage .. Visualiser la fenêtre en 3D".
3. La fenêtre apparaît en 3 dimensions. Pour changer le point de vue, vous pouvez utiliser la
souris ou le clavier.
Partie 3 : Fenêtres et champs d’une fenêtre
Vous pouvez choisir simplement le meilleur angle de vision grâce à la souris et aux touches du cla-
vier.
Attention : pour utiliser cette fonctionnalité, une configuration spécifique est nécessaire. Pour plus
de détails, consultez l’aide en ligne (mot-clé : "3 Dimensions").
99
4 1.
Pour accéder directement à un onglet donné :
Cliquez sur le champ avec le bouton droit de la souris : le menu contextuel s'affiche.
2. Sélectionnez l’option "Description".
3. Sélectionnez l'onglet à afficher.
Remarque (utilisation avancée) : pour modifier un champ, vous
pouvez également utiliser le modifieur.
4 Pour afficher le modifieur,
Barre d'outils .. Modifieur".
sélectionnez l'option "Affichage ..
100
101
L'éditeur de fenêtres
Pour créer une fenêtre, il suffit de cliquer sur l’icone et de sélectionner le type de fenêtre à
créer.
4 1.
Pour copier une fenêtre sous un autre nom :
Ouvrez la fenêtre à copier.
2. Sélectionnez l'option "Fichier .. Enregistrer sous ".
3. Saisissez le nouveau nom de la fenêtre.
4 1.
Pour changer la position d’affichage d’une fenêtre :
Vérifiez que l’option "Relatif à l’écran" est sélectionnée dans l’onglet "IHM" de la fenêtre de
description.
2. Affichez la fenêtre d’aperçu position (option "Affichage .. Barre d’outils .. Aperçu Position
Fenêtres").
3. Dans la fenêtre d’aperçu position, déplacez la fenêtre à la position voulue.
Vous pouvez également saisir les coordonnées de la position dans l’onglet "IHM" de la fenêtre
4 1.
Pour agrandir une fenêtre :
Cliquez sur un des bords de la fenêtre sans relâcher le bouton de la souris (le curseur se
transforme alors en double flèche).
2. Déplacez la souris de façon à obtenir la taille souhaitée, puis relâchez le bouton de la souris,
quand la fenêtre est à la dimension voulue.
Vous pouvez également saisir la largeur et la hauteur de la fenêtre dans l’onglet "IHM" de la
fenêtre de description.
Astuce
4 Pour accéder aux caractéristiques de la fenêtre, vous pouvez par exemple utiliser le menu con-
textuel de la fenêtre. Cliquez dans la fenêtre (sans cliquer sur un champ) avec le bouton droit
de la souris. Un menu contextuel s'affiche. Il permet d'accéder :
• à la description de la fenêtre (option "Description").
• au code de la fenêtre (option "Code").
102
Paramétrage de l’éditeur
Le paramétrage de l'éditeur est regroupé dans une seule fenêtre. Cette fenêtre est accessible par
l'option "Outils .. Options de WinDev".
Les options permettent de choisir :
• le mot de passe de l'utilisateur
• les options de sauvegarde
• les options de traduction
• les options sur les répertoires
• les options d'affichage
Aide contextuelle de l'éditeur de fenêtres
Toutes les fenêtres de l'éditeur (ou presque) proposent une aide en ligne et / ou une aide contex-
tuelle.
L’aide contextuelle (accessible par le bouton ) détaille les informations attendues par l’écran en
cours.
Assistant de création de fenêtres
Partie 3 : Fenêtres et champs d’une fenêtre
Les assistants de création de fenêtre sont accessibles lors de la création d'une nouvelle fenêtre.
Des dizaines de fenêtres types, prêtes à l’emploi, sont disponibles :
103
L’éditeur de code
L'éditeur de code propose d’autres possibilités intéressantes :
• Assistance à la saisie de code source.
• Recherche des déclarations de variables.
• "Time stamp" et nom de l’auteur de chaque ligne de code source (touche F6).
• Complétion du code.
• Documentation automatique du code.
• Refactoring.
• Enroulé de code
Vous pourrez retrouver dans ce cours d’auto-formation, plusieurs fonctionnalités concernant l’édi-
teur de code :
• Programmation des timers, threads, procédures automatiques (voir page 346)
• Préfixage automatique des variables (voir page 45)
Si plusieurs syntaxes sont disponibles, il est possible de passer d’une syntaxe à l’autre grâce
aux touches [ALT] + flèche droite ou flèche gauche.
• dans la barre de message de l'éditeur.
104
Pour les fonctions utilisant des noms de fichiers, de champs, de fenêtres, ou d'états, la saisie assis-
tée permet d'afficher la liste des éléments du projet correspondant au paramètre de la fonction en
cours de saisie.
Exemple de saisie assistée pour la fonction HLitPremier :
L’option <Assistant> permet de lancer un assistant de code. Cet assistant vous pose différentes
questions sur l’utilisation de la fonction et génère automatiquement le code correspondant.
Toutes les fonctions et les propriétés du W-Langage ont une aide associée. Cette aide est directe-
ment accessible depuis l'éditeur en appuyant sur le bouton [F1] sur le nom de la fonction ou de la
Partie 3 : Fenêtres et champs d’une fenêtre
propriété voulue.
Glossaire de fonctions
Le glossaire de fonctions proposé par WinDev permet d’associer un raccourci aux fonctions du W-
Langage le plus souvent utilisées. Il suffit ensuite de saisir ce raccourci sous l’éditeur de code.
Par exemple au lieu de taper "EcranVersFichier", il suffit de taper le code abrégé "EVF".
Le contenu du glossaire peut être modifié, par exemple pour ajouter le nom des variables que vous
utilisez fréquemment.
4 Pour modifier le contenu du glossaire, appuyez sur les touches [SHIFT]+[F5].
Time stamp
L'appui de la touche [F6] permet d'afficher les informations (nom, date et heure de la création/
modification) de chaque ligne de code.
105
Point d’arrêt
L’appui simultané des touches [CTRL]+[B] pose ou enlève un point d’arrêt (icone ). En test, le
débogueur sera activé dès l’exécution de la (ou les) ligne(s) contenant un point d’arrêt. La touche
[F7] permet alors d’exécuter le code pas à pas, tandis que la touche [F5] continue l’exécution nor-
male (voir aide en ligne, mot-clé : "Débogueur").
Vérification du code
Lors de la sauvegarde des traitements (option "Fichier .. Enregistrer"), une compilation et une vérifi-
cation des identificateurs est automatiquement effectuée pour les lignes ajoutées ou modifiées.
fichier Hyper File, des procédures (internes et globales), des membres et des
méthodes de classes, ... sont stockés dans une "base" au fur et à mesure de la
compilation. Cette base est appelée "Base des identificateurs".
Dès qu'un identificateur est utilisé (et non pas déclaré) dans un traitement, il est recherché dans la
base des noms : s'il n'est pas trouvé, un message de "Warning" s'affiche dans le kouglof (onglet
"Code", option "Erreurs de compilation"). Un clic droit sur l’erreur ou le warning permet d’identifier la
cause et d’y apporter plus facilement une solution.
106
Enroulé de code
L’éditeur de code offre également la possibilité d’enrouler ou de dérouler le code W-Langage. Cette
fonctionnalité est très utile si vos traitements utilisent de nombreuses instructions structurées
(boucles, condition, parcours, ...).
4 Pour replier un code, sélectionnez l’option de menu "Code .. Code repliable .. Replier tout" (ou le
raccourci CTRL + SHIFT + * (du clavier numérique)).
Seuls les commentaires restent visibles. Le survol de chaque ligne de commentaire permet de
visualiser le code associé dans une bulle :
La combinaison de touches CTRL + * (du clavier numérique) permet de déplier tout le code. Le
clic sur les symboles "-" ou "+" permettent d’enrouler ou de dérouler uniquement la partie de
code correspondante.
107
Durée estimée : 2h
108
Introduction
Les champs sont des éléments permettant de saisir ou de visualiser des valeurs. Les valeurs affi-
chées peuvent provenir d’un calcul effectué par programmation, d’un fichier d’une base de don-
nées ou d’une affectation.
Les valeurs que l’on saisit peuvent servir à faire des calculs, à être enregistrées dans un fichier
d’une base de données ou à être affectées dans d’autres champs.
Nous allons tout d’abord voir quelques exemples d’utilisation de certains types de champs. Vous
avez déjà utilisé des champs de saisie, boutons et images dans les leçons précédentes. Nous ver-
rons en détail comment les créer et quelles sont leurs caractéristiques.
Dans le menu de WinDev, sélectionnez l’option "? .. Guide d’Auto formation .. Fenêtres et champs".
Pour tester ce que vous allez apprendre dans cette leçon, parcourez les différentes options du
menu "Champ".
Pour apprendre à utiliser ces différents types de champs, nous allons utiliser un projet exemple pré-
paré à cet effet. Pour ouvrir ce projet sous WinDev :
1. Sélectionnez l’option "Fichier .. Ouvrir un projet".
2. Sélectionnez le sous-répertoire "AutoFormation\Corriges\Fenêtres et champs" du répertoire
d’installation de WinDev 10.
3. Sélectionnez le fichier "Fenetres et champs.WDP". Le projet se charge.
109
Résumé
Les libellés permettent d’afficher du texte statique. Ils ne peuvent pas être saisis en exécution mais
leur contenu peut être sélectionné pour effectuer des "copier/coller". Ils peuvent être modifiés par
programmation (comme tous les champs).
Les libellés sont utilisés pour afficher une information, par exemple un titre en gros caractères. Le
contenu d’un libellé peut être défini sous l’éditeur lors de la description du libellé ainsi que par pro-
grammation.
Les libellés permettent également d’afficher un texte en fonction de la langue utilisée dans le pro-
jet, sans programmation particulière. Pour plus de détails, reportez-vous à la leçon sur la gestion
des langues dans un projet (Leçon “Applications multilingues”, page 159).
En détail
4 Ouvrez la fenêtre "ChampLibelle.WDW" et testez cette fenêtre.
Cette fenêtre présente :
- les différents types de libellés pouvant être utilisés.
- les différentes manipulations pouvant être effectuées sur un libellé.
110
Il est même possible de changer la couleur du texte du libellé avec la propriété Couleur.
LIBELLE1..Couleur = iBleuClair
est :
Nom_Champ..Nom_Propriété
La liste des propriétés disponibles sur les champs est présente dans l’aide en
ligne de WinDev, mot-clé : "Propriétés, Propriétés sur les fenêtres et leurs
champs".
111
Résumé
Les champs de saisie sont les premiers champs que vous avez manipulés. Ils permettent de saisir
ou d'afficher des données provenant de variables, de calculs ou de fichiers.
Ils permettent par exemple de saisir un mot de passe, une quantité à commander, le nom d’un
client, une adresse, …
Ces champs sont très importants, c'est pourquoi nous allons les détailler.
En détail
4 Ouvrez la fenêtre "CHAMPSAISIE.WDW".
Un champ de saisie peut être de différents types :
• texte,
• numérique,
• heure,
A chaque type de champ correspondent plusieurs masques de saisie (ou d'affichage). Nous avons
précédemment vu l'intérêt du masque, nous n'y reviendrons pas.
Précisons toutefois que les champs numériques ne sont pas typés. C'est le masque sélectionné
pour le champ qui va définir si le champ est un réel, réel double, entier, ...
La fenêtre "Champsaisie.wdw" présente la gestion des champs de type texte et des champs numé-
riques.
4 Testez la fenêtre.
4 Saisissez dans les champs qui ont le libellé "en saisie". Dans les autres champs, il n'est pas
possible de saisir. En effet, ils ont été décrits en affichage. Cliquez sur les différents boutons et
observez ce qu'il se passe.
4 Revenez sous l'éditeur et étudiez le code des boutons.
Pour afficher et récupérer une valeur dans un champ de saisie une simple affectation suffit et ce
quel que soit le type du champ de saisie.
Pour un champ de saisie de type Texte :
• Exemple à saisir dans le code d’initialisation du champ de saisie :
SAISIE2= "Coucou" //affiche Coucou dans le champ texte
112
Dans la zone de saisie, la couleur du texte et la couleur du fond sont modifiables par programma-
tion avec les propriétés Couleur et CouleurFond.
SAISIE1..Couleur = iVertFonce //change la couleur du texte
SAISIE1..CouleurFond = iJauneClair //change la couleur du fond
• Affichage seul : le champ est inactif, aucune saisie ne sera possible. Ce champ se compor-
tera comme un champ de type libellé. Il sera cependant possible de sélectionner le contenu
du champ à l’aide de la souris, si l’option "Avec sélection en affichage" est cochée.
• Grisé : le champ est inactif et il apparaît en grisé. Cet état est très pratique pour indiquer à
l'utilisateur que ce champ existe, mais qu'il n'est actuellement pas accessible.
• Visible : Comme son nom l’indique, le champ "existe" dans la fenêtre. Ce champ peut être
visible ou non. Cet état est souvent utile en programmation lorsqu'un champ doit apparaître
à certains moments et disparaître à d'autres !
Cette option est indépendante des 3 options précédentes. Vous pouvez rendre ainsi le
champ visible ou non tout en conservant les paramètres d’affichage.
L'état initial d'un champ est choisi lors de sa création (onglet "IHM" de la fenêtre de description du
champ). Il peut être modifié par programme en utilisant la propriété Etat pour les options "Saisie",
"Affichage seul" et "Grisé", et la propriété Visible pour l’option "Visible".
Comme pour la plupart des champs, vous pouvez choisir le cadrage du contenu du champ. Selon le
type du champ, un cadrage est proposé par défaut.
Dans l’onglet "Général" de la fenêtre de description du champ, il est possible de définir les para-
mètres suivants :
• Texte avec mise en forme (R.T.F) : Permet d’avoir des mots en Italique, en Gras, en couleur,
de tailles et de polices différentes, ... Les initiales de RTF signifient : "Rich Text Format".
• Mot de passe : pour les champs de type texte, cette option doit être cochée s'il s'agit d'un mot
de passe. Dans ce cas, les caractères frappés sont remplacés par des "*" uniquement à l’affi-
113
chage.
Astuce
Ce type d’option est idéale pour la saisie du mot de passe d’un utilisateur
dans une fenêtre de login.
• Texte multi-lignes : permet de saisir un texte sur plusieurs lignes. On peut ainsi insérer des
RC dans le texte.
Dans le cas d'une saisie multi-lignes, il est possible de sélectionner le mode de défilement
des informations dans le champ (onglet "Détail" de la fenêtre de description).
- si le champ est en "Défilement Vertical" (seulement), les mots sont chassés à la ligne
suivante s'ils "débordent" de la ligne en cours. Le nombre de lignes visibles que vous
indiquez correspond au nombre de lignes présentes dans la fenêtre, mais bien évi-
tapant 3 lettres par seconde, il faudrait ... plus de 22 ans pour remplir le
champ !
Pour les champs de type numérique, il est possible de saisir une valeur minimale et maximum
(dans l’onglet "Détail" de la fenêtre de description du champ).
Lors de la saisie dans ce champ, WinDev contrôlera automatiquement que ces valeurs sont respec-
tées.
Dans l’onglet "IHM" de la fenêtre de description du champ, il est possible de définir les paramètres
suivants :
• Gestion de la touche TAB :
WinDev propose plusieurs modes de gestion de la touche TAB :
- Aucune : Le champ ne gère pas la touche TAB
- Champ accessible par TAB : la touche [TAB] du clavier permet alors de se positionner sur ce
champ.
Attention !
114
- Accepter les TAB en saisie : la touche [TAB] utilisée dans le champ permet de créer des
tabulations dans le texte.
• Le bouton "Groupes" permet de "regrouper" plusieurs champs pour modifier l'état de ces
champs (par programmation) en une seule opération.
Nous allons revenir sur la notion de plan et d'onglets plus loin.
• La "lettre d'appel" permet à l'utilisateur de se positionner directement sur le champ, en
tapant simplement une combinaison de touches du clavier (par exemple [ALT] + [Lettre]).
Dans le libellé d'un champ de saisie, si une lettre est précédée de "&", elle devient automati-
quement "lettre d'appel".
Par exemple : "&Nom du client" décrit [ALT]+[N] comme lettre d'appel.
• Le traitement du "clic droit" (de la souris) permet d'associer une action au clic droit de la sou-
ris. Le traitement est par exemple "validation des informations saisies", "appel de l'aide", ...
Le traitement est choisi parmi ceux des boutons (texte et graphique) présents dans la fenê-
tre.
Parfois il est plus utile d’utiliser les lettres d’appel plutôt que les actions de souris.
WinDev permet de réaliser facilement des interfaces (IHM) où l’utilisation de la
Partie 3 : Fenêtres et champs d’une fenêtre
Notes
souris n’est pas nécessaire. Par exemple, pour des applications de points de
vente (la place manque sur les comptoirs !) ou dans le domaine industriel : bornes
interactives, machine outils, ...
Dans l’onglet "Détail" de la fenêtre de description du champ, il est possible de définir les paramè-
tres suivants :
• Saisie obligatoire : si la saisie de ce champ est obligatoire, il ne sera possible de se position-
ner sur un autre champ que si une valeur a été saisie.
• Saisie assistée : si le champ est lié à une rubrique clé, la valeur trouvée dans le fichier et cor-
respondant aux premières lettres saisie est automatiquement proposée.
• Mémoriser la valeur : permet de mémoriser la dernière valeur saisie dans le champ avant la
fermeture de la fenêtre. Cette valeur sera automatiquement proposée à la prochaine ouver-
ture de la fenêtre.
• Historique des saisies : permet de proposer les dernières valeurs saisies par l’utilisateur pour
ce champ.
• Fin de saisie automatique : arrivé en fin de saisie (nombre de caractères total du champ
saisi), le programme passe directement au champ suivant, sans attendre la frappe de la tou-
che [TAB] ou l'usage de la souris.
• Effacement automatique : le texte affiché est sélectionné en totalité et s'efface lors de la
frappe du premier caractère.
• Avec sélection en affichage : permet de sélectionner le contenu du champ même si celui-ci
est en "Affichage seul".
• Pour les champs de type numérique, il est possible de saisir une valeur minimale et maxi-
male.
Lors de la saisie dans ce champ, WinDev contrôlera automatiquement que ces valeurs sont
respectées.
• Mise à blanc si zéro : pour les champs de type numérique, si la valeur prise par le champ est
nulle, le contenu du champ est vidé automatiquement.
• NULL si vide : retourne la valeur NULL si le champ n’a pas de valeur (Attention ! Ni 0, ni
115
La valeur NULL est très utile pour gérer le passage de paramètres à une
Astuce
• Mode ellipse : Permet de tronquer le contenu du champ si nécessaire. Si le champ est tron-
qué "en fin", les caractères "..." remplaceront la fin du texte à l’affichage.
• Glisser / déplacer : Le champ peut être source ou cible du glisser/déplacer ("drag and drop").
Résumé
Les boutons sont utilisés pour lancer des traitements. On les appelle égale-
ment "Contrôles". Le traitement associé au bouton s'exécutera lorsque le bou-
En détail
Un bouton peut être de 5 types (informations à renseigner dans la fenêtre de description, onglet
"IHM") :
1. Normal
2. Validation
3. Interruption
4. Abandon
5. Aide
4 Pour mieux comprendre la différence entre chaque type de bouton, ouvrez et testez la fenêtre
"champbouton.wdw".
1. Un bouton de type Normal est un bouton comme ceux que vous avez déjà créés.
Ce type de bouton n'a pas d'action prédéfinie particulière. Le code de sortie du champ qui était
en cours lors de la validation du bouton est exécuté avant le traitement du bouton.
4 Pour le vérifier, cliquez sur le bouton "Normal". Le message "Code de sortie du champ NOM"
s'affiche et ensuite le message "Clic sur le bouton NORMAL" s’affiche.
Astuce
On utilisera plutôt un bouton de type "Normal" dans des barres d’outils ou des bar-
res d’icones ou dans des fenêtres sans champs de saisie.
116
2. Un bouton en Interruption signifie que lorsque le bouton est activé, le code de sortie du
champ qui était en cours n'est pas exécuté. Le code du bouton s'exécute, puis le curseur est
repositionné sur le champ.
4 Pour le vérifier, repositionnez vous sur le champ "Nom" puis cliquez sur le bouton "Interruption".
Seul le code du bouton s'exécute, le code de sortie du champ ne s'exécute pas.
Pour afficher une page d'aide, il faut créer un bouton en interruption et non pas un bouton de
type aide.
On utilisera plutôt un bouton de type interruption pour appeler une fenêtre (afin
Astuce
d’interrompre la saisie en cours sans valider) puis revenir pour continuer la saisie.
C’est généralement le type utilisé pour les boutons "Aide".
3. Lorsqu'un bouton est en Validation, la frappe de la touche [RC] ou [Entrée] exécute le traite-
ment du bouton, le code de sortie du champ qui était en cours est exécuté.
4 Pour le vérifier, repositionnez vous sur le champ "Nom" puis cliquez sur le bouton "Validation".
Partie 3 : Fenêtres et champs d’une fenêtre
4. Lorsqu'un bouton est en Abandon, la frappe de la touche [ESC] ou [Echap] exécute le traite-
ment du bouton, le code de sortie du champ qui était en cours n'est pas exécuté.
4 Pour le vérifier, repositionnez vous sur le champ "Nom" puis cliquez sur le bouton "Abandon".
La "croix" qui se trouve en haut à droite dans la barre de titre d’une fenêtre n’est
pas du tout identique à un bouton de type Abandon. Lors du clic sur la "croix", la
fenêtre est fermée sans passer par un des boutons Validation ou Abandon de la
Attention !
5. Lorsqu'un bouton est de type Aide, la validation du bouton affiche automatiquement l'aide
associée au champ en cours (activée normalement par [F1]) sans exécuter les codes de sortie
et d'entrée du champ en cours.
117
Caractéristiques
Un bouton peut être associé à :
• une lettre d'appel.
• une touche de fonction.
• une touche de déplacement.
• une combinaison de touches.
La lettre d'appel ou la touche de fonction associée au bouton est indiquée dans les informations
concernant l’IHM du champ. Le bouton doit être de type "Normal" ou "Interruption".
Cela permet par exemple d'exécuter un traitement, d'ouvrir une fenêtre, ... sous l'action d'une tou-
che.
4 Dans notre fenêtre, appuyez sur [F2], une fenêtre de type "Info" s'affiche.
L'image du bouton peut être :
• une image que vous avez créée
• choisie parmi celles proposées dans le catalogue de WinDev (dans les "clipart" ou les "goo-
dies"). Nous avons déjà vu le fonctionnement du catalogue d’images dans la première partie
de ce cours. Pout plus de détails, consultez “Création d’une fenêtre avec des images”,
Le libellé d'un bouton texte ou d'un bouton graphique peut être modifié par programmation avec la
propriété Libelle. Si le libellé contient le caractère "&", la lettre qui suit sera soulignée et deviendra
la lettre d'appel du bouton :
BOUTON_TXT..Libelle = "Nouveau &libellé"
De la même façon, l'image d'un bouton graphique peut être modifiée par programmation :
BOUTON_IMG..Libelle = "SORTIE2.BMP"
118
La propriété Libelle reconnaît automatiquement si c'est le libellé ou l'image qui doit être modifié.
Pour cela, il suffit de créer les boutons hors écran et de leur associer une lettre
d’appel.
Pour créer un bouton hors écran, il suffit de placer ce bouton dans la fenêtre
d’accueil de la fenêtre sous l’éditeur.
Résumé
Les champs images permettent d'afficher des images.
Les champs images peuvent également servir de zones de clicage, consultez l’exemple "WD Zone
Partie 3 : Fenêtres et champs d’une fenêtre
de clicage".
Nous nous sommes déjà attardés sur ce type de champ (dans la leçon “Votre 1ère application”,
page 43), nous n’y reviendrons donc pas. D’autres options sont également disponibles sur un
champ image, consultez l’aide en ligne (mot-clé : "Image").
Résumé
Les sélecteurs d'options sont également appelés "case d'options". Ils
permettent de sélectionner une option et une seule, parmi celles propo-
sées.
En détail
4 Ouvrez la fenêtre "champselecteur.wdw".
4 Testez la fenêtre et cliquez sur les différents boutons, modifiez le sélecteur. Constatez ce qu'il
se passe.
4 Retournez sous l'éditeur et étudiez le code des boutons.
A chaque option d'un sélecteur est associé un entier (qui peut prendre une valeur de 1 à N, N étant
le nombre total d’options du sélecteur). La première option a le numéro 1, la deuxième le numéro
2, ... Les options sont numérotées de haut en bas et de gauche à droite.
Dans notre fenêtre : "SELECT_CIV=1" signifie que "Monsieur" est sélectionné, "SELECT_CIV=2"
signifie que "Madame" est sélectionné et "SELECT_CIV=3" signifie que "Mademoiselle" est sélec-
tionné.
119
Pour initialiser une case d'options, il suffit d'affecter une valeur entière au champ :
SELECT_CIV = 2 //sélectionne "Madame"
Résumé
Les interrupteurs sont également appelés "cases à cocher". Ils permet-
tent de choisir si la valeur de chaque option proposée est "vraie" ("Oui")
ou "fausse" ("Non").
Pour initialiser une case à cocher, il faut initialiser le choix correspondant avec la valeur "Vrai" ou
"Faux" selon le cas.
INTERR[2] = Vrai //pour cocher l'option 2 "Ecrire"
Pour connaître la valeur d'une option, il suffit de récupérer la valeur du champ ("vrai" ou "faux").
SI INTERR[2]=vrai ALORS
//option cochée
SINON
//option non cochée
FIN
120
//option cochée
SINON
//option non cochée
FIN
Il est possible de modifier le libellé d'un interrupteur ou d'un sélecteur avec la propriété Libellé.
Cependant, il n'est pas possible d'ajouter des options par programmation. Par exemple :
INTERR..Libelle ="Vous aimez plutôt" //change le libellé
//Change la première option
INTERR[1]..Libellé = "Lire un livre"
Partie 3 : Fenêtres et champs d’une fenêtre
Résumé
Les listes sont toujours déroulées. C’est pourquoi on les nomme éga-
lement "listes déroulées". Elles permettent de visualiser plusieurs
éléments et d'en sélectionner un ou plusieurs.
ment. Si la liste est liée à une requête, la liste contiendra une sélection d’enre-
gistrements du fichier.
• Utilisez une liste dont le contenu est défini dans l’éditeur si les valeurs sont
"STATIQUES". Elles ne changent pas durant le déroulement du programme.
• Utilisez une liste remplie par programmation lorsque le contenu de la liste est
issu de calculs ou si la sélection des éléments à intégrer à la liste ne peut être
réalisée par une requête.
En détail
Les listes peuvent contenir du texte et/ou du graphisme.
121
Remarques :
• Pour sélectionner plusieurs éléments dans une liste, l’option "multi-sélections" doit être cochée
dans la fenêtre de description de la liste (onglet "Détail").
• Les éléments de la liste peuvent être triés. Dans ce cas, l'option "Liste triée" doit être cochée
dans la fenêtre de description de la liste (onglet "Détail").
requête en même temps que le champ. La requête sera alors intégrée à la fenêtre
qui contient le champ.
Ce fichier ou cette requête sera lu(e) automatiquement sans avoir à écrire une seule ligne de code.
De plus, lors de la sélection d’un élément de la liste, la valeur récupérée pourra être :
• soit l’indice de la ligne sélectionnée
• soit une valeur du fichier
Généralement, on choisit comme valeur récupérée une rubrique du fichier. Il s’agit le plus souvent
de la clé unique.
La clé de parcours que vous sélectionnez sert de tri pour le remplissage de la liste et donc indique
l’ordre dans lequel seront visualisées les valeurs.
122
Lorsque la liste est créée, ses caractéristiques sont modifiables directement dans la fenêtre de
description du champ (option "Description" du menu contextuel).
Vous retrouverez tous les caractéristiques indiquées dans l’assistant.
Programmation
Dans le cas d’une liste multi-sélections, pour récupérer toutes les options sélectionnées, il faut uti-
liser la fonction ListeSelect.
Tant que la fonction ListeSelect ne renvoie pas la valeur "-1", cette fonction retourne l'indice de
l'option sélectionnée.
Indice est un entier = 0
Rang est un entier = 1 //rang de la sélection
//Choix est un tableau de chaîne contenant les sélections
123
Boucle
Indice = ListeSelect(LISTE1,Rang)
Si Indice=-1 ALORS SORTIR
Choix[Rang] = LISTE1[Indice]
Rang=Rang+1
Fin
Pour connaître le nombre d'éléments dans la liste, il faut utiliser la propriété Occurrence ou la fonc-
tion ListeOccurrence :
Si Liste1..Occurrence = 0 alors //liste vide
Suppression
Pour supprimer une valeur, il faut utiliser la fonction ListeSupprime.
Pour supprimer toutes les valeurs de la liste, il faut utiliser la fonction ListeSupprimeTout.
Recherche
Pour chercher un élément dans une liste, il faut utiliser la fonction ListeCherche.
Si ListeCherche(LISTE2,Valeur) = -1 alors
//n'existe pas
sinon
//existe déjà
Fin
Résumé
Une liste image est une liste permettant d’afficher à la fois du texte et des images. Un élément
d’une liste image est composé de :
• un libellé
• une miniature (ou image)
124
En détail
4 Ouvrez la fenêtre "ChampListeImage.wdw".
4 Lancez le test de cette fenêtre.
4 Cliquez sur les différents boutons et observez ce qu'il se passe.
4 Revenez sous l'éditeur et étudiez les traitements des boutons.
Pour sélectionner plusieurs éléments dans une liste, l’option "multi-sélections" doit être cochée
dans la fenêtre de description de la liste (onglet "Détail").
Les éléments de la liste peuvent être triés. Dans ce cas, l'option "Liste triée" doit être cochée dans
la fenêtre de description de la liste (onglet "Détail").
Pour accéder à un élément d'une liste, il faut préciser son indice. Le premier élément d'une liste a
l'indice "1".
Partie 3 : Fenêtres et champs d’une fenêtre
requête en même temps que le champ. La requête sera alors intégrée à la fenêtre
qui contient le champ.
Ce fichier ou cette requête sera lu(e) automatiquement sans avoir à écrire une seule ligne de code.
De plus, lors de la sélection d’un élément de la liste, la valeur récupérée pourra être :
• soit l’indice de la ligne sélectionnée
• soit une valeur du fichier
125
Généralement, on choisit comme valeur récupérée une rubrique du fichier. Il s’agit le plus souvent
de la clé unique.
La clé de parcours que vous sélectionnez sert de tri pour le remplissage de la liste et donc indique
l’ordre dans lequel seront visualisées les valeurs.
Lorsque la liste est créée, ses caractéristiques sont modifiables directement dans la fenêtre de
description du champ (option "Description" du menu contextuel).
Vous retrouverez tous les caractéristiques indiquées dans l’assistant.
Programmation
// Modifie l’élément 2
LISTEImage1[2]..Valeur = "Image Aide.ico"
LISTEImage1[2]..Miniature = "Aide.ico"
126
Résumé
Une combo est également appelée "combo box" ou encore "liste dérou-
lante". Comme pour une liste, lors de la création d’un champ "Combo",
vous pouvez créer :
• une combo dont le contenu est lié à un fichier ou une requête
• une combo dont vous définissez le contenu dans l’éditeur ou par
programmation
On appliquera les même règles que pour les listes pour choisir la
méthode de remplissage.
Au contraire des listes, les combos ne sont pas multi-sélections : un seul élément
peut être sélectionné dans la combo.
Les éléments de la combo peuvent être triés. Dans ce cas, il faut cocher l'option "Contenu trié"
dans les paramètres de la fenêtre de détails.
Les combos peuvent contenir du texte et du graphisme. De plus, la partie déroulée de la combo
peut être sous la forme :
• d’une seule colonne.
• d’une table à plusieurs colonnes.
Remarque : Vous avez la possibilité de modifier la largeur et la hauteur de la combo une fois
déroulée !
En détail
4 Ouvrez la fenêtre "champliste.wdw".
4 Lancez le test de cette fenêtre. La combo du haut est sans saisie et triée, celle du bas est avec
saisie et triée.
4 Cliquez sur les différents boutons et observez ce qu'il se passe.
4 Revenez sous l'éditeur et étudiez les traitements des boutons.
(c) PC SOFT - Version Express - Diffusion interdite
GAF WinDev.BOOK Page 127 Mardi, 11. juillet 2006 5:42 17
127
Programmation
Toutefois, la programmation est différente si la combo est définie "avec saisie" ou "sans saisie".
Il n'est pas possible de récupérer l'indice de l'élément sélectionné dans une combo avec saisie. On
ne peut récupérer que la valeur de l’élément en cours de sélection dans la combo.
128
Résumé
Partie 3 : Fenêtres et champs d’une fenêtre
L'avantage des tables est de pouvoir visualiser plusieurs données dans une seule fenêtre.
En détail
4 Pour savoir comment gérer une table mémoire, ouvrez la fenêtre "champtable.wdw".
La gestion des tables est différente selon s’il s’agit d’une table mémoire ou d’une table reliée à un
fichier ou une requête.
Nous allons détailler les deux types de champs table.
129
Pour ajouter une ligne dans une table, il faut utiliser la fonction TableAjouteLigne. Cette fonction
admet en paramètre le nom de la table et le contenu de la ligne. Dans la ligne, chaque valeur de
colonne est séparée par "une virgule".
//ajout d'une ligne dans sa totalité
TableAjouteLigne("TABLE1","Lundi","Œuf meurette",...
"Blanquette", "Glace vanille")
//ajout d'une ligne colonne par colonne
TableAjouteLigne("TABLE1")//ajoute la ligne vide
JOUR = "Lundi "
ENTREE = "Œuf meurette"
PLAT = "Blanquette"
DESSERT = "Glace"
La fonction TableModifieLigne modifie une ligne de la table (soit la ligne en cours, soit la ligne dont
le numéro d'indice est précisé).
La fonction TableSelect retourne l'indice de la ligne en cours (sélectionnée) ou l’indice d’une des
lignes sélectionnées dans le cas d’une table multi-sélections.
Une ligne de table est supprimée avec la fonction TableSupprime. La fonction TableSupprimeTout
vide toute la table mémoire.
L'état d'une table ou de chaque colonne de la table est défini sous l'éditeur, il peut être modifié par
programmation avec la propriété Etat.
Table reliée à un fichier ou une requête
Lors de la création d’un champ table, dans le cas où vous sélectionnez dans l’assistant une table
remplie à partir d’un fichier ou d’une requête, vous devez indiquer le fichier de l’analyse ou la
requête qui servira de source de données pour le remplissage.
requête en même temps que le champ. La requête sera alors intégrée à la fenêtre
qui contient le champ.
Ce fichier ou cette requête sera lu automatiquement sans avoir à écrire aucune ligne de code.
De plus lors de la sélection d’une ligne de la table, la valeur récupérée pourra être :
• soit une rubrique de la table,
• soit une rubrique du fichier même si elle n’est pas affichée.
130
La clé de parcours que vous sélectionnez sert de tri pour le remplissage de la table et indique donc
l’ordre dans lequel seront visualisées les valeurs.
Par exemple, vous pourrez visualiser dans une table les produits et le libellé des produits à com-
mander.
Lorsque la table a été créée, ses caractéristiques sont modifiables directement dans la fenêtre de
description de la table (option "Description" du menu contextuel, onglet "Contenu").
Dans les titres de colonnes, une loupe peut apparaître. Cette loupe permet de faire une recher-
che dans le fichier à partir de la valeur qui est saisie.
Il s’agit plus précisément d’un positionnement dans le fichier. Si vous décidez de "scroller", vous
parcourez la totalité du fichier.
Partie 3 : Fenêtres et champs d’une fenêtre
De plus, des flèches peuvent également apparaître dans le titre des colonnes, cette flèche indique
que l’on peut trier la table sur la colonne.
Il faut noter que la loupe ou la flèche de tri sont visibles sur toutes les colonnes de
Notes
la table si celle-ci est remplie par programmation (table mémoire) ; par contre, la
loupe et la flèche ne sont visibles que sur les colonnes liées à une clé (index) pour
les tables reliées à un fichier ou une requête.
Les options "Graphique" et "Calculs automatiques" sont disponibles uniquement si le clic droit a été
effectué sur une colonne de type numérique
Voici quelques astuces pour optimiser le look de vos tables :
131
• Pour utiliser un titre de colonne multi-lignes, il suffit de cocher l’option "Titre de colonne
multi-lignes" dans l’onglet "Détail" de la fenêtre de description du champ Table.
• Pour utiliser une couleur de fond dégradée, affichez l’onglet "Style " de la fenêtre de descrip-
tion du champ. Sélectionnez l’élément "Cadre extérieur", puis sélectionnez le cadre de type
"Dégradé".
Pour plus de détails sur le fonctionnement d’une table fichier ou mémoire, consultez l’aide en ligne
(mot-clé : "Table").
Résumé
Aussi appelé champ "Liste arborescente" ou champ "Treeview", un champ Arbre est comparable à
une liste dont le contenu est classé hiérarchiquement. Plus simplement, les données sont classées
comme lorsque vous utilisez l’explorateur de fichiers de Windows.
En détail
Ces fonctions sont comparables aux fonctions de gestion des tables remplies par programmation.
Par exemple, ArbreAjoute, ArbreSupprimeTout, ArbreSupprime, ArbreSelect, …
Il est également possible de manipuler le champ Arbre ligne par ligne pour modifier les propriétés
d’une ligne. Il est par exemple possible d’utiliser :
• la propriété Couleur pour modifier la couleur d’une ligne,
• la propriété CouleurFond pour modifier la couleur de fond d’une ligne,
• la propriété Police pour modifier les caractéristiques de la police d’une ligne,
• ...
Nous ne détaillerons pas les fonctions de manipulation des arbres. Pour plus de détails, consultez
l’aide en ligne (mot-clé : "Arbre, Manipuler un arbre par programmation").
Résumé
Les jauges permettent de représenter la progression d’un traitement. La valeur de la jauge peut
être modifiée par programme. La jauge peut être horizontale ou verticale. Les couleurs et le décor
sont entièrement paramétrables.
132
En détail
4 Ouvrez et testez la fenêtre "champjauge.wdw".
4 Pour affecter le champ jauge avec une valeur, il suffit de faire une affectation, comme pour un
champ numérique.
JAUGE = 75
4 Pour définir les bornes minimales et maximales d’une jauge, utilisez les propriétés BorneMin et
BorneMax :
JAUGE..BorneMin = 0
JAUGE..BorneMax = 100
Voici le code du bouton "Exécution" qui permet de faire évoluer les jauges.
I est un entier
POUR I = 1 A 100
JaugeHorizontale1 = I
JaugeHorizontale2 = I
Partie 3 : Fenêtres et champs d’une fenêtre
JaugeVerticale = I
JaugeImage = I
Multitache(1) // pour rafraîchir l’affichage
FIN
JaugeHorizontale1 = 0
JaugeHorizontale2 = 0
JaugeVerticale = 0
Résumé
Dans les listes, dans les tables, ... des ascenseurs sont automatiquement affichés si nécessaires.
Dans certains traitements particuliers, il peut être intéressant de créer des champs de type "Ascen-
seur".
Le principe de gestion des ascenseurs est le suivant :
• la valeur de la cage de l'ascenseur (le petit carré qui bouge !) est récupérée dans une variable
• une valeur peut être affectée à cette cage.
Pour déplacer l'ascenseur, l'utilisateur peut cliquer sur un des boutons fléchés, ou déplacer directe-
ment la cage elle-même. L'utilisateur peut même cliquer entre la cage et les flèches pour avoir une
avance rapide.
En détail
Par défaut, l’ascenseur varie entre les valeurs 1 et 100. Chaque clic sur un des boutons fléchés
déplace de 1 la cage et chaque clic entre la cage et le bouton déplace de 10. Ces valeurs peuvent
être modifiées dans la fenêtre d'informations de l'ascenseur ou en programmation grâce aux pro-
priétés BorneMin, BorneMax et AvanceRapide.
133
Résumé
Un champ Potentiomètre correspond à un objet graphique circulaire ou
linéaire permettant de faire varier une valeur. La valeur en cours du poten-
tiomètre peut être récupérée dans le programme dans une variable et être
ainsi exploitée dans des calculs.
En détail
4 Pour affecter le champ potentiomètre avec une valeur, il suffit de faire
une affectation, comme pour un champ numérique.
POTAR = 75
Résumé
Un champ Spin permet de gérer l’incrémentation et la décrémenta-
tion d’une valeur. Un Spin est constitué de 2 boutons collés.
Contrairement à un bouton, si l’on clique sur le champ Spin et que
l’on garde le bouton de la souris enfoncé, l’événement de clic est
répété automatiquement.
Résumé
WinDev permet également de créer des fenêtres avec des onglets.
Dans ce cours, vous avez déjà vu l’intérêt des onglets. En effet, toutes les fenêtres de description
des champs et des fenêtres dans WinDev sont des fenêtres avec onglets. Un onglet permet de sai-
sir des informations regroupées par thèmes (Général, Détail, ...). On nomme ces thèmes des
"volets".
134
Un onglet permet de répartir les champs d’une fenêtre dans plusieurs volets afin de ne pas alourdir
la fenêtre. L’utilisateur ne voit les informations que par volet. Les champs sont classés suivant des
thèmes (un thème correspond à un volet d’un onglet).
Dans un onglet, les champs sont associés au volet auquel ils appartiennent.
Pour accéder aux champs d'un volet d’onglet, il suffit de cliquer sur le volet d’onglet correspondant.
Les champs sont actifs lorsque le volet est actif. A un instant donné, seul un volet d'un "onglet" est
visible dans son intégralité. Seul le titre des autres volets est visible.
En détail
4 Créez une fenêtre vierge, donnez-lui le nom "ONGLET1". Cette fenêtre va vous permettre de
manipuler les onglets.
4 Pour créer les onglets, cliquez sur l'icone puis cliquez dans la fenêtre à l’emplacement où
l'onglet doit être créé. Un onglet à deux volets est créé par défaut.
4 Pour modifier la description de l'onglet, affichez le menu contextuel de l’onglet (clic droit de la
Partie 3 : Fenêtres et champs d’une fenêtre
Pour chaque volet, vous pouvez modifier les paramètres en cliquant dans la combo
"Catégorie" :
• "Général" pour modifier le libellé
• "Détails" pour modifier l'état d'affichage et l'image
• "Aide" pour modifier le message d'aide
Les onglets sont créés dans la fenêtre. Il reste à associer les champs à chaque onglet.
4 Créez un champ de saisie de type texte. Laissez le nom proposé par défaut.
4 1.
Pour associer le champ à un onglet, deux solutions :
En déplaçant le champ :
•Cliquez sur l’onglet souhaité pour rendre un des volets actifs.
•Cliquez sur le champ à associer et déplacez-le vers le volet actif.
Le champ est alors directement associé à l’onglet et au volet d’onglet.
2. En utilisant le menu contextuel :
•Déplacez si nécessaire le champ à associer sur votre onglet.
•Cliquez avec le bouton droit de la souris sur le champ à associer, et choisissez l’option
"Associer à un onglet ..." du menu contextuel.
•Sélectionnez l’onglet et le volet d’onglet souhaité et validez.
Le champ est automatiquement associé à l'onglet et au volet d’onglet spécifié.
Un champ ne peut être associé qu'à un seul volet d’onglet. Le champ sera actif et visible lorsque le
volet d’onglet sera activé.
135
cours.
Par défaut lorsque vous créez un champ, celui-ci est associé à un onglet si et seulement s’il est
créé sur un onglet.
Pour qu'un champ soit "hors" onglet :
1. Faites un clic droit sur le champ, puis sélectionnez "Associer à un onglet ..." dans le menu
contextuel qui apparaît.
2. Choisissez "Aucun", puis validez.
Résumé
Un champ Web caméra permet de visualiser une source vidéo provenant d’une caméra extérieure
reliée à l’ordinateur.
Exemple
L’exemple "WD Webcam" livré avec WinDev montre l’utilisation d’un champ Web
En détail
Les fonctions permettant de gérer le champ Web caméra commencent par VidéoXXX :
// Sauvegarde de la vidéo retransmise dans le champ Web
// Caméra "CAMCUISINE" sous forme d'un fichier AVI de 60 secondes
Res est un booléen = VidéoCapture(CAMCUISINE,...
"C:\Temp\MaVideo.AVI",...
viCaptureVidéo,60)
SI Res = Vrai ALORS
Info("Vidéo correctement sauvegardée")
SINON
Erreur("Impossible d’enregistrer la vidéo")
FIN
Notes
Pour visualiser :
• une image capturée avec la fonction VidéoCapture, utilisez un champ Image.
• une séquence vidéo capturée avec la fonction VidéoCapture, utilisez un champ ActiveX per-
mettant de lire une vidéo.
4 Pour
che.
afficher en direct la vidéo en provenance de la Web caméra, utilisez la fonction VidéoAffi-
4 Pour comprendre le fonctionnement du champ Web caméra, vous allez simplement charger
(c) PC SOFT - Version Express - Diffusion interdite
GAF WinDev.BOOK Page 136 Mardi, 11. juillet 2006 5:42 17
136
Champ ActiveX
Résumé
Le champ ActiveX permet de gérer simplement les contrôles ActiveX. Les contrôles ActiveX sont des
composants réutilisables utilisant la technologie ActiveX et pouvant être intégrés dans une fenêtre.
En détail
Partie 3 : Fenêtres et champs d’une fenêtre
Un ActiveX est associé à des propriétés et des méthodes. Ces propriétés et méthodes peuvent être
utilisées en W-Langage pour manipuler directement le champ ActiveX. Il suffit d'utiliser la syntaxe
Automation du W-Langage.
Par exemple :
// LecteurAVI est un champ ActiveX
LecteurAVI>>Zoom = 12 // Affectation d'une propriété
LecteurAVI>>Pause(10) // Appel de méthode
L’exemple "WD Navigateur" livré avec WinDev illustre l’utilisation d’un champ
ActiveX dans une fenêtre.
Champ OLE
Résumé
Le Champ OLE permet de manipuler un objet OLE.
Rappel : OLE est un protocole d'échange de données et de commandes dont le principe consiste à
imbriquer et lier des objets. Dès que l'objet incorporé est ouvert, la connexion client/serveur est
ouverte.
137
En détail
Plus techniquement, un objet OLE correspond à des données encapsulées contenant des données
diverses telles que des textes, des images, des sons, ... L'encapsulation de données dans des
objets OLE permet d'incorporer ces objets sans avoir besoin de connaître leur structure.
WinDev est un client OLE. Les applications développées avec WinDev demandent des données,
affichent et stockent les objets OLE.
Les serveurs OLE mettent à disposition des objets aux clients qui en font la demande. Ce sont par
exemple Paint Brush, Excel, WinWord, ...
En tant que client, WinDev sait gérer des objets OLE. Il permet de :
• dessiner un objet dans un champ OLE. Un objet peut être par exemple une feuille Excel, une
image de Paint Brush ...
• éditer un objet OLE dans un champ OLE. L'objet OLE peut être :
- choisi sous l'éditeur ou par programmation.
- défini en fonction d'un serveur ou d'un fichier.
Remarques :
• En programmation, un champ OLE est manipulé par des fonctions spécifiques. Une applica-
Résumé
Les formes permettent de dessiner des éléments aux formes géométriques (cercle, ellipse, rectan-
gle, carré, ligne ou flèche). Un assistant de création de champs forme permet de définir toutes les
caractéristiques d’un champ forme :
• couleurs.
• formes, dimensions, ...
En détail
4 Pour obtenir un aperçu de ces champs, ouvrez et testez la fenêtre "champforme.wdw".
Type de champ : Champ Code-Barres
Résumé
Le champ Code-Barres permet d’afficher simplement des code-barres dans vos fenêtres. Il est ainsi
possible de visualiser directement le code-barres associé à un produit à l’écran.
Ainsi, il est possible par exemple de lire le code-barres d’un produit à l’aide d’un appareil spécialisé,
d’afficher le code-barres à l’écran, et d’enregistrer sa valeur dans un fichier de données.
138
Résumé
Un champ HTML permet d’intégrer une page HTML dans une fenêtre WinDev.
Résumé
Un champ "bouton état sur table" permet de créer automatiquement un état dont le contenu sera
Partie 3 : Fenêtres et champs d’une fenêtre
L’état est créé automatiquement. Cet état a la même structure que le champ table (même colon-
nes et mêmes données)
Il faut bien évidemment un champ Table pour pouvoir utiliser le bouton "Etat sur table".
En détail
La méthode pour utiliser ce type de bouton est la suivante :
1. Ouvrez ou créez une fenêtre avec un champ Table.
2. Sélectionnez le champ Table en cliquant dessus.
3. Cliquez dans la barre d’outils des champs sur puis déplacez la souris dans la fenêtre
contenant la table (l’ombre du bouton est visible).
4. Cliquez dans la fenêtre pour insérer le bouton. L’état est créé automatiquement.
5. Validez le nom de l’état et enregistrez l’état.
6. Revenez sur la fenêtre et testez.
L’état est bien entendu modifiable. Il est possible de changer les styles, les polices, les titres. Nous
consacrerons plus loin dans ce guide un chapitre sur les états.
Résumé
Un superchamp est un type de champ avancé. Un superchamp regroupe un ensemble de champs
dans un but précis. Ces champs sont indépendants des traitements de la fenêtre les accueillant.
Avantage des superchamps : les superchamps sont des éléments indépendants et facilement réu-
tilisables quelle que soit la fenêtre où ils sont utilisés. Intégrables dans un dictionnaire, ils peuvent
être facilement transférés d'un projet à un autre (consultez la leçon “Dictionnaire”, page 419).
139
En détail
Exemple : Ces trois champs constituent un superchamp. Dans cet exemple, le bouton permet de
calculer automatiquement la date de fin, en fonction de la période choisie dans le menu contextuel
du bouton.
Résumé
Le champ Fenêtre interne permet d’inclure une fenêtre (et son code) dans une autre fenêtre.
A l’exécution, la fenêtre à fusionner sera dynamiquement fusionnée à la fenêtre de réception.
Ce champ permet de partager dynamiquement une même partie d’interface au sein d’une ou de
plusieurs applications.
La fenêtre à fusionner peut être issue d’un composant.
Détail
Une fenêtre interne est une fenêtre spécifique (pas de barre de titre pas de menu, ...). Dans cette
fenêtre, vous pouvez mettre tout type de champs. Une fois enregistrée, cette fenêtre interne pourra
être utilisée dans n’importe quelle fenêtre de votre application par le biais du champ fenêtre
140
interne.
4 Ouvrez la fenêtre "fnListeOptions". Cette fenêtre utilise deux fenêtres internes : Fl_Param_Ini et
Fl_Param_Persist.
Ces deux fenêtres internes sont rendues visibles ou invisible selon la sélection réalisée dans le
champ arbre.
Pour créer une fenêtre interne, utilisez l’option "Fichier .. Nouveau .. Fenêtre", et sélectionnez
l’onglet "Fenêtre interne".
Pour utiliser une fenêtre interne dans une autre fenêtre, créer un champ fenêtre interne (option
"Insertion .. Spécial .. Champ Fenêtre Interne").
Résumé
Le champ Barre d'outils est un type de champ avancé, lié à une fenêtre. Une barre d'outils contient
Partie 3 : Fenêtres et champs d’une fenêtre
plusieurs champs (bouton, champ de saisie, combo, ...) permettant à l'utilisateur de lancer rapide-
ment certaines fonctionnalités de son application. Une barre d'outils peut être :
• Ancrée : la barre d'outils est "collée" à un des bords de la fenêtre.
141
Résumé
Le format RTF (Rich Text Format) permet de coder d'une manière spécifique le texte et les graphi-
ques afin de faciliter leur transfert d'une application à une autre.
Le format RTF est un format dit "à balises". En effet, des balises spécifiques permettent de spéci-
fier le style de chaque mot, groupe de mots ou phrases présents dans le texte au format RTF.
WinDev permet de manipuler du texte au format RTF grâce à l'option "Texte avec mise en forme"
des champs de saisie et des libellés.
• Si le texte au format RTF est affiché dans un champ ne reconnaissant pas le format RTF, les
balises seront affichées.
• Si le texte au format RTF est affiché dans un champ reconnaissant le format RTF, les balises
seront automatiquement interprétées et le texte sera mis en forme.
Le champ de saisie RTF permet aussi bien d'afficher un texte au format RTF que de saisir un texte
au format RTF. Lors de la saisie d'un texte dans un champ RTF, ce texte est au format RTF. Ce texte
Remarques :
• Si vous saisissez un même texte dans un champ de saisie classique et dans un champ de
saisie RTF, la taille de la chaîne de caractères présente dans le champ sera supérieure pour
le champ de saisie RTF (car les balises RTF sont ajoutées).
• Le champ de saisie RTF permet de gérer un format RTF basique, permettant une utilisation
quelle que soit la plate-forme. Les caractères spécifiques tels que les sauts de page, les
notes ... ne sont pas gérés.
Résumé
Le champ Séparateur permet de découper une fenêtre en plusieurs zones distinctes. Ces zones
sont redimensionnables par l’utilisateur lors de l’exécution de la fenêtre.
Pour que les champs suivent automatiquement le redimmensionnement de la zone, aucune pro-
grammation n’est nécessaire : il suffit de définir l’ancrage des champs de chaque zone (option
"Ancrage" du menu contextuel du champ).
En détail
4 Pour obtenir un aperçu du champ séparateur, ouvrez et testez la fenêtre "ChampSépara-
teur.wdw".
142
Résumé
Le champ Graphe permet d’inclure simplement un graphique dans une fenêtre. La source de don-
nées de ce champ peut être :
• définie par programmation
• un fichier ou une requête
• une colonne de table
• un champ Liste
• un tableau W-Langage
• Courbe,
• Nuage de points.
Pour chacun des types de graphes, des options d'affichage permettent d'avoir des rendus diffé-
rents.
Pour plus de détails, consultez l’aide en ligne (mot-clé : "Champ Graphe").
Détail
4 Ouvrez la fenêtre "ChampGraphe". Cette fenêtre utilise un champ Graphe. Les données de ce
graphe sont définies par programmation grâce à la fonction grAjouteDonnées.
La fenêtre de description du champ Graphe permet de définir les principaux paramètres du
champ.
Résumé
Les zones répétées permettent de répéter "n" fois un ensemble de champs. Lors de cette répéti-
tion, les champs de la zone répétée peuvent afficher des informations différentes. Il est ainsi possi-
ble d’afficher, à chaque répétition, des enregistrements d’une base de données.
Les zones répétées peuvent être de deux types :
• Zone répétée mémoire : la zone répétée est remplie par programmation.
• Zone répétée fichier : la zone répétée est remplie à partir d’un fichier de données ou d’une
requête, automatiquement, sans une seule ligne de code.
Pour chaque champ de la zone répétée, plusieurs caractéristiques peuvent être modifiées lors de
la répétition : valeur, libellé, couleur du texte, état, ...
143
La zone répétée peut être déplacée comme un champ. Lors de son déplacement, tous les champs
associés à la zone répétée se déplacent en même temps.
Lors de la création d’une zone répétée, il est possible de définir le nombre de colonnes qui seront
affichées. Cette option permet d’obtenir une répétition horizontale dans la limite du nombre de
colonnes indiqué. Lorsque le nombre de colonnes est atteint, une nouvelle répétition verticale est
ajoutée.
En détail
Dans une zone répétée mémoire, chaque ligne de la zone répétée est identifiée par un indice.
Pour ajouter une ligne dans une zone répétée (code serveur), il faut utiliser la fonction ZoneRépé-
téeAjouteLigne. Cette fonction attend en paramètre :
• le nom de la zone répétée,
• les valeurs des attributs (dans l’ordre) séparées par des virgules :
//Ajout d’une ligne dans la zone répétée
//La zone répétée contient 4 attributs, associés respectivement
//aux champs : LIBMAQUETTE, IMGMAQUETTE, QUANTITE, PRIXUNI
ZoneRépétéeAjouteLigne(ZoneRépétée1, ...
"Maquette n°1", "IMAGE_MAQUETTE1.JPG", 10, 45.65)
Ce fichier ou cette requête sera lu automatiquement sans avoir à écrire aucune ligne de code.
La clé de parcours sélectionnée sert de tri pour le remplissage de la zone répétée et indique donc
l’ordre dans lequel seront visualisées les valeurs.
144
Les caractéristiques d’une zone répétée sont disponibles dans la fenêtre de description de la zone
répétée (menu contextuel, option "Description").
Pour plus de détails sur le fonctionnement d’une zone répétée fichier ou mémoire, consultez l’aide
en ligne (mot-clé : "Zone répétée").
Partie 3 : Fenêtres et champs d’une fenêtre
145
146
4 1.
Pour définir un ordre de saisie par sélection :
Sélectionnez les champs dans l'ordre de saisie que vous souhaitez tout en maintenant la
touche [CTRL] enfoncée.
2. Sélectionnez l'option "Fenêtres .. Ordre de navigation .. Définir par la sélection".
Vous pouvez visualiser l'ordre de saisie des champs en maintenant appuyée la touche [F5].
147
Par programmation, il est également possible de modifier l’état d’un champ. Il suffit d’écrire :
NomDuChamp..Etat = Actif //ou Grisé ou AffichageSeulement
148
Il ne faut pas mettre systématiquement l’ancrage sur tous les champs d’une fenê-
tre. Il faut choisir judicieusement les champs et les fenêtres sur lesquels l’ancrage
est utile.
Par exemple, dans une fenêtre contenant un champ Table, il peut être intéressant
Notes
Par contre, on évitera de redimensionner des champs de saisie, les boutons, les
sélecteurs ou les interrupteurs.
L’ancrage est symbolisé par des flèches rouges sur les côtés du champ :
Partie 3 : Fenêtres et champs d’une fenêtre
149
L'aide associée au champ est décrite avec l'onglet "Aide" dans la fenêtre de description du champ.
Il convient d’utiliser le message d’aide lorsque son texte n’excède pas une ligne. Il permet de don-
ner des informations supplémentaires sur les données en cours de saisie.
Le message d'aide d'un champ peut être modifié avec la propriété Message :
SAISIE1..Message = "Le nom ne doit pas dépasser 25 caractères"
Bulle d'aide
La bulle d'aide s'affiche lorsque le champ est survolé avec la souris. Elle reste affichée tant que le
curseur de la souris est positionné sur le champ.
Il convient d’utiliser la bulle d’aide lorsque son texte n’excède pas quelques mots. Les bulles d'aide
sont particulièrement intéressantes pour les boîtes à outils ou les barres d'icones, leurs icones
étant petits et souvent sans libellé.
150
Le texte de la bulle d'aide d'un champ peut être modifié avec la propriété Bulle :
BOUTON10..Bulle = "Quitter"
Les bulles d’aide peuvent être multi-lignes. Les bulles d'aide peuvent être désactivées ou réactivées
avec la fonction BulleActive. Il est possible de modifier la couleur de fond de la bulle grâce à la fonc-
tion BulleCouleur.
On est encore loin du clonage humain mais WinDev est capable de cloner des champs !
La fonction ChampClone permet de dupliquer un champ déjà décrit dans une fenêtre ou dans un
état. Cette fonctionnalité est très utile et évite de créer des tableaux de champs dont le nombre
d’occurrences serait statique.
Exemple : créer une liste de boutons au comportement générique (avec utilisation de la P.O.O.).
Pour plus de détails, consultez l’aide en ligne (mot-clé : "ChampClone").
Eventuellement, mettez des champs "hors écran" et clonez-les dans la zone visi-
Astuce
ble de la fenêtre (en précisant leurs coordonnées dans les paramètres de Champ-
Clone).
La feuille de styles du projet est rattachée au projet. L'ensemble de styles est sauvegardé dans un
fichier ayant pour nom "<nom_projet>.STY".
Lors de la création d'un champ, un style est proposé par défaut. Le style proposé est celui qui est
décrit dans les options du projet lors de la sélection du gabarit appliqué au projet.
Quel que soit le type du champ, un style du gabarit est proposé.
Il est bien entendu possible de modifier ensuite le style du champ. Il faut, dans ce cas, faire un clic
droit sur le champ et sélectionner dans le menu contextuel l’option "choisir un style".
151
4 Pour modifier un style, sélectionnez le style et cliquez sur le bouton "Modifier" et modifiez les
caractéristiques du style.
4 Pour supprimer un style, sélectionnez le style et cliquez sur le bouton "Supprimer" (tous les
champs qui utilisaient ce style verront automatiquement leur style remplacé par le style "stan-
dard").
Tous les champs rattachés à ce style seront automatiquement modifiés.
4 Pour créer un style, sélectionnez un style s'approchant du style à créer et cliquez sur le bouton
"Créer".
Il est également possible de modifier la couleur, la police... d'un champ, sans modifier le style : on
dissocie alors le champ du style.
4 1.
Pour modifier le style du champ sans affecter la feuille de styles :
Sélectionnez le champ à modifier.
2. Cliquez avec le clic droit de la souris, le menu contextuel s'affiche.
3. Sélectionnez "Description" puis cliquez sur l’onglet "style".
4. Modifiez les caractéristiques du style du champ avec les options proposées.
5. Validez. Dans la fenêtre qui s’ouvre, vous pouvez dissocier le style du champ, ou ajouter le
nouveau style au projet.
Il est déconseillé de dissocier le style d’un champ. En effet, lorsque un champ est
dissocié :
Astuce
4 Pour rattacher le champ à un style, il suffit de sélectionner de nouveau un style pour le champ.
Lorsqu'un style d'un champ n'est pas trouvé dans la feuille de styles en cours du projet, il est possi-
ble de :
• conserver le style en le dissociant de la feuille de styles.
• intégrer ce style à la feuille de style en cours.
152
Il est possible de visualiser rapidement les différents styles utilisés par les
champs d’une fenêtre grâce à l’option "Fenêtre .. Editer les styles utilisés".
Ces valeurs sont conservées par défaut dans la base de registres, mais les fonctions W-Langage
Partie 3 : Fenêtres et champs d’une fenêtre
153
154
Introduction
Lors de la création d’une fenêtre, il est nécessaire de donner un nom à la fenêtre et un titre. Le
nom sera manipulé par programmation. Le titre sera visible dans la barre de titre lors de l’affichage
de la fenêtre en exécution.
Vous comprenez donc bien l’importance de ces deux paramètres.
Ne pas appeler les fenêtres avec le nom par défaut "Fenêtre1", ... Il est conseillé
de donner un nom explicite à la fenêtre. Ce nom peut être composé de plusieurs
mots mais SANS caractère espace. Le caractère Espace n’est pas facilement
manipulable par programmation.
Toutefois, n’exagérez pas trop sur la longueur du nom de la fenêtre même si ce
Astuce
Onglet "Général"
Dans cet onglet, on indique le nom, la description, et le titre de la fenêtre. Nous avons déjà précisé
à quoi servait le nom et le titre, nous n’y reviendrons pas.
La description est purement indicative pour le développeur. Elle permet de résumer un peu plus
longuement ce à quoi sert la fenêtre. Elle sert également à décrire la fenêtre lors de l’impression
du dossier.
Onglet "IHM"
Dans cet onglet, de très nombreuses informations sont regroupées. On retrouve les caractéristi-
ques concernant :
• La taille et la position de la fenêtre
• Le menu contextuel de la fenêtre
• Le curseur de survol et l’action du clic droit sur la fenêtre, ...
Onglet "Détail"
Dans cet onglet, les paramètres spécifiques au fonctionnement de la fenêtre sont regroupés. On
retrouve les caractéristiques concernant :
• Le type de la fenêtre
155
Onglet "Image"
Cet onglet permet de définir les différentes images utilisées par la fenêtre :
• l’image de fond de la fenêtre et des barres d’icones associées à cette fenêtre en mode MDI. Cette
image est modifiable également par programmation avec la propriété ImageFond.
• L’image de la poignée de redimensionnement de la fenêtre.
• L’icone associé à la fenêtre est visible dans le coin en haut à gauche de la fenêtre au niveau de la
barre de titre. Il personnalise la fenêtre. Si aucun icone n’est indiqué, c’est l’icone associé au pro-
jet qui sera visible.
Onglet "Langue"
Cet onglet permet d’indiquer les différentes langues à gérer dans la fenêtre (Cas des projets "multi-
langues". Pour plus de détails, consultez la leçon “Applications multilingues”, page 159).
Onglet "Aide"
Cet onglet permet d’indiquer le nom du fichier d’aide contextuelle associé à la fenêtre. Ce fichier
d’aide est utilisé lors de l’appui sur le bouton d’aide de la fenêtre pour activer une aide contextuelle
au clic sur la fenêtre.
Onglet "Style"
Cet onglet regroupe les paramètres relatifs au style de la fenêtre. On peut sélectionner :
• le gabarit
• les icones affichés (agrandissement, réduction, aide, menu système, …)
• le type de bordure
• la couleur de fond
• le thème XP
• l’opacité (permet de définir la transparence d’une fenêtre)…
156
4 Pour afficher une barre de message dans la fenêtre en cours, sélectionnez l’option "Fenêtres ..
Barre de message .. Avec barre de message". La barre de message est alors affichée sous l’édi-
teur.
4 1.
Pour modifier la description de la barre de message, ajouter des cases, ... :
Affichez le menu contextuel de la barre de message sous l’éditeur.
2. Sélectionnez l’option "Description". La fenêtre de description de la barre de message appa-
raît.
L’exemple "WD Assistant" livré avec WinDev montre l’utilisation des plans dans
une fenêtre.
157
Les plans sont très faciles à manipuler. En effet, lorsque vous souhaitez décrire un nouvel écran
sans changer de fenêtre, utilisez la touche [PageSuivante] pour passer au plan suivant, et la touche
[PagePrécédente] pour passer au plan précédent. Par défaut, le premier plan d’une fenêtre est
nommé "Plan 0". Chaque plan suivant est numéroté, "Plan 1", "Plan 2", ...
plan en cours est affiché sous l’éditeur de fenêtres (dans la fenêtre d’accueil de la
fenêtre).
Par programmation, il est également possible de modifier le plan en cours d’une fenêtre :
// Code de clic du bouton PRECEDENT
MaFenêtre..Plan = MaFenêtre..Plan - 1
MaFenêtre est un mot-clé qui retourne le nom de la fenêtre qui contient le traite-
ment où est exécuté MaFenêtre. Il peut être utilisé dans les traitements des
champs de la fenêtre, les traitements de la fenêtre et également dans les procé-
dures locales de la fenêtre.
Déclarations globales
Exécuté lors de l’ouverture de la fenêtre avant que celle-ci ne soit visible. Ce traitement contient par
exemple les déclarations des variables globales, les initialisations de champs et de variables, ...
Initialisation
Exécuté lors de l’ouverture de la fenêtre avant que celle-ci ne soit visible mais APRES le traitement
d’initialisation des champs de la fenêtre.
Fermeture
Exécuté lors de la fermeture de la fenêtre. Il contient par exemple une instruction pour retourner un
résultat, ...
Prise de focus
Exécuté à chaque fois que la fenêtre passe en saisie (la fenêtre prend le focus). Lorsque la fenêtre
prend le focus, sa barre de titre devient bleue (ou d’une autre couleur selon ce qui a été choisi dans
le panneau de configuration de Windows).
158
Perte de focus
Exécuté à chaque fois que la fenêtre perd le focus. Lorsque la fenêtre perd le focus, sa barre de
titre devient grise (ou d’une autre couleur selon ce qui a été choisi dans le panneau de configura-
tion de Windows).
Modification de la taille
Exécuté à chaque fois que la taille de la fenêtre est modifiée (iconisée, maximisée, retour à sa taille
normale, ...).
Partie 3 : Fenêtres et champs d’une fenêtre
159
160
161
Cet écran permet également de définir les options linguistiques utilisées par défait pour cha-
que langue du projet (séparateur de décimales, ...).
162
Partie 3 : Fenêtres et champs d’une fenêtre
163
Si les images associées aux champs images, aux boutons, ... contiennent un texte
à traduire, il est possible de spécifier une image différente pour chaque langue du
Astuce
projet.
Si une aide est associée aux champs et/ou fenêtres, n’oubliez pas de saisir cette
aide dans toutes les langues !
Si le système d’exploitation gère plusieurs langues (Hébreux, Arabe, Grec, ...) lors
Notes
de la saisie des traductions dans ces langues, l’alphabet correspondant est auto-
matiquement utilisé.
Internationalisation du menu
164
Partie 3 : Fenêtres et champs d’une fenêtre
Pour accéder à cette fenêtre de traduction lors de la saisie d’un nouveau message, il suffit de :
• sélectionner le message
• choisir l’option "Traduire" du menu contextuel.
Le bouton "Traduire", présent dans le bas de la fenêtre ( ) permet de se connecter un logiciel
externe de traduction, de lui passer en paramètre le message à traduire et de récupérer la traduc-
tion automatiquement. Ce logiciel peut être paramétré dans les options de WinDev (option "Outils
... Options de WinDev ... Traduction").
Après avoir saisi toutes les traductions des différents éléments de votre application, voici comment
gérer le passage d’une langue à l’autre par programmation.
Par défaut, le projet s’exécute dans la première langue définie pour le projet.
La fonction Nation permet de changer de langue.
Dans une application, le choix de la langue peut être défini selon deux méthodes :
• mémorisation de la langue dans un fichier de paramètres propre à l’application
• sélection de la langue par une option de menu.
165
NomFic = "INTERNATIONAL.INI"
Langue = INILit("PARAMETRE", "LANGUE", "FRANCAIS", NomFic)
SELON Langue
CAS "FRANCAIS" : Nation(NationFrançais)
CAS "ANGLAIS" : Nation(NationAnglais)
FIN
166
PARTIE 4
169
• Vocabulaire utilisé.
• Les différents modes d’accès aux bases de données.
170
Présentation
Lors de la conception d’une application, vous pouvez être amené à manipuler des données. Pour
les stocker, vous devez constituer ce que l’on nomme "une base de données".
Dans WinDev, lors de la création d’un projet manipulant des données, vous devez tout d’abord
créer une "analyse".
Une "analyse" contient la description des fichiers (ou tables) contenant les données de l’applica-
tion.
C’est seulement lors de l’exécution de l’application, que ces descriptions sont utilisées pour créer
la base de données et/ou les fichiers de données. C’est dans cette base ou dans ces fichiers que
seront stockées les données.
Notes
Plusieurs outils de maintenance des fichiers de données (Hyper File) sont livrés en
standard avec WinDev. Ils sont accessibles depuis le centre de contrôle Hyper File.
WinDev sait gérer différents formats de base de données (pour ne pas dire tous). Les plus couran-
tes sont :
Partie 4 : Base de données et analyses
• Hyper File, système de base de données intégrée à WinDev et livrée en standard. La base de
données Hyper File est disponible en mode Classic ou Client/Serveur.
• AS/400, Access, Sybase, ...
• Oracle, SQL Server, MySQL, xBase, …
• Toute base accessible en langage SQL sous Windows.
• Texte (fichiers ASCII).
Pour accéder aux données, il existe différentes techniques (appelées "modes d’accès") :
• Accès Natif
• Accès OLE DB
• Accès ODBC direct
• Accès ODBC via OLE DB
171
• Informix (optionnel)
• DB2 (optionnel)
• Progress (optionnel)
• MySQL (optionnel et gratuit)
D’autres accès natifs seront bientôt disponibles, contactez notre service commercial !
Les fonctions W-Langage SQL* et HLit* sont utilisables avec ce type d’accès. Le code est ainsi por-
table et indépendant de la base de données.
Attention : toutes les bases de données ne sont pas obligatoirement accessibles via cette méthode.
Si vous souhaitez utiliser ce type d’accès, vérifiez qu’il existe un pilote ODBC.
Seules les fonctions W-Langage SQL* sont utilisables avec ce type d’accès.
Accès OLE DB
Si vous utilisez un accès OLE DB, vous devez obligatoirement installer le MDAC sur
les postes utilisateurs (version 2.6 minimum).
Toutes les bases de données ne sont pas obligatoirement accessibles via cette méthode. Si vous
souhaitez utiliser ce type d’accès, vérifiez qu’il existe un pilote OLE DB.
Les fonctions W-Langage SQL* et HLit* sont utilisables avec ce type d’accès.
Les fonctions W-Langage SQL* et HLit* sont utilisables avec ce type d’accès.
172
• Projet lié à une analyse déjà existante : l’analyse a déjà été créée (par exemple lors de la
création d’un précédent projet). Le nouveau projet va simplement être relié à cette analyse.
L’analyse n’est pas dupliquée. Il n’y a qu’une seule analyse commune pour plusieurs projets.
• Projet sans analyse.
Hyper File
Le format Hyper File (Classic ou Client/Serveur) est le format de base de données fourni avec Win-
Dev. Ce format de base de données est commun à WinDev, WebDev, et WinDev Mobile.
Sous WinDev Mobile, vous utilisez une base de données Hyper File Mobile.
Ce format est identique au format Hyper File Classic de WinDev standard (fichier
".WDD", fichiers de données, ...).
Cependant, la taille disponible sur un Pocket PC étant restreinte et le système
d’exploitation du Pocket PC étant limité, les fonctionnalités suivantes ne sont pas
gérées par Hyper File Mobile :
Notes
• les transactions.
• la journalisation.
• la réplication Hyper File.
• la gestion des blocages des fichiers et des enregistrements.
• la gestion des fichiers au format Hyper File 5.5.
Sous WinDev Mobile, vous pouvez également utiliser Hyper File Client / Serveur.
Vous pouvez donc partager une analyse pour une application développée en WinDev (Back Office),
en WinDev Mobile (application des commerciaux), et en WebDev (Front Office).
173
Hyper File a déjà été déployé sur plusieurs millions de sites dans le monde !
Certains de ces types de rubriques sont classiques (texte, numérique, date, heure). D’autres types
Les clés permettent d’accélérer les accès aux données ou de faciliter les parcours de fichiers.
Une clé unique est une rubrique clé dont la valeur est unique dans l’ensemble du fichier (c’est-à-
dire tous les enregistrements du fichier).
Une clé avec doublons est une rubrique clé dont la valeur peut être retrouvée plusieurs fois dans le
fichier.
Il existe un autre type de clé : la clé composée. Une clé composée est une clé qui est composée de
plusieurs rubriques du même fichier.
Ce type de clé permet de parcourir le fichier sur des critères plus complexes ou de faire des recher-
ches plus précises.
174
La clé de liaison entre les deux fichiers est "CLCLEUNIK". C’est elle qui
permet d’établir une relation entre un "CLIENT" et une "COMMANDE".
175
176
Présentation
Dans cette leçon, afin de faire simple, nous travaillerons avec une analyse contenant deux fichiers
de données. L’application que vous allez utiliser permet de gérer un catalogue de produits.
Vous allez découvrir et maîtriser les concepts fondamentaux pour gérer des fichiers de données.
Ces concepts seront alors acquis pour la suite de ce cours.
Description du projet
Comme vous l’avez appris au tout début de ce guide, pour créer un programme, il faut décrire un
projet.
Ce projet va regrouper tous les objets constituant le programme : fenêtres, états, requêtes, ... Ce
projet va nous permettre de créer un exécutable.
4 Sélectionnez l'option "Fichier .. Nouveau", puis survolez "Projet" et cliquez sur "Exe". L’assistant
de création de projet se lance.
4 Cliquez sur "Suivant".
4 Saisissez le nom du projet "Catalogue Produit". Le répertoire du projet est initialisé par défaut
"Mes Projets\Catalogue Produit" puis validez en cliquant sur "Suivant" :
Partie 4 : Base de données et analyses
4 Cliquez sur "Suivant" jusqu’à atteindre l’écran "Analyse utilisée par le projet".
4 Choisissez l'option "Créer une Analyse" : cette option signifie que l'analyse associée au projet
n'a pas encore été décrite. Nous allons le faire immédiatement après la création du projet.
177
Décrire un fichier
L’assistant pour créer une description de fichier démarre.
L’assistant vous propose :
• soit de créer un nouveau fichier
• soit d’ajouter un fichier prédéfini (à partir d’une sélection de fichiers disponible dans WinDev)
• soit d’importer des fichiers (provenant d’une autre base de données par exemple)
178
"Produit" est le nom que vous utiliserez pour manipuler le fichier en W-Langage.
"Un enregistrement représente" indique l’information qui sera utilisée pour décrire les liaisons
entre fichiers. Il est important de renseigner avec soin cette information !
"Le fichier possède un identifiant automatique" indique si le fichier doit posséder une clé unique,
gérée automatiquement par WinDev.
179
Pour créer l'identifiant du produit (un identifiant est une clé unique), vous pouvez
créer une rubrique numérique de type "Identifiant automatique".
Cet identifiant est automatiquement géré par WinDev. Chaque fois qu’un enregis-
trement est ajouté dans le fichier, WinDev affecte automatiquement une valeur à
Notes
Vous pouvez décocher ce choix si vous n'avez pas besoin d'identifiant automati-
que (si aucune clé unique n'est nécessaire, ou si une clé unique existe déjà dans
le fichier).
Dans la fenêtre qui s'ouvre vous allez décrire la structure du fichier, c’est-à-dire que vous allez défi-
nir toutes les rubriques qui constituent le fichier :
Remarquez qu'une rubrique existe déjà en première ligne de la structure du fichier : c’est l'identi-
fiant du fichier que nous avons demandé précédemment. Cette rubrique est de type "Identifiant
automatique" et est positionnée par défaut comme clé unique. Son nom est : "IDProduit". Le nom
est constitué d’une racine "ID" suivie du nom du fichier.
180
Notes
Le tableau permet de saisir les principales caractéristiques des rubriques du fichier : le nom, le
libellé, le type de la rubrique et sa taille.
La partie droite et la partie inférieure de la fenêtre permettent de saisir les informations concernant
la rubrique sélectionnée dans la liste.
Dans la partie droite, vous saisissez les caractéristiques spécifiques de la rubrique : les caractéris-
tiques de la clé (si la rubrique est une clé), ainsi que les informations, qui seront utilisées par les
autres modules de WinDev : RAD, dossiers, fenêtres, états ... C’est un des avantages de l’environ-
nement intégré de WinDev.
Dans la partie basse (qui apparaît en cliquant sur la double flèche), vous saisissez les informations
concernant le champ relié à la rubrique. Ces informations seront automatiquement utilisées lors de
Partie 4 : Base de données et analyses
181
Notez que WinDev propose différents types de rubriques. Pour plus de détails sur la description de
chaque type de rubrique, consultez l’aide en ligne (mot-clé : "Rubrique, Types disponibles").
Méta-type
Un méta-type est une combinaison de caractéristiques d’une rubrique et de son
champ relié. Par exemple, un méta-type "Fax" contiendra le type et la longueur de
la rubrique, le masque de saisie, le cadrage, ...
Notes
Vous pouvez utiliser les rubriques méta-types fournies avec WinDev, ou créer vos
propres méta-types.
Pour utiliser une rubrique méta-type, il suffit de cliquer sur le bouton "Méta-types"
dans la description des rubriques de l’analyse.
La génération de l'analyse consiste à rendre disponible aux autres modules du projet, les informa-
tions sur les fichiers. Ces fichiers pourront être manipulés dans les programmes.
Sans la génération, bien que la description du fichier existe, vous ne pourrez pas utiliser le fichier
La génération doit être effectuée à chaque fois que vous voulez que les modifica-
tions effectuées dans l’analyse soient prises en compte dans les programmes uti-
Attention!
182
Dans l’éditeur, l’analyse est affichée avec la représentation graphique du fichier "Produit" (ici l’ana-
lyse est très simple !).
Partie 4 : Base de données et analyses
4 1.
Pour créer le fichier Fournisseur :
Dans l’éditeur d’analyse, sélectionnez l’option "Nouveau fichier" du menu contextuel (clic
droit sur le graphe de l’analyse).
2. Dans l’assistant de création d’un nouveau fichier, sélectionnez l’option "Sélectionner une
description parmi des fichiers prédéfinis". Cliquez sur "Suivant".
3. Sélectionnez le fichier "Fournisseur". Cliquez sur "Suivant".
4. Cliquez sur "Terminer". Le fichier "Fournisseur" est automatiquement créé dans l’analyse.
4 1.
Pour créer une liaison entre le fichier Produit et le fichier Fournisseur :
Dans l’éditeur d’analyse, sélectionnez l’option "Nouvelle liaison" du menu contextuel (clic
droit sur le graphe de l’analyse). Le curseur de la souris se transforme en crayon.
2. Cliquez sur le fichier "Fournisseur" puis sur le fichier "Produit". L’assistant de création d’une
liaison se lance.
183
184
Durée estimée : 1h
185
Présentation
Dans la leçon précédente, nous avons décrit le fichier "Produit" et le fichier "Fournisseur".
Nous allons maintenant voir comment :
• créer physiquement le fichier de données "Produit".
• ajouter des données dans le fichier "Produit".
La gestion des données se fait simplement par l’intermédiaire des fenêtres de l’application. Win-
Dev propose plusieurs possibilités pour créer automatiquement les fenêtres associées au fichier.
Dans un but pédagogique, nous allons créer la fenêtre associée au fichier "Produit" de toute pièce.
Nous verrons dans la leçon sur le module RAD, page 230, que ce genre de fenêtres peut être auto-
matiquement créé par WinDev.
4 1.
Créez la fenêtre associée au fichier "Produit".
Créez une nouvelle fenêtre vierge (option "Fichier .. Nouveau .. Fenêtre").
2. Sélectionnez "Vierge"
3. Sélectionnez le gabarit "ActivOSX".
4. Cliquez sur "OK".
Vous allez créer les champs associés aux rubriques à l'aide du volet "Analyse".
La liste des fichiers et des rubriques présents dans l’analyse associée au projet apparaît.
4 Sélectionnez la rubrique "Libellé" du fichier Produit dans la liste. Maintenez le bouton gauche
de la souris enfoncé et déplacez la souris vers la fenêtre vierge (cette opération est appelée un
"drag and drop"). Le champ correspondant à la rubrique est créé.
4 Répétez cette opération pour la rubrique "PrixUnitaireHT".
4 Donnez un nom et un titre à la fenêtre (par exemple "FicheProduit" et "Fiche d'un produit").
4 1.
Vérifions que chaque champ est rattaché à une rubrique du fichier.
Double-cliquez sur le champ "SAI_Libellé".
2. Cliquez sur l’onglet "Liaison". Le fichier de base est "Produit", la rubrique est bien "Libellé".
186
Vous pouvez également spécifier un mot de passe à la création si votre fichier a été protégé lors de
sa description dans l’analyse (voir “Cryptage de données”, page 197).
4 Dans le menu, sélectionnez l’option "Projet .. Code du projet". Tous les traitements du projet
s'affichent.
Dans le traitement d'initialisation du projet, saisissez la ligne suivante.
HCréationSiInexistant(Produit, hOuvertureDifférée)
187
Notes
4 Créez un bouton texte qui a par exemple le nom "BTN_AJOUTER" et le libellé "Ajouter".
Détaillons ce code :
• La fonction EcranVersFichier permet d’initialiser les rubriques avec les valeurs des champs liés.
Cette fonction est donc équivalente aux lignes suivantes :
Produit.Libellé=SAI_Libellé
Produit.PrixUnitaireHT=SAI_PrixUnitaireHT
Pour 2 champs reliés, l’intérêt est certes limité; pensez simplement aux fenêtres qui contiennent
plusieurs dizaines de champs : 1 seule ligne de code effectue toutes les affectations !
• La fonction HAjoute ajoute l’enregistrement dans le fichier. Cette fonction prend les valeurs en
mémoire et écrit le contenu des rubriques du fichier dans le fichier lui-même. Les index sont
immédiatement et automatiquement mis à jour.
188
La fonction Raz remet à blanc tous les champs pour la prochaine saisie. Cela permet ainsi de signa-
ler à l’utilisateur que l'enregistrement a été ajouté.
La fonction HRaz remet à blanc toutes les variables de fichier (évite de conserver le buffer précé-
dent en cas d’ajout partiel de rubriques dans un enregistrement).
4 Ajoutez un bouton pour sortir de la fenêtre (bouton "BTN_Fermer", avec pour libellé "Fermer").
Partie 4 : Base de données et analyses
4 Saisissez
vant :
des valeurs et cliquez sur le bouton "Ajouter". Saisissez par exemple le jeu d’essai sui-
189
Détaillons ce code :
• La fonction HLitPremier va lire le premier enregistrement du fichier selon la clé "IDProduit" et le
charge en mémoire.
• La fonction HEnDehors retourne "Vrai" si le fichier est vide.
• La fonction FichierVersEcran fonctionne selon le même principe que EcranVersFichier mais
effectue l'opération inverse. Cette fonction transfère le contenu des rubriques du fichier dans les
champs liés à ces rubriques.
La fonction FichierVersEcran est donc équivalente aux lignes suivantes :
Parcourir un fichier
Lorsque vous avez saisi plusieurs enregistrements (ou si plusieurs millions d’enregistrements sont
présents dans le fichier !), il faut pouvoir parcourir le fichier.
Le parcours de fichier s'effectue selon une clé, dans notre exemple selon le numéro de produit
("IDProduit").
Nous allons ajouter quatre boutons dans notre fenêtre pour :
1. Passer à l'enregistrement suivant.
L'enregistrement suivant est celui dont la valeur de la clé suit immédiatement la valeur de la clé
de l'enregistrement en cours.
2. Passer à l'enregistrement précédent.
L'enregistrement précédent est celui dont la valeur de la clé précède immédiatement la valeur
en cours.
3. Passer au premier enregistrement.
Le premier enregistrement est celui qui a la plus petite valeur de clé.
4. Passer au dernier enregistrement.
Le dernier enregistrement est celui qui a la plus grande valeur de clé.
190
Notes
4 Créez quatre boutons qui ont pour nom par exemple "BTN_PREMIER", "BTN_PRECEDENT",
"BTN_SUIVANT", et "BTN_DERNIER".
Le code de ces boutons sera :
//Bouton btn_premier : appeler le premier
HLitPremier(Produit, IDProduit)
SI HEnDehors(Produit)=Vrai ALORS
Info("Aucune fiche à visualiser")
SINON
FichierVersEcran()
FIN
SINON
FichierVersEcran()
FIN
191
Rechercher un enregistrement
Il faut également pouvoir accéder à un enregistrement donné sans avoir à parcourir tout le fichier.
La fonction HLitRecherche permet de rechercher un enregistrement selon sa valeur de clé. La
recherche est "générique" par défaut sur une rubrique de type texte (et bien évidemment à l’identi-
que pour une rubrique de type numérique).
4 Dans la fenêtre, créez un champ de saisie. Le nom de ce champ de saisie est par exemple
"SAI_Produit_recherché".
Ce champ de saisie est de type numérique et utilisera le masque de saisie "999 999".
Ce champ de saisie va permettre de saisir la valeur à rechercher.
4 Créez ensuite un bouton "Recherche" nommé par exemple "BTN_Recherche".
Ce bouton va permettre de lancer la recherche et d'afficher l'enregistrement trouvé. Le code de
ce bouton est le suivant :
HLitRecherchePremier(Produit, IDProduit, SAI_Produit_recherché)
SI HTrouve()=Vrai ALORS
FichierVersEcran()
SINON
Info("Aucun produit n’existe avec ce numéro")
FIN
Après une recherche, la fonction HTrouve retourne "Vrai" si un enregistrement correspond à la
Il existe également une autre fonction W-Langage permettant d’effectuer une recherche dans un
fichier de données. Cette fonction se nomme HLitRecherche.
Veillez à bien identifier le type de votre recherche avant d’utiliser les fonctions HLi-
tRecherche ou HLitRecherchePremier. En effet la différence entre ces deux fonc-
tions réside dans le fait que :
Attention!
Pour plus de détails sur ces fonctions, consultez l’aide en ligne (mot-clé : "Parcourir, Un fichier
Hyper File").
4 Enregistrez la fenêtre et testez-la. Saisissez une valeur de recherche (par exemple la valeur "3",
si vous avez au moins saisi trois enregistrements), puis cliquez sur le bouton "Recherche".
192
Pour supprimer ou modifier un enregistrement, celui-ci doit être chargé en mémoire, c'est-à-dire
qu'il doit avoir été lu avec une fonction HLitRecherche, HLitSuivant, ...
193
La fonction HModifie modifie l'enregistrement en cours dans le fichier avec le nouveau contenu des
variables de fichier (qui ont été affectées par la fonction EcranVersFichier).
La variable ErreurDétectée permet de savoir si il n’y a eu aucun problème lors de la modification.
Dans ce cas, cette erreur peut être une erreur d’intégrité ou de doublons. Il est nécessaire de trai-
ter cette erreur, sinon une erreur W-Langage est affichée et l’application s’arrête.
saire d’effectuer tous les tests d’erreur. En effet, le moteur Hyper File affichera
alors des fenêtres spécifiques à l’utilisateur pour lui permettre de corriger la
valeur saisie.
194
4 Créez une nouvelle fenêtre vierge avec le gabarit "ActivOSX", par exemple. Donnez-lui un nom et
un titre (par exemple respectivement "VisualisationProduit" et "Visualisation des produits").
4 Ajoutez un bouton pour fermer la fenêtre.
4 Cliquez sur l'icone pour créer une table. Positionnez le curseur de la souris dans la fenêtre
et cliquez à nouveau dans la fenêtre. L'assistant de création du champ Table se lance.
Notez que pour chaque icone de la barre d’outils, il existe un choix de menu cor-
Astuce
respondant.
Ici par exemple, l’option "Insertion .. Champ .. Table".
Partie 4 : Base de données et analyses
4 Nous allons remplir la table à l’aide de données provenant d’un fichier. Sélectionnez la pre-
mière option et cliquez sur "Suivant".
4 Le fichier est "Produit". Cliquez sur "Suivant".
4 On ne veut pas visualiser la clé du fichier, décochez la colonne "IDProduit" et la colonne "Num-
Fournisseur".
195
Ce mécanisme se nomme le "Live data". Il vous permet dans l’éditeur, durant le développement et
la mise au point des fenêtres de visualiser en "temps réel" le contenu des fichiers de données.
Evite de nombreux tests pour visualiser les données !
4 Enregistrez et testez la fenêtre.
4 Ajoutez un bouton pour supprimer un enregistrement dans la table et dans le fichier (par exem-
ple ce bouton a pour nom "BTN_Supprimer" et pour libellé "Supprimer").
Le traitement de ce bouton contient la ligne suivante :
TableSupprime(TABLE_Produit)
"TABLE_Produit" est le nom donné au champ Table contenant la liste des produits.
196
Notre table étant un élément directement relié à un fichier, la fonction TableSupprime supprime
d’une part la ligne dans la table, et d’autre part supprime l’enregistrement correspondant dans le
fichier. Dans les tables mémoires, la fonction TableSupprime supprime uniquement la ligne dans la
table.
Attention !
Pour supprimer un enregistrement dans une table, il ne faut pas utiliser la fonc-
tion HSupprime. Vous risquerez alors d’observer des dysfonctionnements dans la
table.
Pour saisir un nouvel enregistrement ou pour modifier un produit, il suffit de faire un double-clic
dans une des cellules de la table.
Si vous faites un double-clic sur une ligne existante, vous serez en modification sur l’enregistre-
ment.
Si vous faites un double-clic sur une ligne vide (la dernière), vous serez en création d’un enregistre-
ment.
La touche "Entrée" ou le déplacement du curseur sur une autre ligne valide la saisie. La touche
"Echap" annule la saisie.
Vous savez maintenant comment gérer un fichier dans une fenêtre ou dans une table.
197
198
C’est lors de la description du fichier sous l’éditeur d’analyses que vous avez la possibilité de défi-
nir si un cryptage doit être réalisé :
• sur le fichier lui-même
• sur l’index
• sur les fichiers mémos dépendants du fichier
La clé (ou "mot de passe") que vous allez définir sera valable uniquement sur le fichier lui-même, et
non pas pour l’analyse en totalité. Vous avez alors la liberté de définir un cryptage sur tout ou partie
des fichiers de votre analyse.
Les données contenues dans le fichier (et/ou dans l’index et/ou dans les fichiers mémos) seront
"codées" en fonction de la clé (ou "mot de passe") que vous aurez définie lors de la génération des
fichiers.
La gestion de ce mot de passe incombe totalement au développeur, c’est-à-dire ... vous ! WinDev se
charge de coder ou décoder en fonction du mot de passe que vous indiquez.
199
Lors de la génération de votre analyse, l’assistant vous propose de saisir ou de modifier (si vous
aviez déjà crypté votre fichier) le mot de passe de cryptage.
200
Vous obtiendrez alors la liste des fichiers pour lesquels vous avez demandé un cryptage. Vous avez
Partie 4 : Base de données et analyses
la possibilité de sélectionner les fichiers à crypter, et de saisir les mots de passe pour chacun des
fichiers.
201
• soit utiliser la fonction HPasse avant la première opération de lecture ou d’écriture dans le fichier
crypté.
Exemple d’utilisation de la fonction HPasse :
// Ouverture d’un fichier avec mot de passe et contrôle d'erreur
HPasse(CLIENT, "MotDePasse")
HCréationSiInexistant(CLIENT)
SI ErreurDétectée ALORS
Erreur("Erreur Hyper File : " + HErreurInfo())
RETOUR
FIN
Pour plus de détails sur le cryptage des données, consultez l’aide en ligne (mots-clés : "HPasse",
"CryptageFIC", "CryptageMMO", "CryptageNDX").
202
203
La gestion des transactions est le meilleur moyen d'assurer la cohérence d'un ensemble d'écritures
indissociables sur des fichiers Hyper File.
Les transactions sont également un moyen sûr et fiable de sécuriser vos traitements sur des
fichiers Hyper File.
204
Lorsque l’application sera relancée, la cohérence de la base de données pourra être rétablie
grâce :
• à l’outil WinDev "WDTRANS".
• au premier appel de la fonction HTransactionDébut.
• au premier appel de la fonction HTransactionAnnule.
Lorsque les opérations d'écriture incluses dans la transaction sont terminées, le programme peut
valider les opérations de la transaction.
Partie 4 : Base de données et analyses
Pour plus de détails sur les fonctions de gestion des transactions, consultez l’aide en ligne (mot-
clé : "Transactions Hyper File").
205
La gestion des transactions n'exclut pas la gestion des blocages des enregistrements en transac-
tion.
En effet, les enregistrements manipulés pendant la transaction sont automatiquement bloqués en
écriture.
Dans une application en réseau, si l'utilisateur tente de modifier un enregistrement en transaction,
un message apparaîtra lui demandant de retenter l'opération.
Il est donc nécessaire que la transaction soit la plus courte possible, pour éviter tout blocage des
utilisateurs. Pensez donc à limiter le nombre d’instructions de parcours, modification ... sur le
fichier entre les appels aux fonctions HTransactionDébut et HTransactionFin.
Pour plus de détails, consultez l’aide en ligne (mot-clé : "Transactions Hyper File").
Les transactions sont disponibles en Hyper File Client / Serveur. Pour plus de
détails sur les spécificités des transactions en mode Client / Serveur, consultez
l’aide en ligne.
206
207
Le journal est une sécurité pour votre base de données. Il vous permettra de remettre rapidement
votre base de données dans le dernier état connu avant le problème rencontré, depuis la dernière
sauvegarde, sans avoir à tout ressaisir.
208
• Si vous souhaitez combiner les deux options, choisissez "Journal des écritures + Historique
des accès au fichier".
Toutes les modifications sur un fichier de données sont stockées dans le fichier de journal corres-
pondant (1 par fichier journalé). Par exemple pour un fichier de données "PRODUIT", le fichier jour-
nal sera "PRODUITJNL".
Ces fichiers "journaux" sont situés par défaut dans le répertoire défini lors de la description des
fichiers de l’analyse :
• Si vous n’avez rien spécifié, ils se trouveront dans le sous-répertoire "JNL" du répertoire des
fichiers de données.
• Si vous avez spécifié un dossier, ils se trouveront dans le répertoire que vous aurez indiqué.
Le nom des répertoires est stocké dans le fichier lui-même.
Il est possible de modifier les répertoires des journaux après la mise en place de la journalisation :
• avec WDJournal, livré avec WinDev (option "Information sur un fichier")
• par programmation. Vous pouvez modifier cet emplacement en utilisant les fonctions hChan-
geRep* (consultez l’aide en ligne pour plus de détails, mot-clé : "Journalisation").
2. Déplacer les fichiers journaux et/ou tables des opérations dans les nou-
veaux répertoires.
3. Modifier le nom des répertoires dans TOUS les fichiers de données concer-
nés (option "Divers", dans l’écran de description des fichiers).
4. Ré-autoriser les accès à la base de données.
209
En effet, un journal ne peut être "joué" que sur un état donné de la base. L’état qui correspond à la
création ou re-création du journal.
Vous pouvez réaliser ces différentes opérations sans programmation en utilisant WDJournal, livré
avec WinDev.
Notes
4 1.
Mise en place de la journalisation :
Sauvegarde des fichiers de données initiaux (s’ils existent).
2. Mise en place de la journalisation.
4 1.
Restauration suite à un problème :
Restaurer la dernière sauvegarde.
2. Rejouer le journal en cours jusqu’à l’opération souhaitée.
3. Refaire une sauvegarde et ré initialiser les journaux.
Pour plus de détails sur la journalisation, consultez l’aide en ligne (mot-clé : "Journalisation").
La journalisation est disponible en Hyper File Client / Serveur. Pour plus de détails
sur les spécificités de la journalisation en mode Client / Serveur, consultez l’aide
en ligne.
210
211
Grâce à la réplication, les opérations effectuées sur chacune des bases de données sont reportées
sur toutes les autres bases de données.
WinDev permet de réaliser ces opérations très simplement.
212
Mise en place
1. Activation
Pour activer la réplication universelle, il suffit d'utiliser la fonction HGèreRéplication avec le para-
mètre rplRéplicationUniverselle.
Cette fonction permet de désactiver le mode de réplication standard (s'il était actif) et d'activer la
réplication universelle.
2. Déclaration de la base maître
Cette opération n'est à faire qu'une seule fois sur la base maître.
Pour déclarer la base maître, il suffit d'utiliser la fonction HCréeRéplicaMaître.
Remarque : Si le répertoire courant permet de stocker des données, la ligne de code suivante peut
être utilisée :
HCréeRéplicaMaître("")
Cette ligne de code crée le fichier RéplicaMaître.RPM sur le disque. Il ne reste plus qu'à inscrire les
abonnés dans ce fichier.
3. Déclaration des bases abonnées
Cette opération n'est à faire qu'une seule fois pour chaque base abonnée. Cette opération doit être
effectuée sur la base maître.
Partie 4 : Base de données et analyses
Pour déclarer un nouvel abonné, utilisez la fonction HCréeRéplicaAbonné. Cette fonction crée un
abonné (fichier RPL) avec le nom fourni. Cette fonction renvoie également un numéro d'abonné.
Remarque : la fonction HCréeRéplicaAbonné utilise des paramètres spécifiques pour la réplication
universelle. Pour plus de détails, consultez l'aide de la fonction.
4. Réplication
La fonction HCréeRéplicaTransportable crée un fichier journal (fichier .RPA).
Ce fichier journal est transmis et exécuté grâce à la fonction HSynchroniseRéplica.
Attention : Par défaut lors de la synchronisation (HSynchroniseRéplica), le maître est prioritaire :
dans le cas d'une réplication abonné vers maître, les données du maître ne seront pas mises à
jour. Pensez à utiliser une autre constante (rplPlusRécentPrioritaire par exemple).
Deux fonctions spécifiques peuvent également être utilisées :
HRplDéclareLiaison Permet de signaler au moteur de réplication une liaison entre deux
fichiers. Le moteur suivra alors la liaison pour obtenir la liste des
enregistrements à répliquer dans le second fichier.
213
214
Présentation
WinDev permet de créer des applications accédant à des bases de données Hyper File Client / Ser-
veur.
Une application Hyper File Client / Serveur consiste à exécuter l'application sur différents postes
utilisateur (appelés machines clientes) et à déporter la ou les bases de données et les traitements
sur un poste serveur. Ce mode de fonctionnement permet des temps de réponses plus rapides et
plus fiables, ainsi qu'une maintenance de la base de données facilité.
Partie 4 : Base de données et analyses
WinDev permet de :
• créer entièrement une application Hyper File Client / Serveur.
• modifier une application WinDev existante en une application Hyper File Client / Serveur.
215
216
217
218
219
La gestion de données Hyper File par accès distant permet l'utilisation du réseau Internet/Intranet
sans développement spécifique. Cette opération est complètement transparente pour les applica-
tions WinDev, il suffit d'ouvrir l'analyse sur le poste distant par la fonction HOuvreAnalyse.
De plus, la gestion de l’accès distant sur Hyper File est automatiquement réalisée par WinDev !
Dans ce dernier cas, il est véritablement pratique d’utiliser les fonctionnalités d’accès à distance.
Dès l'ouverture d'une analyse distante avec la fonction HOuvreAnalyse ou la fonction HConnec-
teAccèsDistant, tous les ordres Hyper File sont transmis à la bibliothèque Hyper File (fichier
WD100HF.DLL) du poste serveur (où se trouvent les données).
Pour réduire le nombre d'échanges via le réseau, les ordres qui n'impliquent pas directement la
base de données sont exécutés localement. La présence de la bibliothèque Hyper File et de la des-
cription de l'analyse (fichier ".WDD") sont donc nécessaires sur chaque poste client.
Les échanges de données se font en utilisant les fonctions de la bibliothèque de communication
(fichier WD100COM.DLL, présent sur le poste serveur et sur le poste client).
220
Les particularités d’utilisation de l’accès distant par rapport à un accès réseau classi-
que
Permet d'accéder à des données :
• depuis une simple adresse IP (et un n° de port) : Internet, Intranet ...
• présentes sur un disque sur lequel l’utilisateur standard n’a pas les droits d’accès (sécurité
pour l’administrateur de base de données).
Pour optimiser les performances de l’accès distant sur Hyper File, nous con-
Notes
seillons de réaliser des filtres, des vues et des requêtes. Celles-ci seront exécu-
tées par le serveur d’accès distant qui vous renverra par bloc toutes les données
que vous aurez demandées.
Un exemple simple
Un programme effectue une recherche sur 50 000 enregistrements.
Si le programme effectue une boucle de 50 000 HLitSuivant, il y aura 50 000 allers-retours de don-
nées, coûteux en temps sur une ligne téléphonique par exemple !
Par contre, si le programme effectue une vue, il n’y aura qu’un seul et unique aller-retour (si le nom-
bre d’enregistrements par bloc est fixé à 50 000 lors de l’exécution de la vue) !
Partie 4 : Base de données et analyses
Un serveur d’accès distant Hyper File est fourni en standard avec WinDev 10 :
"WDServeurAccèsDistant".
221
• Description d’une analyse d’une base externe (Oracle, SQL Server, ...).
222
Présentation
On nommera "Base de données externe" tout système de gestion de base de données autre que
Hyper File. Tout programme réalisé avec WinDev peut accéder très facilement à une base de don-
nées autre que Hyper File.
Il faut pour cela décrire la base de données dans une analyse (comme pour Hyper File).
La programmation sera effectuée avec les fonctions du W-Langage (HLit*) et/ou avec SQL. Consul-
tez la tableau comparatif en sélectionnant l’option "? .. Aide à l’utilisation des bases de données"
dans le menu de WinDev.
Description de l’analyse
Partie 4 : Base de données et analyses
Lors de la création d’un nouveau fichier (option "Insertion .. Fichier" de l’éditeur d’analyses), choisis-
sez l’option "Utiliser des fichiers d’une base existante" :
223
Puis, définissez si les données seront converties en Hyper File Classic ou bien si elles restent dans
Les paramètres de connexion à cette base de données externe doivent être décrits (nom du ser-
veur ou service, base de données, login et mot de passe et le type d’accès (Natif, OLE DB, ODBC)).
224
En fonction du type de la base de données, la technique de programmation pour accéder aux don-
Partie 4 : Base de données et analyses
Pour plus de détails, consultez l’aide en ligne (mot-clé : "Base de données externe").
225
226
Modes de gestion
La grande majorité des applications développées est conçue pour fonctionner en réseau, c’est-à-
dire pour être utilisée par plusieurs utilisateurs (jusqu’à plusieurs centaines ou milliers) en simul-
tané sur les mêmes fichiers de données.
Ces accès simultanés peuvent provoquer des conflits d’accès, par exemple si deux utilisateurs ten-
tent de modifier simultanément le même enregistrement.
Avec WinDev, la gestion des blocages est facile, très puissante et le plus souvent automatique.
En mode multi-utilisateurs, la gestion des conflits est automatiquement gérée par le moteur
Hyper File. En cas d’erreur de blocage, la gestion des blocages (vérification si le fichier ou l’enregis-
trement est bloqué, traitement du blocage) est automatiquement réalisée par le moteur Hyper File.
Dans une application réseau, il est aussi possible de bloquer un enregistrement ou un fichier, pour
effectuer des opérations spécifiques par exemple.
Lorsqu'un poste client tente d'accéder à un enregistrement bloqué, une erreur de blocage apparaît
: une fenêtre apparaît indiquant à l’utilisateur que l’enregistrement ou le fichier est bloqué et lui
Partie 4 : Base de données et analyses
227
228
Lors d’une opération (ajout, modification ou suppression) sur un fichier Hyper File, il est possible
d’exécuter une action avant ou après l’exécution de cette opération. Par exemple, lors d’une sup-
pression dans un fichier, il est possible de demander la confirmation de suppression de l’enregis-
trement.
Mise en place
Les triggers sont définis par programmation. Les fonctions du W-Langage utilisables sont :
• HDécritTrigger : Décrit le trigger. Cette fonction est généralement utilisée dans le code d’ini-
tialisation du projet. Le trigger déclenche l’appel d’une procédure. Cette procédure est asso-
ciée au trigger lors de l’utilisation de la fonction HDécritTrigger.
• HActiveTrigger : Active un trigger décrit par la fonction HDécritTrigger. Dès sa création, le trig-
ger est automatiquement activé.
• HDésactiveTrigger : Désactive un trigger décrit par la fonction HDécritTrigger.
Partie 4 : Base de données et analyses
Attention !
229
Exemple :
PROCEDURE PROCCONFIRMESUPPRESSION ()
// Demande la confirmation à l’utilisateur
SI OuiNon("Confirmez-vous la suppression ? ") = Non ALORS
// Initialisation de H.Afaire pour annuler l’opération
H.Afaire = "A"
FIN
Exemple
Pour plus de détails sur l’utilisation des triggers, consultez l’exemple "WD Trigger",
livré en standard avec WinDev.
Nous avons abordé simplement le fonctionnement d’un trigger. Pour obtenir plus de détails, consul-
tez l’aide en ligne (mot-clé : "HDécritTrigger")
230
Vous trouverez :
• dans le répertoire "\Autoformation\Corriges\WD RAD" le projet "WD RAD.WDP" con-
Partie 4 : Base de données et analyses
tenant les illustrations de cette leçon. Vous pouvez lancer l’exécutable correspon-
dant directement depuis WinDev grâce à l’option "? .. Guide d’auto-formation .. Le
RAD Projet".
• dans le répertoire "\Autoformation\Corriges\WD RADSQL" le projet "WD
RADSQL.WDP" contenant les illustrations de cette leçon. Vous pouvez lancer l’exé-
cutable correspondant directement depuis WinDev grâce à l’option "? .. Guide
d’auto-formation .. Le RAD Projet SQL".
231
Présentation
R.A.D. sont les initiales de "Rapid Application Developpement".
Le RAD permet de construire automatiquement une application, c’est-à-dire construire toutes les
fenêtres, les états et les requêtes nécessaires.
Comme nous l’avons vu précédemment, pour développer une application en WinDev, il faut com-
mencer par créer un projet et éventuellement une analyse. L’analyse contient la définition des
structures des fichiers manipulés dans les traitements.
Le module RAD de WinDev s’appuie sur cette analyse. Le module RAD est constitué d’un assistant
dans lequel vous pouvez détailler les différents paramètres nécessaires au développement du
projet :
• La présentation (modale ou MDI).
• Le code généré (procédural ou objet).
• Le type de programmation utilisé (Hyper File ou SQL).
Toutes les fenêtres, les états, les requêtes et le code générés sont entièrement personnalisables.
Vous avez également la possibilité de modifier les types de champs, les valeurs par défaut, ...
Le RAD permet également de générer des fenêtres de plusieurs types, c’est le RAD fenêtre.
Nous allons ici découvrir comment utiliser le module RAD Projet. Pour cela, nous allons ouvrir un
projet associé à une analyse.
232
Options de l’interface
L’interface permet de définir la présentation générale de votre application. WinDev propose de
gérer automatiquement un des deux types d’interface suivant :
• Interface classique : les fenêtres seront ouvertes en mode modal. Toutes les fenêtres de
l’application se superposeront.
• Interface MDI : les fenêtres seront ouvertes en mode non modal (gestion du multi-fenêtrage).
4 Pour notre exemple, conservez les paramètres par défaut : Interface Classique et cliquez sur
"Suivant".
233
Lorsque le code est généré en "Simplifié", tous les ordres de programmations sont visibles. Le
code est généré de manière séquentielle. Le code est dit "simplifié" car ces fenêtres ne gèrent pas
de procédures locales. Le code généré est du code W-Langage.
Ce type de code est conseillé pour des applications basées sur des fichiers Hyper File Classic, par
exemple pour réaliser rapidement des maquettes d’applications complètes.
Lorsque le code est généré en "procédural", tous les ordres de programmation sont visibles. Le
code est généré de manière séquentielle. Les différents traitements sont réalisés dans les fenêtres
à l’aide de procédures locales.
Dans ce cas, le type de code généré peut être :
• Fonctions Hyper File du W-Langage : Les ordres W-Langage permettent d’accéder aux fichiers
en utilisant les fonctions HLitPremier, HLitSuivant, HAjoute, HModifie, …
• Ordre SQL : Les ordres SQL permettent d’accéder aux fichiers en utilisant les requêtes SQL
générées par l’éditeur de requêtes de WinDev.
• Ordre ODBC : Les ordres ODBC permettent d’accéder aux fichiers en utilisant les fonctions
SQLConnecte, SQLExec, SQLTable … du W-Langage.
L’option "avec code de création des fichiers" (fonction HCréationSiInexistant) permet de créer auto-
matiquement tous les fichiers de données inexistants, et d’effectuer la connexion à la base de don-
nées (si le projet utilise une base externe) au moment de l’ouverture du projet.
234
tenu des fenêtres quand le contenu des fichiers de données a changé (utile lors d’une utilisation en
réseau, mais induit une perte de performance).
4 Pour notre exemple, sélectionnez l’option "Programmation simplifiée".
4 Cliquez sur "Suivant".
4 L’assistant propose alors de choisir le thème (le "gabarit") du projet
Gabarit utilisé pour les fenêtres
Vous allez sélectionner le "gabarit" pour la génération des fenêtres et des états. Le "gabarit" permet
de définir le "look" graphique de l’application. Ce choix pourra être modifié par la suite.
Partie 4 : Base de données et analyses
235
Les tables permettent d’afficher le contenu des fichiers en tableau (mode "browse").
Le bouton "Conseil" ( ) indique la meilleure méthode pour gérer l’ascenseur dans une
236
Dans cet écran, vous pouvez sélectionner le ou les fichiers pour lesquels vous désirez générer des
fenêtres et des états.
Nous conserverons bien évidemment le fichier "PRODUIT".
Test du projet
4 Pour tester le projet, sélectionnez l’option "Projet .. Mode Test .. Tester le projet". A partir du
menu, l’option "Produit .. Table produit" permet de visualiser les produits et de saisir de nou-
veaux produits.
237
Fenêtre Menu
La fenêtre de menu est la fenêtre principale du projet. Lors du lancement de l’application, cette
fenêtre est affichée en premier (dans le graphe cette fenêtre apparaît sur un fond orange).
4 Pour ouvrir la fenêtre "Menu" dans l’éditeur, double-cliquez sur la fenêtre "Menu" dans le gra-
phe du projet.
4 Dans la fenêtre qui apparaît, cliquez sur les différentes options du menu. Le menu se déroule,
et vous pouvez sélectionner les différentes options.
Pour chacune de ces options, un code (écrit en W-Langage) permet de préciser les actions à
réaliser lorsque l’utilisateur sélectionne l’option.
4 1.
Pour consulter le code W-Langage associé à une option de menu :
Sélectionnez l’option "Produit .. Table Produit" dans le menu de la fenêtre.
2. Faites un clic droit sur cette option : un menu contextuel apparaît.
238
3. Sélectionnez l’option "Code" du menu contextuel. L’éditeur de code s’ouvre et affiche le code
source. Ce code permet d’ouvrir la fenêtre "TableProduit". La fonction W-Langage utilisée est la
fonction Ouvre.
Partie 4 : Base de données et analyses
Le code visualisé permet de lancer l’exécution d’un état. La fonction iAperçu permettra de visuali-
ser l’édition à l’écran. La valeur "100" indique ici que le niveau de zoom de l’aperçu sera de 100%.
Pour plus de détails sur cette fonction, consultez l’aide en ligne (mot-clé : "iAperçu").
Dans le menu de la fenêtre "Menu", l’option "Fichier .. Configurer l’impression" permet de lancer la
configuration de l’impression. L’utilisateur pourra ainsi modifier l’imprimante par défaut ainsi que
divers paramètres comme l’orientation, le format et le bac de papier, le nombre de copies et
d’autres paramètres liés aux imprimantes installées sur le poste en cours.
4 Fermez la fenêtre de code ([CTRL]+[F4]).
4 Sélectionnez
cette option.
dans le menu de la fenêtre l’option "Fichier .. Quitter" et affichez le code source de
Dans le code affiché, la fonction Ferme ferme la fenêtre en cours. Si cette fenêtre est la première
fenêtre de l’application, l’application se termine. Pour plus de détails sur cette fonction, consultez
239
4 Pour ouvrir la fenêtre correspondant à la saisie des produits dans l’éditeur, effectuez les mani-
pulations suivantes :
1. Affichez si nécessaire le volet "Projet" en mode "TreeView".
2. Sélectionnez la fenêtre "Fiche_Simple_PRODUIT" et double-cliquez sur cette fenêtre.
Etudions en détail le code généré par le RAD pour ces différents éléments.
Remarque : WinDev permet de saisir le code des différents éléments dans le traitement (l’événe-
ment) souhaité. Cet aspect a déjà été évoqué dans l’encadré “Notes”, page 109.
240
La fenêtre en "Fiche" peut fonctionner selon 2 modes (gérés dans le code de déclarations des glo-
bales de la fenêtre) :
• Mode "Modif"
• Mode "Création"
Ces modes sont initialisés au lancement de la fenêtre en passant un paramètre à la fenêtre. La
variable "sModeOuverture" contient le mode utilisé.
• Le mode "Modif" permet de se positionner directement en mode modification sur un enregistre-
ment. L’enregistrement qui est en modification a été sélectionné dans la fenêtre appelante
(généralement cette fenêtre est en mode "table").
• Le mode "Création" permet d'ouvrir la fenêtre en mode "création d’un enregistrement". Les
champs dans la fenêtre apparaissent vides.
Partie 4 : Base de données et analyses
Le mode d’ouverture par défaut d’une fenêtre en mode fiche est le mode "Création".
Code du bouton OK
Le code de clic du bouton OK permet de valider les opérations effectuées par l’utilisateur dans la
fenêtre fiche.
Dans tous les cas, les données affichées à l’écran sont mémorisées grâce à la fonction EcranVers-
Fichier.
Deux cas sont pris alors en compte :
• la création d’un nouvel enregistrement :
// Ajout de l'enregistrement
HAjoute(PRODUIT)
SI ErreurDétectée ALORS
Info("Impossible d'ajouter un enregistrement"+RC+...
HErreurInfo())
RETOUR
FIN
L’ajout de l’enregistrement dans le fichier de données est réalisé grâce à la fonction HAjoute.
La variable ErreurDétectée permet de vérifier que l’ajout a bien été effectué. Si ErreurDétec-
tée = Vrai, il y a eu un problème, et le message d’erreur correspondant est affiché.
• la modification d’un enregistrement :
// Modification de l'enregistrement
HModifie(PRODUIT)
SI ErreurDétectée ALORS
Info("Impossible de modifier l’enregistrement"+RC+...
HErreurInfo())
241
RETOUR
FIN
Le code de modification de l’enregistrement reprend le même principe. La modification de
l’enregistrement dans le fichier de données est réalisé grâce à la fonction HModifie.
4 Pour ouvrir la fenêtre correspondant à la visualisation en table des produits dans l’éditeur,
effectuez les manipulations suivantes :
1. Affichez si nécessaire le volet WinDev en mode "TreeView".
2. Sélectionnez la fenêtre "Table_produit" et double-cliquez sur cette fenêtre.
242
Code de la table
4 1.
Pour afficher les différents traitements associés à la table :
Affichez le menu contextuel du champ Table (clic droit sur la table).
2. Sélectionnez l’option "Code".
La table ne contient aucun code. En effet, la gestion de cet élément est entièrement automati-
que. Le champ Table est relié directement au fichier. Le fichier est lu automatiquement et le
remplissage est pris en charge par WinDev.
Le fichier parcouru est le fichier PRODUIT. Le parcours est "AUTOMATIQUE" sur la rubrique "IDPRO-
DUIT".
Bouton "Nouveau"
Le bouton "Nouveau" permet d’ouvrir une fenêtre de type "Fiche" en mode "Création" pour saisir le
nouvel enregistrement. Le mode d’ouverture de la fiche est passé en paramètre à la fenêtre grâce
à la fonction Ouvre.
243
Lorsque la saisie du nouvel enregistrement a été validée (la fonction Ouvre a été exécutée, et la
fenêtre de création de l’enregistrement est refermée), la table est ré-affichée (fonction TableAffi-
che).
// Ouverture en mode création "classique"
Ouvre(Fiche_PRODUIT,"Création")
// rafraichissement de la table
TableAffiche(Table,taCourantPremier)
Bouton "Modifier"
Le bouton "Modifier" permet d’ouvrir une fenêtre de type "Fiche" en mode "Modification" pour modi-
fier l’enregistrement sélectionné dans la table. Le mode d’ouverture de la fiche est passé en para-
mètre à la fenêtre grâce à la fonction Ouvre.
Lorsque le nouvel enregistrement est saisi (la fonction Ouvre a été exécutée, et la fenêtre de modi-
fication de l’enregistrement est refermée), la table est ré-affichée (fonction TableAffiche).
Toutes les autres fenêtres générées par le module RAD sont basées sur les mêmes modèles quel
que soit le nombre de fichiers.
244
Partie 4 : Base de données et analyses
4 1.
Pour visualiser la description de l’état :
Faites un clic droit sur l'état (dans la partie marron) puis sélectionnez l’option "Description de
l'état".
2. Cliquez sur l’onglet "Données". Dans cet onglet, nous visualisons la source de données asso-
ciée à l’état. Dans le cas d’un état généré par le R.A.D., la source de données est une requête.
Cette requête existe uniquement pour cet état, et ne peut pas être manipulée par un autre élé-
ment du projet : c’est une requête intégrée.
4 Pour visualiser la description de la requête associée à l’état, cliquez sur le bouton "Editer la
requête".
245
exemple). Ces requêtes ne peuvent pas être ré-utilisées dans un autre élément
du projet.
• les requêtes externes, créées directement avec l’éditeur de requêtes, et enregis-
trées dans un fichier au format WDR.
Pour plus de détails sur les requêtes, consultez la leçon “Créez votre 1ère Requête”, page 251.
246
RAD SQL
Nous allons analyser le RAD en mode SQL.
Pour cela, nous n’allons pas refaire un RAD complet, mais utiliser un projet déjà créé en RAD SQL.
4 Ouvrez le projet "WD RADSQL.WDP" (option "Fichier ... Ouvrir un projet"). Ce projet est présent
dans le sous-répertoire "Autoformation\Corriges\WD RADSQL\" du répertoire d’installation de
WinDev 10. Le projet ressemble au projet précédent. Il utilise la même analyse avec le même
fichier "Produit".
Fenêtres générées
4 Pour ouvrir la fenêtre correspondant à la saisie des produits dans l’éditeur, effectuez les mani-
pulations suivantes :
Partie 4 : Base de données et analyses
Code d’initialisation
Ci-dessous, un extrait du code d’initialisation généré par le RAD WinDev :
SI ModeOuverture~="Modif" ALORS
// Execution de la requête pour la modification
HExécuteRequête(REQ_SELECT_PRODUIT,hRequêteDéfaut+...
hModifieFichier,PRODUIT.IDPRODUIT)
SI ErreurDétectée ALORS
// affiche un message d'erreur
Erreur("Erreur initialisation de la requête",HErreurInfo())
// fermeture de la fenêtre
Ferme("",gbFenetreModifiee)
SINON
// Lecture de l'enregistrement en cours de modification
HLitPremier(REQ_SELECT_PRODUIT)
FIN
SINON
// Execution de la requête pour le parcours
HExécuteRequête(REQ_SELECT_PRODUIT,...
hRequêteDéfaut+hModifieFichier)
SI ErreurDétectée ALORS
// affiche un message d'erreur
Erreur("Erreur lors de l'initialisation de la requête")
// fermeture de la fenêtre
Ferme("",gbFenetreModifiee)
247
FIN
FIN
La différence principale avec le code généré dans le chapitre précédent est l’utilisation de requêtes
SQL, exécutées par la fonction HExécuteRequête.
Conclusion
Nous n’avons étudié ici qu’une partie des possibilités du RAD de WinDev.
Pour une utilisation avancée, sachez que vous avez la possibilité de modifier le code, les fenêtres,
les requêtes et les états générés par le RAD.
248
Partie 4 : Base de données et analyses
PARTIE 5
Les requêtes
GAF WinDev.BOOK Page 250 Mardi, 11. juillet 2006 5:42 17
GAF WinDev.BOOK Page 251 Mardi, 11. juillet 2006 5:42 17
251
Partie 5 : Requêtes
252
Introduction
Une requête permet de définir une interrogation sur des fichiers de données. L’éditeur de requêtes
vous permettra par exemple de décrire sans aucune programmation des interrogations du type :
• la liste des fournisseurs appartenant au département 75.
• la liste des 10 clients qui ont le plus commandé.
• la liste des produits dont le stock est à zéro.
Et ce, sur tous les types de bases (Hyper File, Oracle, ...) !
Nous allons voir avec un exemple simple comment manipuler l’éditeur de requêtes. Plus loin dans
ce cours, nous verrons une utilisation avancée de l’éditeur de requêtes.
4 Dans
tes".
le menu de WinDev, sélectionnez l’option "? .. Guide d’Auto formation .. Faire des requê-
Vous pouvez parcourir les différentes options du menu et choisir des exemples de requêtes.
Exemple
L’exemple "WD Requêtes" livré avec WinDev 10 illustre l’utilisation des requêtes
avec WinDev.
253
4 1.
Créez une nouvelle requête :
Dans le menu, sélectionnez "Fichier" puis "Nouveau".
2. Sélectionnez "Requête".
La saisie directe de code SQL est destinée aux utilisateurs maîtrisant le langage
SQL ! Consultez l’aide en ligne pour obtenir la liste des fonctions SQL reconnues
par WinDev (mot-clé : "SQL, Langage SQL").
Vous allez apprendre à utiliser l’éditeur de requêtes en effectuant des requêtes simples : sélections
de clients, comptages ... vous pourrez ensuite approfondir vos connaissances en manipulant et en
testant tous les types de requêtes.
254
4 Pour lister les fournisseurs du département 75, nous allons réaliser une requête de sélection.
Cliquez sur "Suivant".
4 Sélectionnez les rubriques qui constitueront le résultat de la requête.
Sur la gauche, dans les "Eléments disponibles",
1. Sélectionnez le fichier "Fournisseur".
2. Double-cliquez sur les rubriques "SOCIETE", "NOMFOURNISSEUR", "CODEPOSTAL" et "VILLE".
Ces rubriques apparaissent au milieu de la fenêtre.
Partie 5 : Requêtes
4 Pour obtenir les fournisseurs du département 75, nous allons appliquer une condition de sélec-
tion sur le code postal.
La condition de sélection est la suivante : "Nous désirons les fournisseurs du département 75".
C’est-à-dire les fournisseurs dont le code postal commence par 75. En effet, la rubrique
"Département" n’existe pas dans notre fichier.
4 Sélectionnez la rubrique "CODEPOSTAL" au centre. Dans les "Actions" sur la droite, cliquez sur
le bouton "Condition de sélection" puis sur "Nouvelle condition".
La rubrique est donc : "FOURNISSEUR.CODEPOSTAL"
La condition est : "COMMENCE PAR"
La valeur est : "75"
255
4 Sélectionnez la rubrique "NOMFOURNISSEUR" au centre puis cliquez dans les "Actions" sur le
bouton "Trier" et sélectionnez l’option "Tri sur la rubrique sélectionnée".
Le tri sera croissant :
Partie 5 : Requêtes
256
4 1.
La requête est créée. Nous allons lui donner un nom et la sauvegarder.
En haut de l’écran, saisissez le nom "Fournisseur75".
2. Saisissez le libellé "Fournisseurs du département 75".
3. Cliquez sur "OK".
257
Si vous faites un clic droit sur la table affichant le résultat de la requête, un menu contextuel appa-
raît. Vous avez alors la possibilité d’exporter le résultat vers :
• Microsoft Excel.
• un fichier XML (eXtensible Markup Language)
• Microsoft Word. Partie 5 : Requêtes
258
259
4 1.
Créez une nouvelle requête :
Dans le menu, sélectionnez "Fichier" puis "Nouveau".
2. Sélectionnez "Requête".
3. Nous allons réaliser une requête de "sélection" (Option "Sélectionner (SELECT)"). Cliquez sur
"Suivant".
Partie 5 : Requêtes
4 Nous devons afficher la ville. Sur la gauche, dans les "Eléments disponibles", sélectionnez la
rubrique "VILLE" du fichier "CLIENT" (par un double-clic).
4 1.
Pour créer une rubrique de comptage :
Sélectionnez au centre la rubrique "VILLE"
2. Cliquez dans les "Actions" sur le bouton "Compter".
3. Sélectionnez dans le menu : "Sur la rubrique sélectionnée".
4. Validez en cliquant sur le bouton "OK".
260
4 1.
La requête est créée. Nous allons lui donner un nom et la sauvegarder.
En haut de l’écran, saisissez le nom "NombreClientparVille.
2. Saisissez le libellé "Nombre de clients par ville".
3. Cliquez sur "OK".
La représentation graphique de la requête est la suivante :
Partie 5 : Requêtes
4 Cliquez sur pour sauvegarder la requête. Il ne reste plus qu’à tester la requête.
4 Cliquez sur le bouton .
(c) PC SOFT - Version Express - Diffusion interdite
GAF WinDev.BOOK Page 261 Mardi, 11. juillet 2006 5:42 17
261
Partie 5 : Requêtes
262
Nous allons calculer le total de toutes les commandes par client (le Chiffre d’Affaires par client).
4 1.
Créez une nouvelle requête :
Dans le menu, sélectionnez "Fichier .. Nouveau".
2. Sélectionnez "Requête".
3. Nous allons réaliser une requête de sélection. Sélectionnez l’option "Sélectionner (SELECT)".
Cliquez sur "Suivant".
4 1.
Pour effectuer la somme des valeurs de "MONTANTTOTAL" :
Sélectionnez la rubrique "MONTANTTOTAL" au centre.
2. Dans les "Actions", sur la droite, sélectionnez "Somme".
3. Validez en cliquant sur le bouton "OK" :
Partie 5 : Requêtes
263
Vous pouvez ainsi vérifier que vous ne vous êtes pas trompé par rapport à l’objectif de votre
requête.
4 1.
La requête est créée. Nous allons lui donner un nom et la sauvegarder.
En haut de l’écran, saisissez le nom "CAParClient".
2. Saisissez le libellé "CA par client".
3. Cliquez sur "OK".
264
La représentation graphique correspond à une "jointure". La requête utilise deux sources de don-
nées (les fichiers "CLIENT" et "COMMANDE").
4 Cliquez sur pour sauvegarder la requête. Il ne reste plus qu’à tester la requête.
4 Cliquez sur le bouton .
Partie 5 : Requêtes
265
Partie 5 : Requêtes
266
• la clause GROUP BY
Attention !
Veillez à bien respecter l’enchaînement de ces ordres. Vous ne pouvez pas inver-
ser cet enchaînement.
WinDev permet de passer très simplement de la description graphique d’une requête au code SQL
de cette requête et inversement.
Pour afficher le code SQL d’une requête créée sous l’éditeur de requêtes, sélectionnez l’option
"Requête .. Code SQL".
Pour afficher la représentation graphique d’une requête créée en code SQL, sélectionnez "Requête
.. Rétro-analyse de la requête".
267
Chaque rubrique peut être renommée (on parle d’alias) en utilisant le mot-clé AS. Par exemple :
CLIENT.NOMCLIENT AS NOM
Dans cet exemple, la rubrique NomClient du fichier CLIENT est renommée en Nom.
NomRubriqueXX peut être soit une rubrique associée à un fichier, soit une formule de calcul.
L’instruction FROM
L’instruction FROM permet de définir la liste des fichiers à partir desquels seront extraites les rubri-
ques et les calculs. La syntaxe est la suivante :
FROM FICHIER1, FICHIER2 ...
La clause WHERE
La clause WHERE contient les conditions de sélection ainsi que les conditions de jointure. Ces con-
ditions permettent de filtrer les enregistrements issus des fichiers de la base de données. Seuls les
enregistrements vérifiant la ou les conditions seront récupérés dans le résultat.
Une jointure permet de faire correspondre à un enregistrement d’un fichier l’enregistrement d’un
fichier relié. Par exemple, une jointure entre les fichiers CLIENT et COMMANDE permettra de con-
naître toutes les commandes de chaque client.
Partie 5 : Requêtes
Les opérateurs ET et OU permettent de réaliser une opération logique entre deux conditions.
• L’opérateur ET indique que les deux conditions doivent être vérifiées en même temps.
• L’opérateur OU indique qu’une des deux conditions ou les deux conditions doivent être véri-
fiées.
La clause WHERE n’est pas obligatoire. Si ce mot-clé n’est pas indiqué, tous les enregistrements de
tous les fichiers seront sélectionnés.
268
La clause GROUP BY
La clause GROUP BY permet d’indiquer les rubriques ou formules de regroupement lorsqu’il y a un
calcul. Par exemple, dans la requête que nous avons réalisée précédemment, le calcul portait sur
la somme des commandes par client; c’est-à-dire que les commandes étaient cumulées pour cha-
que client. Le regroupement des commandes était donc réalisé par client.
La clause ORDER BY
La clause ORDER BY permet d’indiquer les critères de tri de la requête. Les critères de tri permet-
tront de classer le résultat de la requête.
269
Partie 5 : Requêtes
270
disposition) !
Il suffit de livrer le logiciel "Etats et requêtes" avec votre application. Pour plus de
détails, consultez le chapitre "Les états", page 273.
PARTIE 6
Les états
GAF WinDev.BOOK Page 272 Mardi, 11. juillet 2006 5:42 17
GAF WinDev.BOOK Page 273 Mardi, 11. juillet 2006 5:42 17
273
• Vocabulaire de base.
• Etape par étape, la construction d’un état.
274
Vocabulaire de base
Avant d'aborder les méthodes d'impression, il est important de rappeler le vocabulaire de base
pour ... faire bonne impression !
• Style : Le style peut être italique, gras, souligné, ... Il ne modifie pas la hauteur des caractères.
• Hauteur du caractère : La hauteur du caractère s'exprime en "point Didot". Un point vaut 0,3759
mm. C'est une unité utilisée en imprimerie. La hauteur des caractères de ce manuel est par
exemple de 10 points. Les hauteurs de 10 et 12 points sont des hauteurs courantes pour des
documents habituels. La hauteur des caractères est indépendante de la définition de l'impri-
mante.
Une hauteur de 16 ou 24 points permet de mettre en valeur un titre.
Une hauteur de 6 points sera difficilement lisible, surtout si la définition de l'imprimante est mau-
vaise
• Police : La police est la forme avec laquelle le texte sera imprimé. Elle correspond à la combinai-
son de la fonte, du style, de la hauteur et de la couleur du caractère.
• Définition de l'imprimante : Chaque imprimante a une définition propre. Plus la définition est
importante, plus convenable sera l'impression. Par exemple, une imprimante à 600 DPI (dots per
inch) fournira des impressions plus nettes qu'une imprimante à 300 DPI. Le type d'impression
(laser, jet d'encre, matricielle 8 ou 24 aiguilles,...) influe également sur la qualité d'impression. La
qualité du papier également, il ne faut pas l'oublier !
• Proportionnelle / Fixe : Une police "fixe" présentera toujours la même largeur de caractère, quel
que soit le caractère. Un "i" aura la même taille qu'un "m". Une police fixe bien connue est "Cou-
Partie 6 : Les états
rier".
Une police "proportionnelle" utilisera une taille différente en fonction des lettres. Cette documen-
tation est écrite dans une police proportionnelle.
Un Etat est le nom donné à la représentation d’une édition. WinDev vous permet de construire des
états. Lors de l’exécution (ou de l’édition) de l’état, un document est créé.
275
Un Bloc est le nom donné à une partie de l’état. Un état est constitué d’un ensemble de blocs. Les
différents blocs d’un état sont les suivants :
• début de document
• haut de page
• haut de rupture
• corps
• bas de rupture
• bas de page
• fin de document
Ces différents blocs ne sont pas tous obligatoires. Ils peuvent être supprimés lors de la conception
de l’état. Seul le bloc "Corps" est obligatoire.
Vous avez également la possibilité d’imprimer des états avec code-barres (automatiquement géné-
rés par WinDev), des états avec étiquettes, ...
276
Présentation
Imprimer avec l'éditeur d'états ou imprimer en W-Langage
WinDev propose deux méthodes d’impression :
• l'éditeur d'états qui permet de créer des états imprimés d'une façon "conviviale".
• par programmation en W-Langage.
Par exemple, il est courant d'imprimer une liste dont les données proviennent d'un fichier.
Pour imprimer le contenu d'un fichier de données, l'utilisation de l'éditeur d'états est conseillée.
Vous découvrirez plus loin dans ce guide comment effectuer une impression par programmation.
Nous allons tout d’abord étudier quelques exemples d’états réalisés avec l’éditeur d’états, ensuite
nous verrons en détail comment les réaliser.
4 Sélectionnez l’option "? .. Guide d’Auto formation .. Faire des éditions". Le programme se lance.
La fenêtre ci dessous apparaît.
4 Pour apprendre à utiliser l’éditeur d’états, nous allons créer quelques éditions dans un projet
exemple préparé à cet effet.
1. Sélectionnez l’option "Fichier .. Ouvrir un projet".
2. Sélectionnez le sous-répertoire "AutoFormation\Exercices\Faire des éditions\" du répertoire
d’installation de WinDev 10.
3. Sélectionnez le fichier "Faire des éditions.WDP".
Le projet se charge.
Ce projet utilise des fichiers de données. Afin de vous familiariser rapidement avec les données,
nous avons pris pour exemple des fichiers simples :
• un fichier CLIENT
• un fichier COMMANDE
• un fichier LIGNECDE
• un fichier PRODUIT
• un fichier FOURNISSEUR
277
4 Pour créer un état, sélectionnez l’option "Fichier .. Nouveau". Dans la fenêtre qui apparaît, choi-
sissez "Etat".
278
279
4 Sélectionnez "Une requête que je veux définir maintenant" et cliquez sur suivant.
4 L’assistant de description d’une requête s’affiche. Cet écran permet de sélectionner les fichiers
contenant les données à imprimer.Nous allons imprimer des données provenant du fichier
CLIENT.
4 Cliquez sur le signe "+" à gauche du fichier CLIENT. Sélectionnez les rubriques à imprimer (par
un double clic) :
• NomClient
• CodePostal
• Ville
• idClient
Partie 6 : Les états
280
4 1.
Pour trier par code postal, il faut choisir un critère de tri :
Sélectionnez la rubrique à trier : cliquez sur le "CodePostal" au milieu de l’écran.
2. Cliquez en haut à droite sur le bouton "Trier". Choisissez l’option "Trier sur la rubrique sélec-
tionnée".
Partie 6 : Les états
3. Choisissez "Ordre croissant" et validez. Une flèche rouge apparaît à droite de la rubrique
"CodePostal" ainsi que le numéro "01". Cette flèche indique qu’un tri croissant est fait sur cette
rubrique. Le numéro "01" indique que ce tri sera le premier tri effectué.
281
Les informations communes aux différentes lignes sont présentes dans l’en-tête
de rupture.
Les totaux, compteurs, ... sont présents dans la fin de rupture.
282
Les flèches bleues à droite permettent de modifier l’ordre des rubriques. Vous pouvez par exemple
afficher la ville avant le nom.
283
284
4 1.
Il ne nous reste plus qu’à donner un nom et un libellé à l’état et à le sauvegarder.
Saisissez le nom "ClientParCodePostal".
2. Saisissez le titre "Liste des clients par code postal".
3. Cliquez sur "Terminer".
4. Enregistrez l’état. L’état est terminé. Nous allons immédiatement le tester pour voir le résul-
tat.
285
Vous pouvez :
• Directement imprimer la page en cours ou la totalité du document en cliquant sur les impriman-
tes
Partie 6 : Les états
286
287
Présentation
Nous allons maintenant éditer la liste des commandes par client. Cette liste sera triée sur le nom
du client. Pour chaque client, nous imprimons la commande et le détail de la commande (lignes)
avec un sous-total pour chaque commande. Nous cherchons à obtenir un résultat semblable à la
représentation ci-dessous :
L’état que nous allons réaliser utilise plusieurs fichiers de données comme source.
4 Ouvrez le projet "Faire des éditions.WDP". Ce projet est présent dans le répertoire "AutoForma-
tion\Exercices\Faire des éditions\" du répertoire d’installation de WinDev 10.
Partie 6 : Les états
288
289
4 Sélectionnez "Une requête que je veux définir maintenant" et cliquez sur "Suivant".
Nous allons imprimer des données provenant des fichiers CLIENT, COMMANDE, PRODUIT et
LIGNECDE.
• Le fichier COMMANDE :
• IdCommande
Partie 6 : Les états
• DateCommande
• Le fichier PRODUIT :
• Descriptif
• Le fichier LIGNECDE :
• Reference
• Qtecommandee
• Montant
290
Nous allons trier les résultats par nom de client et par numéro de commande.
4 Dans
tri :
la liste au centre, sélectionnez la première rubrique sur laquelle vous désirez effectuer un
1. Cliquez sur la rubrique "NomClient". Dans le menu contextuel (clic droit de la souris), sélec-
tionnez "Trier la rubrique ... Trier par ordre croissant".
2. Cliquez ensuite sur la rubrique "IdCommande". Dans le menu contextuel (clic droit de la sou-
ris), sélectionnez "Trier la rubrique ... Trier par ordre croissant".
Partie 6 : Les états
3. Validez.
Une flèche rouge apparaît à droite des rubriques "NomClient" et "IdCommande". Le chiffre situé à
coté de chaque flèche indique l’ordre de tri réalisé.
291
4 Nous allons maintenant indiquer les ruptures. Choisissez "Oui" puis sur le bouton "Suivant".
Par défaut, une rupture est proposée sur les rubriques "NomClient" et "IdCommande", car ce sont
les critères de tri déjà définis.
4 Déselectionnez la rubrique NomClient (cliquez sur la coche). Cliquez sur le bouton "Suivant".
Les informations concernant le client et la commande seront dans le haut de rupture 1. Le corps
de l’édition concerne le détail de chaque commande.
292
293
4 Validez en cliquant sur le bouton "Terminer". L’état étant trop grand, l’éditeur d’états propose
de changer le format de l’état ou de le réduire.
294
295
4 Ajoutez un libellé que vous positionnerez à côté de l’interrupteur, et saisissez le texte "Client
Enregistré".
4 Voici l’état, tel qu’il apparaît sous l’éditeur :
296
Partie 6 : Les états
297
298
Présentation
L'éditeur d'états offre également la possibilité de créer des états de type "Tableau Croisé". L'état
est alors constitué uniquement d'un tableau à deux entrées.
Exemple :
Contrairement aux autres types d'états, l'état "Tableau croisé" est toujours basé sur une requête
intégrée. Cette requête est créée grâce à l'assistant de création de l'état "Tableau croisé". Vous
pourrez par ailleurs modifier cette requête une fois votre état créé.
4 Ouvrez le projet "Faire des éditions.WDP". Ce projet est présent dans le répertoire "AutoForma-
tion\Exercices\Faire des éditions\" du répertoire d’installation de WinDev 10.
4 Sélectionnez dans le menu "Fichier .. Nouveau .. Etat".
4 Sélectionnez "Tableau Croisé" et cliquez sur "Suivant".
L’assistant vous propose alors de choisir la rubrique qui servira de source de données pour les en-
têtes de colonnes. Vous pouvez ainsi définir la première entrée (ligne) de votre tableau croisé.
299
4 L’assistant vous demande si vous souhaitez "borner" les dates. Ne cochez rien, nous allons
prendre toutes les commandes. Cliquez sur "Suivant".
4 L’assistant vous demande maintenant de choisir la rubrique qui servira de source de données
pour les lignes. En fait, vous allez choisir la seconde entrée (colonne) de votre tableau croisé.
Sélectionnez la rubrique "NOMCLIENT" dans le fichier "CLIENT".
300
que année.
4 Sélectionnez "La somme de la rubrique :". Dans la liste qui apparaît sur le côté, choisissez la
rubrique "MONTANTTOTAL" du fichier "COMMANDE" :
4 Cliquez sur "Suivant". Ne changez rien à la mise en page. Validez par "Suivant".
4 Sélectionnez un gabarit (par exemple "ActivXP". Cliquez sur "Suivant".
4 1.
Vous allez donner un nom à cet état :
Saisissez le nom : "EtatTabCroisé".
2. Saisissez la description : "Synthèse des commandes par client et par date".
301
4 Modifiez si nécessaire la taille des colonnes pour obtenir la même mise en page que ci-dessus.
Enregistrez l’état. Il ne reste plus qu’à tester en cliquant sur l'icone .
Vous venez de réaliser facilement un état tableau croisé. Ce type d’état peut bien entendu être uti-
lisé pour d’autres applications, notamment pour effectuer des comparatifs, des statistiques, ...
302
303
Présentation
L’éditeur d’états de WinDev propose deux fonctionnalités originales au niveau des champs :
• Les champs Lien, utilisables aussi bien dans les états générés en HTML que dans les états
affichés dans l’aperçu avant impression.
Les champs lien permettent d’ouvrir directement un site à partir d’un état. Il est ainsi possi-
ble d’imaginer un récapitulatif de commande envoyé par e-mail. Cet état peut contenir un lien
vers le site de la société, un lien pour envoyer un e-mail à la société, ...
• Les champs clicables, utilisables uniquement dans l’aperçu avant impression.
Dans ce cas, le clic sur un des champs de l’état déclenche un traitement spécifique, par
exemple l’affichage de la fiche complète du client sélectionné.
Dans l’aperçu avant impression, ces deux types de champs sont facilement repérables grâce à des
petites étoiles.
4 Ouvrez si nécessaire le projet "Faire des éditions.WDP". Ce projet se trouve dans le sous réper-
toire "Autoformation\Exercices\Faire des éditions" de WinDev 10.)
4 Ouvrez l’état "FactureAvecLien.WDE".
4 Affichez la description du champ "Lien". Ce lien permet à l’internaute de visiter le site de la
société qui le facture.
Remarque : Un champ Lien dans un état peut afficher le contenu d’une rubrique ou une URL. Dans
ce cas, il est possible de :
• afficher une page d’un site
• se connecter à un serveur FTP
304
4 Ouvrez si nécessaire le projet "Faire des éditions.WDP". Ce projet se trouve dans le sous réper-
toire "Autoformation\Exercices\Faire des éditions" de WinDev 10.)
4 Ouvrez l’état créé précédemment "ClientParCodePostal" (ou l’état "ClientCodePostal" si vous ne
l’avez pas créé). Cet état liste les client par code postal. Nous allons permettre à l’utilisateur de
cliquer sur le nom du client pour voir le détail des informations le concernant dans une fenêtre
fiche.
Partie 6 : Les états
4 Le projet contient déjà la fenêtre à ouvrir : Fiche_Client. Ouvrez cette fenêtre sous l’éditeur de
fenêtres (option "Fichier .. Ouvrir"). Cette fenêtre a été crée par le RAD. Son code de déclaration
des globales a été modifié pour permettre d’afficher le client dont l’identifiant est passé en
305
paramètre.
4 1.
Pour ouvrir directement la fenêtre "Fiche_Client" depuis l’aperçu avant impression :
Sous l’éditeur d’états, cliquez sur le champ "NomClient".
2. Affichez le code de ce champ (option "Code" du menu contextuel).
3. Saisissez le code suivant dans le traitement "Clic sur NomClient":
Ouvre(FicheClient, "Modif", MaSource.IdClient)
Ce code permet de :
•ouvrir la fenêtre FicheClient en mode Modification
•passer en paramètre à la fenêtre l’identifiant du client cliqué (cet identifiant est présent
dans la requête intégrée à l’état).
4. Enregistrez et testez votre état.
306
307
WinDev permet d’exécuter directement les états depuis une application grâce aux
Notes
En exécutant ce code, un écran d’aperçu vous sera proposé. Pour imprimer directement l’état sans
passer par une fenêtre de prévisualisation, supprimez la ligne :
iAperçu(100)
Fonction iAperçu
La fonction iAperçu permet de sélectionner le mode d’édition. La syntaxe de la fonction iAperçu est
la suivante :
iAperçu(<format de sortie>)
Pour plus de détails sur la fonction iAperçu, consultez l’aide en ligne (mot-clé : "iAperçu").
308
Fonction iImprimeEtat
La fonction iImprimeEtat permet d’exécuter un état. La syntaxe de cette fonction est la suivante :
iImprimeEtat(<Nom de l’état>)
Remarque
D’autres syntaxes sont possibles pour ces deux fonctions, consultez l’aide en ligne pour plus de
détails (mots-clés : "Impression d'un état", "iAperçu", "iImprimeEtat").
leur disposition) !
Il suffit de diffuser avec votre application le logiciel "Etats et requêtes". Pour plus
de détails, consultez la leçon suivante.
Partie 6 : Les états
309
310
Nous allons détailler ces différentes étapes. Vous pouvez réaliser les manipulations suivantes sur
le projet "Faire des éditions.WDP" que nous avons manipulé jusqu’à présent.
311
Paramétrage du projet
Pour utiliser le logiciel "Etats et Requêtes" à partir de votre application, il est nécessaire de configu-
rer le projet associé à votre application.
4 Ouvrez si nécessaire le projet "Faire des éditions.WDP". Ce projet se trouve dans le sous réper-
toire "Autoformation\Exercices\Faire des éditions" de WinDev 10).
4 Affichez l’onglet "Charte" de la description du projet (option "Projet .. Description du projet").
4 Cochez l’option "Autoriser le lancement de "Etats et Requêtes"". Validez.
Paramétrage de l’analyse pour l’application "Etats et requêtes"
Nous allons maintenant ouvrir l’analyse pour paramétrer les fichiers et rubriques utilisables sous le
logiciel "Etats et Requêtes".
4 Ouvrez l’analyse (option "Projet .. Charger l’analyse").
Par défaut, tous les fichiers et toutes leurs rubriques sont visibles et manipulables avec le logiciel
"Etats et requêtes". Si votre application contient des informations sensibles (mots de passe, ...)
vous pouvez rendre ces fichiers ou rubriques invisibles sous le logiciel "Etats et requêtes".
4. Validez.
4 Pour prendre en compte les modifications effectuées dans l’analyse, il est nécessaire de régé-
nérer l’analyse (option "Analyse .. Génération").
312
Pour rendre un état de votre application modifiable sous le logiciel "Etats et Requêtes" :
1. Ouvrez l’état sous l’éditeur d’états.
2. Affichez la description de l’état (option "Etat .. Description").
3. Dans l’onglet "Détail", cochez "Modifiable sous Etats et Requêtes".
4. Validez et enregistrez l’état.
313
Installation de l’application
Pour tester l’installation et l’utilisation du logiciel "Etats et Requêtes", nous allons installer l’applica-
tion "Faire des éditions".
Le programme d’installation est présent dans le répertoire "\Autoformation\Corriges\Faire des édi-
tions\Install".
4 Lancez le programme "Install.exe". L’installation se lance.
4 L’écran "Etats et Requêtes" permet d’installer le logiciel "Etats et Requêtes" (uniquement si ce
programme n’est pas déjà installé sur le poste en cours)
314
315
Test de l’application
Nous allons maintenant nous placer dans la peau de l’utilisateur final de votre application (c’est
pas évident, mais pourquoi pas).
4 Lancez l’application "Faire des éditions".
4 Sélectionnez l’option "Edition .. Liste triée". L’état apparaît en mode "Aperçu avant impression".
316
4 1.
Dans cet exemple, nous allons mettre la date en rouge. Pour cela :
Partie 6 : Les états
Nous avons fini notre découverte du logiciel "Etats et Requêtes". Pour plus de détails, consultez
l’aide en ligne (mot-clé : Etats et Requêtes).
PARTIE 7
Programmation
GAF WinDev.BOOK Page 318 Mardi, 11. juillet 2006 5:42 17
GAF WinDev.BOOK Page 319 Mardi, 11. juillet 2006 5:42 17
319
Vous trouverez dans les répertoires suivants les projets contenant les illustrations de
cette leçon :
• "\Autoformation\Corriges\Faire du multifenêtrage" le projet "Multifen.WDP" : Vous
pouvez lancer l’exécutable correspondant directement depuis WinDev grâce à
l’option "? .. Guide d’auto-formation .. Faire du multifenêtrage".
• "\Autoformation\Corriges\Faire du MDI" le projet "ExMDI.WDP" : Vous pouvez lancer
l’exécutable correspondant directement depuis WinDev grâce à l’option "? .. Guide
d’auto-formation .. Faire du MDI".
Partie 7 : Programmation
320
Présentation
La gestion du multi-fenêtrage se traduit généralement par l’utilisation du mode MDI (Multi Docu-
ment Interface).
Les fenêtres libres ne possèdent aucune contrainte (c’est le type de fenêtre proposé par défaut).
Elles conviennent pour les projets ne gérant pas de fenêtres MDI ou pour les fenêtres de type boîte
à outils dans les projets gérant des fenêtres MDI.
Dans les projets gérant des fenêtres MDI, il est conseillé de d’utiliser une fenêtre Mère MDI en pre-
mière fenêtre du projet.
Dans une fenêtre mère MDI, seuls les champs situés dans la zone "barre d'icones" pourront être en
saisie. En effet dans une fenêtre mère MDI, il n'est pas possible de saisir en dehors de la zone
barre d'icones.
Le style de la zone "Barre d’icones" peut être modifié, comme pour un champ libellé.
Les fenêtres filles MDI doivent nécessairement être ouvertes depuis une fenêtre mère MDI.
Les fenêtres filles MDI seront toutes affichées dans la fenêtre mère MDI.
C’est un peu comme le principe des poupées russes, mais en beaucoup moins compliqué !
De plus, il existe une option "Contextes Hyper File indépendants" (onglet "Détail" de la fenêtre de
description de la fenêtre). Cette option est très utile lorsque plusieurs fenêtres utilisent le ou les
mêmes fichiers de données.
Partie 7 : Programmation
En effet, cette option permet de dupliquer les contextes Hyper File : chaque fenêtre ouverte avec
cette option dispose de son propre accès aux fichiers de données. Les opérations effectuées par
cette fenêtre ne perturberont pas les autres fenêtres qui effectuent des opérations sur les mêmes
fichiers de données. Pour plus de détails sur les contextes Hyper File, consultez l’aide en ligne (mot-
clé : "Contexte Hyper File").
Exemple
Pour plus d'informations sur les fenêtres MDI, reportez-vous à l’aide en ligne (mot-clé : "MDI, Fenê-
tres MDI").
321
La fenêtre ouvrant la seconde fenêtre est appelée fenêtre mère, la fenêtre ouverte est appelée
fenêtre fille.
Ouverture modale
La fenêtre fille ouverte est en saisie. La fenêtre mère ne peut pas être en saisie.
Pour pouvoir saisir dans la fenêtre mère, la fenêtre fille doit être fermée.
La fenêtre mère ne peut pas être fermée tant que la fenêtre fille est ouverte.
En résumé, avec l'ouverture modale :
• Seule la dernière fenêtre ouverte est en saisie.
• Seule la dernière fenêtre peut être fermée.
• Si la fenêtre en cours est iconisée, tout le projet est iconisé.
Pour fermer la fenêtre, il faut utiliser la fonction Ferme (sans paramètre). La fonction Ferme ferme
la fenêtre en cours qui est la seule à pouvoir être en saisie.
Partie 7 : Programmation
Une fenêtre fille ouverte peut être en saisie en même temps que la fenêtre mère. La fenêtre fille
peut être fermée, de même que la fenêtre mère (dans ce cas toutes ses filles seront fermées).
Une même fenêtre mère peut ouvrir plusieurs fenêtres filles (identiques ou différentes). Dans ce
cas les fenêtres filles sont soeurs entre elles.
Pour ouvrir une fenêtre fille, il faut utiliser la fonction MDIOuvre (la fonction OuvreFille dans le cas
de fenêtres non MDI).
La fonction MDIOuvre ouvre la fenêtre fille, la fenêtre mère reste en saisie.
322
Pour forcer la saisie sur la fenêtre fille ou soeur ouverte, il faut utiliser la fonction RepriseSai-
sie(<Fenetre>).
Pour fermer une fenêtre mère, soeur ou fille, il faut utiliser la fonction Ferme en indiquant le nom
de la fenêtre à fermer.
Si la fenêtre mère est fermée, toutes ses filles sont également fermées.
Pour plus de détails sur les différents modes d'ouverture, consultez l’aide en ligne (mot-clé : "Ouvrir,
Fenêtre").
Remarque : la fonction Iconise permet également de réduire en icone la fenêtre en cours. La fonc-
tion Restaure permet de restaurer la fenêtre iconisée.
tes en icone. L'icone de la fenêtre mère s'affiche dans la barre des tâches de Win-
dows.
Une fenêtre MDI (mère ou fille) peut être réduite en icone par programmation avec
la fonction FenTaille.
323
Exemples
Partie 7 : Programmation
Exemple de programme gérant le multi fenêtrage de fenêtres libres (non MDI)
Pour illustrer les différents modes d'ouverture, nous allons travailler avec le projet "MULTIFEN".
4 Testez cet exemple en sélectionnant l’option de menu "? .. Guide d’auto-formation .. Faire du
Multifenêtrage".
Cet exemple est volontairement simple : il ne fait qu'ouvrir et fermer des fenêtres. Il ne gère pas
de saisie ni de fenêtre MDI. Il a pour but d'illustrer les différents modes d'ouverture des fenê-
tres libres.
324
4 La première fenêtre contient un bouton "Catalogue". Ce bouton ouvre une fenêtre en ouverture
modale.
4 Cliquez sur ce bouton.
Remarquez que vous ne pouvez pas cliquer en dehors de la fenêtre fille (le catalogue) et que la
fenêtre mère d'introduction ne peut pas être en saisie tant que la fenêtre fille est ouverte.
4 Cliquez
Partie 7 : Programmation
sur une des images de fleur, la fiche de la fleur (fenêtre fille du catalogue) s'affiche.
Remarquez que la fenêtre du catalogue (fenêtre mère) reste en saisie.
325
4 SiParvous cliquez sur le bouton "Fermer" d'une fiche d'une fleur, seule la fiche se ferme.
contre si vous cliquez sur le bouton "Fermer" du catalogue, toutes les fiches se ferment en
même temps que la fenêtre du catalogue.
En effet, la fermeture de la mère ferme toutes ses fenêtres filles.
326
4 Ouvrez la fenêtre "Multi1.WDW". Les traitements associés à chaque champ image sont les
suivants :
-- Initialisation de CLICAGE1
MoiMeme = "Fleur1.PCX"
-- Clic sur CLICAGE1
NomImage est une chaîne
NomImage = MoiMeme
SI FenEtat("CLICAGE1") = Inexistant ALORS
OuvreFille("CLICAGE1" + "=MULTI2,0,0", NomImage)
FIN
La fenêtre fiche de la fleur est affichée par la fonction OuvreFille. De cette façon, plusieurs fiches
pourront être ouvertes en parallèle.
Pour que la fenêtre d'une fleur ne soit pas ouverte plusieurs fois, la fenêtre n'est ouverte que si elle
est inexistante. La fonction FenEtat permet de vérifier si une fenêtre est déjà ouverte ou non.
La fenêtre fiche de la fleur qui a pour nom "MULTI2" peut être ouverte plusieurs fois. Il faut alors
pouvoir distinguer chaque fenêtre ouverte. Pour cela il suffit d'utiliser un alias.
Dans la fenêtre fiche d'une fleur, le traitement du bouton permettant d'ouvrir une autre fiche est le
Partie 7 : Programmation
suivant :
//ouvre la fenêtre des fleurs sélectionnée dans la combo
//après avoir vérifié qu'elle n'est pas déjà ouverte
//récupère la fleur sélectionnée
Indice = ListeSelect(LISTE1)
NomImage = Majuscule(LISTE1[LISTE1]) + ".PCX"
//fleur sélectionnée
SI FenEtat(NomImage) = Inexistant ALORS
OuvreSoeur(NomImage+ ...
"=MULTI2,"+(50*Indice)+","+(50*Indice),NomImage)
FIN
La fenêtre fiche de la fleur est affichée par la fonction OuvreSoeur. De cette façon plusieurs fiches
pourront être ouvertes en parallèle.
327
La première fenêtre est une mère MDI (elle a pour nom "MDICatal").
Elle contient une zone barre d'icones.
Partie 7 : Programmation
La zone barre d'icones contient :
• 7 icones
• Un champ de saisie
• 6 zones de clicage
328
Les filles sont des filles MDI, elles s'affichent dans la mère.
329
Affichage en mosaïque :
Affichage en cascade :
Partie 7 : Programmation
330
Le champ "en cours" indique quelle est la fille active. La fille active est la fille qui se trouve en pre-
mier plan, celle dont l’altitude est la plus élevée par rapport aux autres fenêtres.
La fonction MDIActive retourne le nom de la fenêtre fille en avant plan.
Dans notre exemple, une procédure appelée par "timer" affiche le nom de la fenêtre fille active.
L'utilisation des timers est expliquée dans la leçon “Les timers”, page 346.
Par exemple :
MULTI1.MARQUER..Visible = Faux
Selon le même principe, il est possible de faire exécuter un traitement ou une procédure d'une autre
fenêtre. La fonction ExecuteTraitement permet, d'une part, d'exécuter les traitements des champs
d'une autre fenêtre ouverte (en ouverture non modale), et d'autre part, d'exécuter une procédure
décrite dans une autre fenêtre.
Par exemple, dans le projet "MULTIFENETRAGE" de ce chapitre, le code de prise de focus de la fenê-
tre "MULTI2" exécute le code de la procédure "Marque_Fleur" de la fenêtre "MULTI1" (cette procé-
dure permet de marquer la fleur du catalogue qui correspond à la fenêtre fille qui a le focus) :
Partie 7 : Programmation
331
Partie 7 : Programmation
332
Présentation
Cette leçon traite de la manipulation des fichiers "externes".
Les fichiers externes sont souvent appelés fichiers texte (ou ASCII) ou encore fichiers à accès
direct. Notons que ce type de fichier contient généralement du texte, mais peut également contenir
des informations binaires telles que des images, des sons, ...
Dans cette leçon comme dans toute la documentation de WinDev, nous parlerons de fichiers exter-
nes.
Exemples de manipulations
4 Ouvrez le projet "Programmation.WDP". Ce projet est présent dans le sous-répertoire "Autofor-
mation\Corriges\Programmation" de WinDev.
4 Ouvrez la fenêtre "FichierTexte.WDW" et testez-la. Cette fenêtre regroupe de nombreuses mani-
pulations possibles avec WinDev.
De plus, étudiez l’exemple "WD Fichiers Texte" livré en standard avec WinDev 10 : vous aurez ainsi
un aperçu des différentes manipulations possibles sur les fichiers externes :
• créer un fichier externe
• lire (par bloc, par ligne ou en une seule fois) un fichier externe
• écrire dans un fichier externe
• obtenir des informations sur un fichier
• bloquer un fichier
• tester l’existence d’un fichier
• sélectionner un fichier
333
• copier un fichier
• supprimer un fichier
• lister les fichiers d’un répertoire
Cet exemple présente également les manipulations possibles sur les disques et les répertoires :
• créer un répertoire
• connaître le répertoire en cours
• tester l’existence d’un répertoire
• lister des répertoires
• copier un répertoire
• supprimer un répertoire
Exemple
L’exemple "WD Fichiers Texte" livré en standard avec WinDev 10 (exemple didacti-
que), illustre les manipulations possibles sur les fichiers, disques et répertoires
avec le W-Langage.
Pour plus de détails sur les fonctions de gestion des fichiers externes, consultez l’aide en ligne
(mot-clé : "Fichier externe").
Partie 7 : Programmation
334
335
Présentation
Nous avons vu précédemment comment imprimer avec l'éditeur d'états : cette méthode doit être
privilégiée. Toutefois, le W-Langage permet également d'imprimer du texte et des images directe-
ment par programmation. Vous pouvez dès lors réaliser toutes les éditions que vous souhaitez, de
la plus simple à la plus complexe. Vous pourrez suivre vos impressions particulières au doigt et à
l’oeil !
Partie 7 : Programmation
• paramétrer la sortie d’une impression
• aperçu à l’écran
• impression directe
• impression dans un fichier
Exemple
L’exemple "WD Impression par programmation" livré en standard avec WinDev 10,
illustre les possibilités d’impression en W-Langage. Cet exemple est un exemple
unitaire.
Pour plus de détails sur les fonctions d’impression en W-Langage, consultez l’aide en ligne (mot-
clé : "Impression, Fonctions W-Langage").
336
337
Partie 7 : Programmation
"Y est un entier"+rc+Fonct+RC+...
"Renvoyer PartieEntiere(Y)")
SI ErrCompile= "" ALORS
Xold = -201
Yold = ExecuteTraiement("ValeurY", trtProcédure, Fonct,-201)
POUR X=-200 A 200
Y = ValeurY(Fonct,X)
dLigne((EchelleX*Xold)+X0,...
-(EchelleY*Yold)+Y0,(EchelleX*X)+X0,-(EchelleY*Y)+Y0)
Xold = X
Yold = Y
FIN
SINON
Erreur("La fonction n'a pu être compilée")
FIN
338
Exemples
339
Partie 7 : Programmation
340
Les listes graphiques peuvent également être utilisées dans les tables. Elles sont alors remplacées
par des combos (ou listes déroulantes) graphiques.
341
Partie 7 : Programmation
342
Le traitement pour initialiser la liste des couleurs est le suivant (extrait du code d’initialisation de la
liste des couleurs) :
POUR Ind=1 à 16
ListeAjoute(COULEUR,gRectangle(3,3,30,16,iNoir,iNoir)+...
gRectangle(2,2,29,15,VCoul[Ind],iNoir)+" "+TCoul[Ind])
FIN
De la même manière que pour ajouter des données "texte", on utilise la fonction ListeAjoute. Si l’on
souhaite par exemple insérer un rectangle au milieu d’un texte, il suffit d’insérer la fonction gRec-
tangle dans le texte à ajouter dans la liste :
ListeAjoute(MALISTE,gRectangle(3,3,30,16,iNoir,iNoir) + ...
" Rectangle noir.")
343
Partie 7 : Programmation
Nous vous conseillons toutefois d’utiliser la première solution indiquée. La seconde peut être utili-
sée dans le cadre de développements très spécifiques et n’a que très peu d’intérêt.
344
• Définition.
• Exemple d’utilisation.
345
Présentation
Le mécanisme "d’indirection" permet de construire le nom d’un champ, d’une rubrique de fichier ou
le nom d’une variable à partir d’une expression de type chaîne.
Ceci permet par exemple de créer des traitements génériques indépendants des noms des
champs, des variables, des rubriques de fichier ...
L’indirection est réalisée à l’aide des opérateurs { }.
Pour optimiser la vitesse de vos applications, il est conseillé de préciser lors de l’utilisation de la
syntaxe d’indirection le type de l’élément manipulé.
Ainsi, si vous manipulez un champ, le type correspondant sera IndChamp (voir exemple ci-dessous).
Exemple
Exemple d’indirections simples :
{"NOM",indChamp} = NomCli
//est équivalent à NOM=NomCli
{"NOM",indChamp} = {"CL.NOMCLI"}
//est équivalent à NOM=CL.NOMCLI
{"FENCLI.NOM",indChamp} = NomCli
//est équivalent à FENCLI.NOM=NomCli
{"FENCLI"+".NOM",indChamp} = NomCli
//est équivalent à FENCLI.NOM=NomCli
Partie 7 : Programmation
NomChamp est une chaîne
NomChamp = "SAISIE1" //SAISIE1 est le nom du champ
//appel d'une procédure rendant un champ invisible
INVISIBLE(NomChamp)
PROCEDURE INVISIBLE(NChamp)
{NChamp,indChamp}..Visible = Faux
Exemple
Pour plus de détails sur l’utilisation des indirections, consultez l’exemple "WD Indi-
rections", livré en standard avec WinDev.
346
347
Introduction
Un timer permet d’exécuter en parallèle une tâche qui doit être lancée périodiquement (acquisition
de données en tâches de fond, rafraîchissement automatique de données, déclencher un pro-
gramme à une heure donnée ...). Seules les procédures (globales ou locales à une fenêtre) et les
méthodes globales de classe peuvent être appelées par un timer.
Avec WinDev 10, les timers peuvent être gérés directement depuis l’interface de l’éditeur de code.
Partie 7 : Programmation
La flèche verte située dans l’en-tête de la procédure signale que cette procédure est une procédure
automatique. Pour définir les propriétés d’une procédure, il suffit de cliquer sur l’icone .
348
Remarque : pour compatibilité avec les versions précédentes, il est également possible de gérer les
timers grâce à plusieurs fonctions W-Langage :
• La fonction Timer permet d'utiliser un timer géré par WinDev. Ce timer pourra être arrêté grâce à
la fonction FinTimer.
• La fonction TimerSys permet d'utiliser un timer géré par Windows. Ce timer pourra être arrêté
grâce à la fonction FinTimerSys.
Un timer réalisé avec la fonction Timer sera toujours prioritaire par rapport à un timer réalisé avec
la fonction TimerSys.
349
Partie 7 : Programmation
350
Introduction
Toute action effectuée par Windows correspond à un événement Windows. Différents types d’événe-
ments peuvent être rencontrés, par exemple :
• Le survol d’une fenêtre par la souris
• L’arrêt du système
• L’affichage d’une boîte de dialogue
• Une erreur logicielle
• Etc ...
Lorsque ces événements se produisent, il est possible de les intercepter afin de préparer ou d’exé-
cuter un traitement spécifique.
WinDev propose par défaut la gestion automatique des événements les plus utilisés. Par exemple,
les événements suivants sont proposés pour un champ de saisie :
• Initialisation du champ
• Entrée dans le champ
• Modification du champ
• Sortie du champ
De nombreux autres événements peuvent être gérés facilement. Une barre d’outils est disponible
dans l’éditeur de code :
Pour connaître la liste (non exhaustive) des événements Windows, consultez l’aide en ligne de Win-
Dev (mot-clé : "Valeur des constantes de l'API Windows").
351
Exemples
Interdire la sortie de Windows
Pour illustrer l'utilisation de la fonction Evénement, nous allons par exemple intercepter l’arrêt de
Windows. Cet événement se nomme "WM_QueryEndSession".
Cet exemple peut être très utile par exemple pour rappeler à l’utilisateur qu’il doit enregistrer ces
modifications avant de quitter Windows.
Notre exemple interdit la sortie de Windows tant que le projet est en cours d’exécution.
Lorsque l'événement "WM_QueryEndSession" est intercepté, la procédure "EndSession" est exécu-
tée.
//dans le code d'initialisation du projet
Evenement("EndSession","*.",17)// 17=WM_QueryEndSession
La procédure doit renvoyer "Vrai" pour autoriser la sortie de Windows ou "Faux" pour la refuser.
Pour matérialiser le refus de sortie de Windows, il faut forcer le focus sur une fenêtre du projet.
Pour forcer le focus, il faut envoyer l'événement "WM_ACTIVATE" à la fenêtre en cours du projet. La
fonction PostMessage permet d'envoyer des messages dans la file des messages de Windows.
Partie 7 : Programmation
hWnd est un entier
hWnd = Handle(FenEnCours())
PostMessage(hWnd,6,1,hWnd)//WM_ACTIVATE=6
RENVOYER Faux
FIN
4 Ouvrez la fenêtre "Evenem" et testez-la. Cette fenêtre détecte si la liste est manipulée avec la
souris ou avec le clavier.
352
353
Présentation
Un composant WinDev est une bri-
que applicative qui peut être réutili-
sée dans un nombre illimité de
projets (et donc d'exécutables).
Un composant permet d'avoir un
traitement identique avec un code
source unique pour réaliser une
opération donnée même si ce traite-
ment doit être réalisé par plusieurs
projets.
2. Les classes
3. Les superchamps (à travers l’utilisation d’un dictionnaire)
Partie 7 : Programmation
4. Les composants
Voici plusieurs cas dans lesquels les composants peuvent être intéressants.
Travail en équipe
Un développeur crée et maintient un composant qu’il met à la disposition des autres développeurs.
Il ne risque pas d’y avoir des modifications faites "par erreur" !
354
Composant multiproduits
Partie 7 : Programmation
355
4 Affichez les exemples dans l’onglet "Assistants, Exemples et Composants" (bouton "Exemples").
Sélectionnez les exemples unitaires.
4 Réalisez un "Drag and Drop" de l’exemple "Calendrier popup" vers l’éditeur de WinDev. La fenê-
tre apparaît sous l’éditeur de fenêtres.
4 Sauvegardez la fenêtre.
Partie 7 : Programmation
356
357
Partie 7 : Programmation
Propriétaire,
• Libellé, Copyright, ...
358
359
4 Cliquez à nouveau sur "Suivant". Vous avez la possibilité de modifier l’aide générée.
Nous n’allons pas y toucher. Cliquez sur "Suivant".
4 Vous avez la possibilité de créer un fichier d’aide associé à votre composant (format CHM). Ce
fichier d’aide sera livré avec le composant. Les clients pourront y accéder en faisant F1 à partir
du code du composant.
Nous n’allons pas générer de fichier d’aide. Décochez si nécessaire l’option. Cliquez sur "Sui-
vant".
4 Vous avez la possibilité d’autoriser les utilisateurs finaux du composant à saisir leur propre
code W-Langage pour personnaliser vos traitements. Les suggestions peuvent directement
vous être envoyées. Dans cet exemple, nous n’allons pas autoriser la saisie de "Macro Code Uti-
Partie 7 : Programmation
lisateur". Cliquez sur "Suivant".
360
4 Nous n’allons pas enregistrer le composant dans le centre de ré-utilisabilité. Il ne reste plus
alors qu’à donner un nom physique à notre composant.
4 Cliquez sur "Terminer". Voilà, votre premier composant est maintenant créé, il est prêt à
l’emploi !
Le composant apparaît alors dans le volet "Assistants, Exemples et Composants" (bouton
"Composants", rubrique "Composants personnels").
Partie 7 : Programmation
361
4 Après avoir cliqué sur "Ouvrir", la description de notre composant s’est affichée :
Partie 7 : Programmation
362
363
Distribuer un composant
Vous avez deux choix possibles pour distribuer un composant :
1. Fournir les fichiers nécessaires "manuellement", c’est une distribution "simple".
2. Créer une distribution plus "professionnelle", grâce à l’éditeur d’installation de WinDev,
WDInst.
Distribution simple
Vous devez dans ce cas fournir tous les fichiers nécessaires au bon fonctionnement de votre com-
posant. Ces fichiers sont créés à la génération du composant (fichiers WDI, WDK, WDO, images,
autres documents, ...). Ces fichiers seront copiés manuellement de leur répertoire d’origine vers le
répertoire de destination. Les projets WinDev qui utiliseront ce composant, iront chercher les
fichiers dépendants dans ce répertoire de destination.
Liste des fichiers à fournir pour une distribution simple :
• les fichiers générés automatiquement par WinDev (WDK, WDI, ...).
• les fichiers de dépendances.
• si le composant utilise des fichiers de dépendances, il faudra fournir le fichier WDO. Ce
fichier contient les références aux différents fichiers externes utilisés dans le composant.
Distribution professionnelle
La diffusion des composants à l'aide d'une procédure d'installation consiste à fournir aux utilisa-
teurs du composant WinDev, un programme d'installation. Ce programme installe tous les fichiers
nécessaires à l'utilisation du composant dans le répertoire spécifié par l'utilisateur.
Ce mode d'installation permet de gérer automatiquement :
• le fichier WDO et l'installation des fichiers supplémentaires utilisés par le composant.
• l'installation automatique d'outils nécessaires (MDAC, driver ODBC pour Hyper File, ....).
• la mise à jour automatique des fichiers de données utilisés par le composant (si nécessaire).
Partie 7 : Programmation
• la désinstallation du composant.
4 Revenez sur le projet "Calendrier". Pour créer l’installation, sélectionnez l’option "Atelier ..
Composant .. Créer la procédure d’installation d’un composant".
L’assistant de création d’installation du composant se lance.
Nous ne détaillerons pas les différents modes d’installation d’un composant. Suivez les instruc-
tions de l’assistant. Si vous souhaitez obtenir plus de détails concernant l’installation de compo-
sants, consultez l’aide en ligne (mot-clé : "Composant WinDev, Distribuer un composant").
Quelques composants livrés en standard avec WinDev 10 :
• Affiche image • Moteur de recherche
• Agent • Paiement sécurisé
• Ballon Tip • Sélecteur
• CodePostaux France • Sélecteur Couleurs
• Envoi Fax • SOAPGMT
• Gestion Login • Zone mémoire visuelle
• JourFérié • ComposantHFInternet
364
365
Concepts
La Programmation Orientée Objet (P.O.O.) a pour but de permettre une meilleure réutilisabilité du
code. Les programmes développés en POO sont structurés : ils sont décomposés en modules
gérant chacun une fonctionnalité du logiciel. Les modules développés peuvent être facilement réu-
tilisés dans d’autres logiciels. Ils vont regrouper un ensemble de procédures et encapsuler la struc-
ture de données sur laquelle les procédures vont agir.
Pour programmer "en objet", il faut déclarer des classes, les membres et les méthodes associés.
Les classes
Une classe rassemble la description d’une structure de données (les membres) et les procédures
(méthodes) qui manipulent les membres.
Une classe définit donc un type de données et son comportement.
Les objets
Une classe permet de créer des objets. Chaque objet créé possède des membres décrits dans sa
classe et peut être manipulé par l’intermédiaire des méthodes de sa classe. On dit qu’un objet est
une instance de la classe.
Lorsque la classe est déclarée, il suffit d’associer un objet à une classe pour que l’objet puisse être
manipulé par toutes les méthodes de cette classe.
Les membres
Un membre est une donnée (ou paramètre) de l’objet.
Les méthodes
Une méthode permet d’agir sur l’objet, pour modifier ses membres par exemple.
Partie 7 : Programmation
Une méthode est une procédure. Son fonctionnement est identique à celui des procédures classi-
ques du W-Langage.
Notion d’héritage
L’héritage permet d’inclure les caractéristiques d’une classe existante (classe de base) dans une
nouvelle classe (classe dérivée). L’héritage permet de créer un nouveau type de données à partir
d’un type connu, dans le but de lui ajouter des fonctionnalités, ou d’en modifier le comportement.
La classe de base ne sera donc pas modifiée. Une classe peut hériter d’une classe dont elle
devient une sous-classe.
Une classe dérivée hérite des membres et des méthodes de sa classe mère (qui peut, elle-même,
être une sous-classe d’une autre classe mère), en plus de ses propres membres et méthodes (et
également des membres et méthodes de la première classe mère, s’il s’agit d’un héritage multi-
ple). Il n’est pas nécessaire de dupliquer les membres et méthodes de la ou des classe(s) mère(s).
366
Constructeur et Destructeur
La notion de Constructeur et Destructeur est importante puisqu’elle permet un appel automatique
de méthodes d’intialisation lors de la création d’un objet et lors de sa destruction.
La méthode Constructeur associée à une classe est automatiquement appelée lors de la déclara-
tion d’un objet de la classe.
La méthode Destructeur associée à une classe est automatiquement appelée lors de la suppres-
sion de l’objet (sortie de procédure dans laquelle l’objet a été déclaré).
Encapsulation de données
L’encapsulation des données permet de garantir que les données membres de l’objet ne seront
pas modifiées à tort par des fonctions (méthodes) extérieures à l’objet.
Il est ainsi possible d’interdire à l’utilisateur d’un objet l’accès à certain ou à tous ses membres.
Les membres dont l’accès est interdit sont appelés membres privés.
Il n’est possible d’accéder à ces membres privés qu’à partir des méthodes prévues à cet effet dans
la classe.
Nous ne détaillons pas ici la syntaxe de la P.O.O., nous présenterons uniquement un exemple sim-
ple de programme orienté objet. Pour avoir plus de détail sur la syntaxe de la P.O.O., consultez
l’aide en ligne et le manuel de programmation de WinDev (mot-clé : "POO, Classe").
367
Partie 7 : Programmation
2. Choisissez "Nouvelle méthode", en bas du menu qui apparaît.
3. Saisissez un nom et validez par [Entrée].
368
:Chemincourt=Ch2[[1 à Taille(Ch2)-1]]
RENVOYER Res
369
Nous ne nous attarderons pas plus sur la présentation de la POO dans ce cours.
Partie 7 : Programmation
370
371
Diagramme d’objets
Un diagramme d’objets représente un ensemble d’objets et leurs relations à un moment donné.
Partie 7 : Programmation
Un diagramme d’objets est utilisé pour montrer un contexte (avant ou après une interaction entre
objets par exemple).
Diagramme de composants
Un diagramme de composants décrit l'architecture physique et statique d'une application informati-
que. Par exemple : fichiers sources, librairies, exécutables, ...
Diagramme d’activité
Un diagramme d’activité représente le comportement d’une méthode ou le déroulement d’un cas
d’utilisation.
Diagramme de séquence
Un diagramme de séquence représente l’ordre chronologique des messages envoyés et reçus par
un ensemble d’objets.
372
Diagramme de collaboration
Un diagramme de collaboration présente l’organisation structurelle des objets qui envoient et reçoi-
vent des messages.
Diagramme d’états-transitions
Un diagramme d’états-transitions présente un automate à états finis. Il permet ainsi de décrire les
changements d'états d'un objet ou d'un composant.
Un état se caractérise par sa durée et sa stabilité.
Une transition représente le passage instantané d'un état vers un autre.
Une transition est déclenchée :
• soit par un événement.
• soit automatiquement lorsque aucun événement déclencheur est spécifié.
Diagramme de déploiement
Un diagramme de déploiement montre la répartition physique des matériels (les noeuds) utilisés
dans un système et l’association des programmes exécutables à ces matériels.
Nous ne détaillerons pas plus l’utilisation du langage UML avec WinDev. Consultez l’aide en ligne
pour plus d’informations (mot-clé : "UML").
Partie 7 : Programmation
373
Partie 7 : Programmation
374
XML permet de structurer un document contenant des données. Un fichier de données Hyper File
contenant plusieurs rubriques et enregistrements peut par exemple être exporté dans un fichier
XML (fonctions XML*) .
Exemple
Pour plus de détails sur l’utilisation du XML, consultez l’exemple "WD XML", livré
en standard avec WinDev.
375
Partie 7 : Programmation
• 1 gousse d’ail à 0.65 Euro la gousse (<LIGNECDE NUMERO="3">)
Dans cet exemple, nous verrons comment traiter cette commande au format XML, effectuer des
parcours sur les balises XML et extraire les données qui s’y trouvent.
376
//Création du document
XMLDocument("Commande", CodeXML)
SI ErreurDétectée ALORS
Erreur("Le document n'est pas au format XML")
RETOUR
SINON
SAI_OPERATIONS = CodeXMl
TraiteXML..Etat = Actif
Info("Le document XML a bien été créé")
FIN
Ce code permet de charger le code XML (présent dans un document texte) dans un document XML
nommé "Commande". Ce code est récupéré grâce à la fonction fChargeTexte du W-Langage. On
manipulera ensuite le document XML par ce nom.
Parcours
Partie 7 : Programmation
On parcourt un fichier XML de la même manière que l’on parcourt un fichier de données (avec les
fonctions HLit*). Les fonctions XMLPremier, XMLSuivant, XMLDernier, XMLPrécédent et XMLEnDe-
hors permettent de parcourir un document XML en se positionnant sur les balises contenues dans
ce document. Les fonctions XMLNomElement et XMLDonnée permettent entre autre de récupérer
le nom de la balise en cours de lecture et sa valeur.
Vous devez toujours avoir à l’esprit la notion de niveau dans un document XML.
Notes
En effet, un document XML est un document structuré avec une racine, des
noeuds "parents" et des noeuds "enfants".
Dans notre exemple, les balises "LIGNECDE" sont toutes de même niveau. "COMMANDE" est la
balise de niveau supérieure par rapport aux balises "LIGNECDE". Les balises "PRODUIT", "PRIXUNI"
et "QUANTITE" sont des balises de niveaux inférieurs par rapport aux balises "LIGNECDE".
377
SI XMLEnDehors("Commande") ALORS
Info("Il n'y a plus de balise à lire sur ce niveau")
SINON
Partie 7 : Programmation
Info("Balise suivante du parcours : " + ...
XMLNomElément("Commande"))
FIN
Pour se positionner sur la balise précédente, il faut procéder de la même façon avec la fonction
XMLPrécédent.
Le message d’erreur vous indique que vous êtes arrivé en fin de parcours. Cela est tout à fait nor-
mal, puisqu’il n’y a pas d’autres balises de même niveau que "<COMMANDE>".
378
SI XMLEnDehors("Commande") ALORS
Info("Il n'y a plus de balise à lire sur ce niveau")
SINON
Info("Balise fille de la balise : " + NomBalise + " est " + ...
XMLNomElément("Commande"))
FIN
379
Partie 7 : Programmation
Vous avez la possibilité d’effectuer une recherche dans un document XML. L’élément recherché
peut être une balise, un attribut ou une valeur
La fonction permettant d’effectuer des recherches dans un document XML est XMLRecherche.
Nous ne détaillerons pas cette fonction. Consultez l’aide en ligne (mot-clé : "XMLRecherche").
Pour en savoir plus sur les fonctionnalités XML de WinDev, consultez l’aide en ligne (mot-clé :
"XML").
380
381
Définition
Les threads permettent d'exécuter du code (ou des traitements) en parallèle de l'application princi-
pale. Il est ainsi possible d'exécuter plusieurs traitements différents qui peuvent être très longs en
tâche de fond, sans bloquer l'application principale.
Les threads remplacent certains types de timer.
Un thread efficace est un thread qui attend un événement, par exemple, une action de l'utilisateur,
la réception d'un e-mail, la réception d'un appel téléphonique, ...
Exemple
Exemple
Partie 7 : Programmation
et l’utilisation des threads, "WD Pool de Threads".
Pour plus de détails sur la gestion du multithread avec WinDev, consultez l’aide en ligne (mot-clé :
"Thread").
382
Partie 7 : Programmation
PARTIE 8
Application JAVA
GAF WinDev.BOOK Page 384 Mardi, 11. juillet 2006 5:42 17
GAF WinDev.BOOK Page 385 Mardi, 11. juillet 2006 5:42 17
385
386
Lors de la compilation du projet WinDev, les fenêtres et les fonctions du W-Langage sont automati-
quement converties en Java.
Partie 8 : Application Java
387
Les différentes étapes permettant de créer une application Java à partir de WinDev sont les suivan-
tes :
Analyse
W-Langage
Fonctions compatibles uniquement
RAD JAVA
Collections de procédures
Fenêtres
Application Java
redistribuable
(fichier .JAR)
Remarque : Le nombre de fonctions W-Langage utilisables dans un projet JAVA est limité
dans cette version. Ce nombre de fonctions est amené à croître régulièrement.
388
Durée estimée : 1h
389
Présentation
WinDev permet de générer des applications Java sans pour autant connaître le langage Java. Tout
le développement de l’application se fait en W-Langage, comme pour toute autre application créée
avec WinDev.
Dans cette leçon, nous allons manipuler un projet WinDev destiné à une génération Java.
L’utilisation d’une base de données utilisant un driver JDBC implique une configuration spécifique
du poste de développement ou d’un serveur. Dans cette leçon, nous manipulerons donc un fichier
texte (plus simple à mettre en place).
4 Ouvrez le projet "WD JAVA.WDP". Ce projet est présent dans le sous-répertoire "Autoforma-
tion\Corriges\WD JAVA" de WinDev.
4 Lancez le test du projet (icone (ou [CTRL + F9]). Ce projet permet de manipuler une liste de
clients présente dans un fichier texte.
Pour compiler (en Java) un projet Java réalisé avec WinDev, il est nécessaire d’installer sur le
poste de développement le J2SDK de Sun (version 1.4.2 ou supérieure nécessaire). Une version
est disponible sur le CD d’installation de WinDev. Il est également possible de télécharger ce pro-
gramme sur le site de Sun.
Pour exécuter un projet Java réalisé avec WinDev, il est nécessaire d’installer sur le poste de
déploiement :
• le runtime Java (JRE de Sun version 1.4.2 ou supérieure)
• l’application générée par WinDev (Fichier .jar)
• la librairie WD100Java.jar. Cette librairie peut être intégrée dans le fichier .jar.
• les drivers JDBC nécessaires pour manipuler une base de données. Ces drivers peuvent être inté-
grés dans le fichier .jar.
390
Remarque : Il est conseillé de créer un nouveau projet WinDev pour développer une application
Java plutôt que de transformer une application WinDev en application Java.
Le RAD Java
Partie 8 : Application Java
Comme sur tout projet WinDev associé à une analyse, vous pouvez utiliser le RAD pour générer les
fenêtres de votre application Java.
Vous pouvez créer des fenêtres fiche, table, ... Le RAD Java prend en compte toutes les spécifici-
tées de la génération Java (champs, traitements, fonctions utilisables dans une application WinDev
générée en Java).
Quel que soit le type de fenêtre à générer, vous pouvez choisir d’accéder à la base de données soit
par Hyper File (sous Windows et Linux), soit par le driver JDBC.
Si vous utilisez le driver JDBC, l’assistant permet de spécifier les paramètres de connexion à la
391
Les fenêtres générées par le RAD Java utilisent les fonctions SQL du W-Langage. La connexion à la
base de données est réalisée grâce à la fonction SQLConnecte.
392
Pour compiler (en Java) un projet Java réalisé avec WinDev, il est nécessaire d’installer sur le
poste de développement le J2SDK de Sun (version 1.4.2 ou supérieure nécessaire). Une version
est disponible sur le CD d’installation de WinDev. Il est également possible de télécharger ce pro-
gramme sur le site de Sun.
Sélectionnez "Générer une application Java directement exécutable" et cliquez sur le bouton
"Suivant".
393
2. Dans cet exemple, nous allons créer une application Java classique :
394
4. Spécifiez si le framework WinDev pour Java doit être intégré dans l’archive .jar.
Remarque : une application Java peut également être installée selon le principe "Java Web Start".
395
Dans ce cas, l’application est déployée sur un serveur Web, et lancée depuis un navigateur sur les
postes Client. Cette application est exécutée comme une application Java "classique". La mise à
jour de l’application sur le serveur provoque la mise à jour de l’application sur les postes Client.
Pour utiliser cette fonctionnalité, lancez l’assistant de génération d’une archive Java, et choisissez
le type d’application "Générer une application pour Java Web Start".
Sélectionnez "Générer une application Java directement exécutable" et cliquez sur le bouton
"Suivant".
2. Sélectionnez l’option "Générer une applet Java".
3. Précisez les informations générales de l’archive.
4. Spécifiez si le framework WinDev pour Java doit être intégré dans l’archive .jar.
Cliquez sur le bouton "Suivant".
5. Indiquez les autres fichiers à intégrer dans l’archive .jar. Vous pouvez sélectionner par exem-
ple les drivers JDBC permettant l’accès à une base de données.
Cliquez sur le bouton "Suivant".
6. Définissez les paramètres de signature de l’archive Java.
7. Indiquez :
• le compilateur Java à utiliser (si plusieurs compilateurs sont installés sur le poste). Vous pou-
396
vez également spécifier la ligne de commande à utiliser (pour plus de détails, consultez la
documentation du compilateur choisi).
• l’outil de création d’archive à utiliser. Vous pouvez également spécifier la ligne de commande
à utiliser (pour plus de détails, consultez la documentation du compilateur choisi) et le con-
tenu du manifeste de l’archive.
• la commande d’intégration d’autres archives.
• la commande de génération du fichier de signature
• la commande de signature d’archive
8. La création de l’applet Java est terminée. Le fichier correspondant a été créé dans le réper-
toire "EXE" du projet. Il est possible de tester cet applet directement en lançant la page HTML
générée dans le répertoire "EXE" du projet.
Autres fonctionnalités
Intégration à Eclipse
Eclipse est un environnement de développement intégré dont le but est de fournir une plate-forme
modulaire pour permettre de réaliser des développements informatiques en Java.
L’appel à l’environnement WinDev peut être intégré dans les menus d’Eclipse, ce qui simplifie
l’appel de WinDev depuis Eclipse.
Un plug-in est fourni avec WinDev. Pour plus de détails, consultez l’aide en ligne (mot-clé :
"Eclipse").
Réaliser l’interface d’une application Java avec WinDev
WinDev peut être utilisé comme générateur de fenêtres d’une application Java.
L’application Java dispose ainsi de l’ergonomie, des tests automatiques d’une application WinDev.
Fenêtres et champs se manipulent par des classes et des méthodes spécialisées pour chaque
fenêtre et chaque champ. La "Javadoc" est fournie dans le répertoire "Aide" de WinDev.
Partie 8 : Application Java
PARTIE 9
Communication
GAF WinDev.BOOK Page 398 Mardi, 11. juillet 2006 5:42 17
GAF WinDev.BOOK Page 399 Mardi, 11. juillet 2006 5:42 17
399
Partie 9 : Communication
400
Les moyens de communication offerts par WinDev vous permettent une ouverture totale !
Réplication, RPC, TAPI, réseau, socket, FTP, e-mail, HTTP, XML, SOAP, J2EE, .NET, Twain, RS232 ...
autant de standards supportés par WinDev.
Dans cette partie, nous n’aborderons malheureusement pas toutes les possibilités offertes par
Partie 9 : Communication
Pour plus de détails sur la communication avec WinDev, consultez l’aide en ligne et les exemples
livrés en standard avec WinDev.
401
Partie 9 : Communication
402
Présentation
Le W-Langage possède toutes les fonctions de programmation nécessaires pour gérer la réception
ou l’envoi de messages Internet (appelés "e-mails"). De plus, grâce à WinDev, vous pourrez connaî-
tre toutes les caractéristiques d’un e-mail :
• expéditeur, destinataires
• date d’envoi, sujet, message
• pièces jointes ...
Nous évoquerons dans ce cours uniquement la méthode de gestion par les protocoles POP3 /
SMTP. En effet, c’est le mode qui est actuellement le plus utilisé dans le monde.
Pour plus de détails sur Simple MAPI, consultez l’aide en ligne (mot-clé : "Simple MAPI").
Les fonctions de gestion des e-mails commencent toutes par "Email".
Pour envoyer ou lire des messages grâce aux protocoles POP3/SMTP, il faut :
1. Se connecter au fournisseur d'accès (si nécessaire).
2. Ouvrir une session de messagerie avec la fonction EmailOuvreSession.
3. Envoyer et lire les messages.
4. Fermer la session de messagerie avec la fonction EmailFermeSession.
5. Se déconnecter (si nécessaire).
403
Avec la fonction EmailOuvreSession, vous pourrez à la fois lire et envoyer des e-mails. Pour plus de
détails, consultez l’aide en ligne (mot-clé : "Email, Fonctions E-mails").
Envoyer un e-mail
Pour envoyer un message avec WinDev, il suffit de renseigner les principales informations d’un e-
mail qui seront contenues dans la structure Email. Nous listons ici les éléments indispensables à
l’envoi d’un e-mail. Bien entendu, il existe d’autres informations que vous pouvez renseigner
Partie 9 : Communication
(fichiers attachés, destinataires en copie cachée, etc ...), consultez l’aide en ligne pour plus de
détails (mot-clé : "Email, Structure email").
404
Dans le cas d’un e-mail avec un contenu de type "texte brut", utilisez la variable
Email.Message plutôt que la variable Email.HTML.
Il est possible d’utiliser les deux formes ensemble (texte et HTML). Ainsi les destinataires lisant leur
e-mail avec un outil incapable d’afficher du HTML verront le texte de Email.Message.
4 Pour envoyer le message que nous venons de décrire, il suffit tout simplement d’utiliser la fonc-
Partie 9 : Communication
tion EmailEnvoieMessage :
// Lors de la connexion nous avons récupéré le nom
// de l’utilisateur dans la variable NomUser
// Envoie le mail
EmailEnvoieMessage(NomUser)
SI ErreurDétectée ALORS
Erreur("EMailEnvoieMessage a échoué '" + ...
ErreurInfo(errMessage) + "'")
SINON
Info("EMailEnvoieMessage a réussi")
FIN
4 Pour ré-initialiser toutes les variables Email (par exemple lors de l’envoi de plusieurs e-mails les
uns à la suite des autres), il suffit d’utiliser la fonction EmailRAZ.
405
Lire un e-mail
Maintenant que nous sommes connectés à notre serveur et que nous avons envoyé un message,
nous allons voir comment en lire e-mail.
Sur le même principe qu’un parcours de fichier avec les fonctions HLitPremier, HLitSuivant ... il est
possible de lire les e-mails reçus avec les fonctions EmailLitPremier, EmailLitSuivant ... Pour plus
de détails sur ces fonctions, consultez l’aide en ligne (mot-clé : "Email, Lire un email").
Pour chaque e-mail lu, la structure Email est initialisée. Les variables de cette structure correspon-
dent à l'ensemble des caractéristiques de l'e-mail en cours.
Exemple de code :
// connexion au serveur effectuée avec EmailOuvreSession
// Lors de la connexion nous avons récupéré le nom
// de l’utilisateur dans la variable NomUser
// Lecture du premier e-mail
sMessage est une chaîne
EmailLitPremier(NomUser)
SI PAS Email.EnDehors ALORS
SI Email.HTML = "" ALORS
sMessage = Email.Message
SINON
sMessage = "Email au format HTML:" + RC + Email.HTML
FIN
Info("Expéditeur: " + Email.Expediteur + RC + ...
"Date d’envoi: " + Email.DateReception + RC + ...
"Sujet: " + Email.Sujet + RC + "Message: " + sMessage)
FIN
Partie 9 : Communication
Comment récupérer un document attaché ?
Utilisez les variables Email.Attache et la fonction EmailSauveAttache ... Exemple de code :
Repert_Temp est une chaîne = "C:\temp\"
CID est une chaîne
I est un entier
// Pour chaque fichier attaché
POUR I = 1 à Email.NbAttache
// Copier le fichier dans un répertoire temporaire
EmailSauveFichierAttache(Email.Attache[I], Repert_Temp ...
+ Email.Attache[I])
// Récupérer l'identifiant du fichier attaché dans le mail
CID = "cid:" + Email.IdentifiantAttache[I]
// Remplacer les références au fichier attaché par
// le nom réel du fichier
Email.HTML = Remplace(Email.HTML, CID, "file:" + ...
Repert_Temp + Email.Attache[I])
FIN
406
Déconnexion
Pour vous déconnecter, il suffit tout simplement d’utiliser la fonction EmailFermeSession :
SI NomUser <> "" ALORS
EmailFermeSession(NomUser)
NomUser = ""
FIN
Autres possibilités
Il est également possible de :
• envoyer des fichiers attachés dans vos e-mails. Pour plus de détails, consultez l’exemple "WD
POP3" fourni avec WinDev.
• effectuer des mailings par e-mails. Pour plus de détails, consultez l’exemple "WD Mailing par
email".
• piloter le logiciel Microsoft Outlook grâce aux fonctions du W-Langage. Pour plus de détails,
consultez l’exemple "WD Outlook".
Pour plus de détails sur la gestion des e-mails avec WinDev, consultez l’aide en ligne (mot-clé :
"Email, Gestion des email").
Partie 9 : Communication
407
Partie 9 : Communication
408
Présentation
Le FTP (File Transfert Protocol) est un protocole standard permettant d’effectuer le transfert de
fichiers d’une machine vers une autre machine. Une des deux machines doit être un serveur FTP.
Le W-Langage possède les commandes de programmation nécessaires pour effectuer des trans-
ferts de fichiers en utilisant ce protocole avec un serveur. Ces fonctions de programmation com-
mencent toutes par "FTP".
WinDev ne propose que des fonctions "clientes" pour le FTP. Il est nécessaire d’utiliser un serveur
FTP standard.
Exemple de code :
NomUSER est une chaîne = "Utilisateur"
Password est une chaîne = "MotDePasse"
AdresseFTP est une chaîne = "ftp.monsite.com"
Res est un entier
Res = FTPConnecte(AdresseFTP, NomUSER, Password)
SI Res = -1 ALORS
Erreur("Impossible de se connecter." + RC + ...
ErreurInfo(errMessage))
SINON
Info("Connexion réussie.")
FIN
Partie 9 : Communication
Il est également possible de préciser le numéro de port de connexion du serveur FTP (par défaut
"21") ainsi que le mode de connexion ("Vrai" pour une connexion dite "passive", "Faux" pour une
connexion dite "active"). Pour plus de détails, consultez l’aide en ligne (mot-clé : "FTP, Fonctions").
409
Envoyer un fichier
Pour envoyer un fichier vers un serveur FTP, il suffit tout simplement d’utiliser la fonction
FTPEnvoie :
// lors de la connexion au serveur avec FTPConnecte, nous avons
// récupéré le numéro de connexion dans la variable Res
// Transfert du fichier "C:\MesDocuments\Fichier.DOC" vers
// le répertoire "Temp" qui se trouve sur le serveur.
Result est un booléen = FTPEnvoie(Res, ...
"C:\MesDocuments\Fichier.DOC", "/Temp")
Récupérer un fichier
Pour récupérer un fichier depuis un serveur FTP sur votre machine, il suffit tout simplement d’utili-
ser la fonction FTPRécupère :
// lors de la connexion au serveur avec FTPConnecte, nous avons
// récupéré le numéro de connexion dans la variable Res
// Récupération du fichier "/Document/Fichier.DOC" présent
// sur le serveur FTP vers le répertoire "D:\Temp" sur
Partie 9 : Communication
// le poste en cours
Res est un booléen = FTPRécupère(Res, ...
"/Document/Fichier.DOC","D:\Temp")
410
Déconnexion
Comme pour la fermeture d’une session de messagerie, il existe en W-Langage une fonction pour se
déconnecter d’un serveur FTP. Cette fonction se nomme FTPDéconnecte :
// lors de la connexion au serveur avec FTPConnecte, nous avons
// récupéré le numéro de connexion dans la variable Res
// Déconnexion
FTPDeconnecte(Res)
Il existe également d’autres fonctions FTP que nous ne détaillerons pas dans ce cours. Elles permet-
tent notamment de :
• créer, supprimer, modifier des répertoires sur le serveur FTP,
• créer, supprimer, modifier des fichiers sur le serveur FTP,
• récupérer les informations d’un répertoire et/ou d’un fichier,
• ...
PARTIE 10
413
414
4 1.
Pour importer des éléments existants dans le projet en cours :
Sélectionnez l’option "Fichier .. Importer .. Des éléments WinDev et leurs dépendances ..."
Partie 10 : Utilisation avancée
2. Cliquez sur et sélectionnez le répertoire où se trouvent les éléments à importer (le réper-
toire doit comporter des éléments WinDev).
415
3. Cliquez sur "OK" pour valider. WinDev liste alors les différents éléments que vous pouvez
importer présents dans le répertoire spécifié (les sous-répertoires ne sont pas pris en compte)
416
L’exportation d’éléments est plus qu’une simple copie d’éléments. En effet, c’est
Attention !
le seul moyen sûr pour transmettre un élément d’un projet avec toutes ses dépen-
dances (images, icones ...). Une solution pratique pour transmettre des fenêtres
avec leurs dépendances par e-mail, par exemple.
4 1.
Pour exporter des éléments de votre projet :
Cliquez sur "Fichier .. Exporter .. Vers un répertoire ...".
Dans la fenêtre qui s’affiche, sélectionnez les éléments de votre projet que vous souhaitez
exporter.
Partie 10 : Utilisation avancée
417
Importations spécifiques
Importation d’un projet WebDev
De plus en plus de sites WebDev doivent être transformés en applications WinDev. Désormais,
cette fonctionnalité est automatique.
WinDev permet d’importer une page ou un projet WebDev entier dans une application WinDev.
Lors de cette importation :
• Les pages sont transformées en fenêtres.
• Les codes "Serveur" et "Navigateur" sont regroupés.
• L’import d’éléments sans equivalent en WinDev (code Javascript par exemple), est effectué sous
forme de commentaires ou d’éléments séparés.
418
Importation Access
Partie 10 : Utilisation avancée
WinDev offre la possibilité d’importer des éléments Access : Analyse, Formulaire, Requête, ou projet
complet.
Pour importer des éléments d’une application Access :
1. Sélectionnez l’option "Fichier .. Importer .. Un projet ou des éléments Access".
2. Sélectionnez le fichier ".mdb" correspondant au projet Access.
3. Sélectionnez les éléments à importer. Indiquez si nécessaire si la base de données doit être
migrée au format Hyper File ou conservée au format Access.
4.Validez.
Attention : L’importation d’éléments d’une application Access peut être relativement longue.
419
• Manipulation du dictionnaire.
• Gestion des abonnements.
420
Introduction
Le dictionnaire est un fichier pouvant contenir des éléments du projet :
• description de fichiers,
• description de rubriques,
• fenêtres,
• ...
Le dictionnaire est un moyen simple de conserver des éléments créés avec WinDev en prévision
d’une prochaine ré-utilisation dans de nouveaux projets.
Lors de cette ré-utilisation, chaque élément provenant d'un dictionnaire peut être "abonné" aux
modifications. A chaque modification de l’objet du dictionnaire, tous les objets abonnés pourront
intégrer cette modification, et ainsi "suivre" les évolutions du dictionnaire.
Un dictionnaire peut aussi être utilisé pour simplifier le travail en groupe : un dictionnaire partagé
entre plusieurs développeurs peut ainsi contenir des procédures, des boutons pré-définis, ... Ces
objets sont mis en communs, et accessibles par tous les développeurs.
2. Les classes
3. Les superchamps (à travers l’utilisation d’un dictionnaire)
4. Les composants
Partie 10 : Utilisation avancée
Manipulation du dictionnaire
WinDev permet simplement de :
• Créer et ouvrir un dictionnaire.
• Ajouter des éléments dans un dictionnaire.
• Copier des éléments depuis un dictionnaire.
421
4 1.
Pour afficher l'ensemble des éléments présents dans le dictionnaire :
Sélectionnez le nom du dictionnaire.
2. Affichez le menu contextuel du dictionnaire (clic droit) et sélectionnez l'option "Dérouler
422
Si l’objet abonné n’est pas en phase avec le dictionnaire, la mise à jour de l’objet abonné est propo-
sée à l’ouverture ou la sauvegarde de cet objet :
• mettre à jour l’élément du dictionnaire à partir de l’élément abonné sélectionné dans la liste,
• mettre à jour l’élément abonné sélectionné à partir de l’élément du dictionnaire,
• supprimer l’abonnement, ...
423
• Présentation
• Le gestionnaire de sources
424
Introduction
Un développement informatique important nécessite la participation de plusieurs développeurs.
Ces développeurs doivent travailler sur un projet WinDev unique, en partageant les différentes res-
sources (fenêtres, classes, ...) manipulées.
Le gestionnaire de sources
Présentation
Totalement intégré à l’environnement, le GDS permet le développement performant en équipe,
l’historique des modifications et des versions, et l’automatisation de la sauvegarde des sources de
l’équipe de développement.
Dimensionné pour des équipes de 1 à 100 développeurs, le GDS favorise et normalise sans con-
trainte les échanges entre développeurs.
Le GDS utilise une base de sources : procédures, classes, fenêtres, états, composants, requêtes, ...
Cette base peut être installée :
• sur un serveur dédié
• sur un poste réseau, dans un répertoire partagé.
Partie 10 : Utilisation avancée
Le GDS permet un fonctionnement connecté en local et à distance, via Internet ou une liaison HTTP
ou HTTPS. Il est possible de travailler sur un projet depuis une agence ou depuis un site client, sans
crainte de perte des modifications effectuées. Le GDS permet également un fonctionnement
déconnecté (train, ...).
Fonctionnalités
Parmi les nombreuses fonctionnalités du GDS, vous trouverez :
• La base gère plusieurs projets : si plusieurs projets utilisent un même élément, cet élément
peut être partagé.
• Un historique de tous les éléments, depuis leur création est mémorisé dans la base.
• Le projet est présent sur chaque poste de développement. Il est donc possible de développer
avec un poste déconnecté.
• Sans login et sans les droits nécessaires, il est impossible d’accéder aux projets (sauf pour le
chef de projet). De même, chaque développeur peut avoir des droits différents sur chaque
élément.
• Il est possible de consulter à tout moment la liste des modifications effectuées entre deux
versions, par soi-même et/ou par d’autres développeurs.
• La base de données contenant le GDS peut être au format Client / Serveur ou réseau.
425
Remarque : A l’heure où nous imprimons ces lignes, le gestionnaire de sources est actuellement
en cours de validation par notre service Qualité. Une leçon spécifique du cours d’auto-formation
sur ce sujet sera prochainement disponible au format PDF sur le site de PC SOFT (www.pcsoft.fr).
depuis un lecteur réseau, doit être "mappé" avec la même lettre de lecteur
sur tous les postes de développement.
Par exemple, si le projet est présent sur T:\Projet Partagé, tous les postes
doivent utiliser ce même chemin (avec le lecteur T) pour accéder au projet.
426
Caractéristiques du projet
Vous développez un projet à plusieurs :
4 Cochez simplement l'option "Nous travaillons à plusieurs sur le projet" présente dans la fenêtre
de description du projet (option "Projet .. Description du projet"). Votre projet est alors prêt pour
le développement en groupe.
Lors d'un test du projet ou lors de la création d'un exécutable, les autres développeurs manipulent
toujours l'élément dans son état avant extraction.
ment en mode "Lecture seule" (option "Ouvrir en lecture seule" du menu contex-
tuel de l'élément sous l'éditeur de projet).
427
Attention !
Si vous réintégrez un élément actuellement ouvert sous votre éditeur, cet élément
sera en "Lecture seule" pour les autres développeurs.
Par défaut, seuls le superviseur et le créateur de l'objet peuvent modifier les droits accordés aux
autres développeurs sur un objet.
Il est ainsi possible de gérer les droits d’accès sur les éléments suivants : le projet, l'analyse et ses
fichiers, les requêtes, les fenêtres, les états, les classes, les collections de procédures, le graphe
4 1.
Pour protéger l’accès à un élément du projet :
Sélectionnez l’élément.
2. Dans le menu contextuel, sélectionnez l’option "Droits groupware".
3. Dans la fenêtre de visualisation des droits, vous pouvez :
•Consulter et / ou modifier les droits accordés à un développeur,
•Prendre en compte de nouveaux développeurs.
Lors du développement d’un projet utilisant le groupware développeur, plusieurs messages infor-
meront le développeur des possibilités de manipulation des différents éléments du projet. Ainsi, le
signe "+" présent dans la barre de titre de l’élément signale que l’utilisateur a uniquement les
droits en lecture.
428
Cas particuliers
Bon à savoir :
Notes
Par défaut lors d’un travail en groupe, tout élément ouvert sous un éditeur est
automatiquement "extrait" du projet.
Astuce
Appuyez sur [F5] à tout moment pour visualiser les éléments extraits du projet.
Partie 10 : Utilisation avancée
Pour plus de renseignements sur le groupware développeur, consultez l’aide en ligne de WinDev
(mot-clé : "Groupware développeur").
429
430
Présentation
L'analyseur de performances est un outil permettant de vérifier et d'optimiser le temps d'exécution
de votre application.
Il est conseillé d'utiliser l'analyseur de performances pour optimiser votre application (avant sa dif-
fusion par exemple).
Pour ouvrir un fichier de statistiques spécifique (par exemple un fichier créé par programmation) :
1. Sélectionnez l'option "Projet .. Performances et améliorations .. Rapport de performances ..
Ouvrir un rapport de performances".
2. Indiquez le chemin et le nom du fichier de statistiques.
La liste des derniers fichiers de statistiques ouverts est présente dans le menu "Projet .. Perfor-
mances et améliorations .. Rapport de performances .. ").
431
Optimiser un traitement
Lorsque le traitement à optimiser est choisi, l'analyseur de performances vous permet de connaître
le détail des opérations effectuées.
Pour afficher le détail des opérations effectuées dans un traitement :
1. Sélectionnez la fonction à optimiser dans l'onglet "Détail".
2. Affichez le détail de cette fonction :
•soit en double-cliquant sur la fonction.
•soit en cliquant sur le bouton "Appels".
432
La liste des fonctions appelées permet d'affiner la recherche du traitement à optimiser. En effet, il
est possible de visualiser les différentes fonctions appelées, et le temps de traitement de chaque
fonction.
Tous les traitements contenant du code W-Langage (nommé "Code du développeur") peuvent être
optimisés.
Un double-clic sur une des fonctions de cette liste (par exemple : "Clic sur Valider") permet de visua-
liser le détail des traitements appelés par cette fonction.
Remarques :
• Le libellé "Traitement interne au moteur d'exécution" correspond au temps d'exécution de la fonc-
tion ou de la procédure (cas d'une fonction W-Langage par exemple). Ce temps est incompressi-
ble et ne peut pas être optimisé.
• Le libellé "Code du développeur" correspond au temps d'exécution du code même de la fonction
ou de la procédure (hors appels de sous-fonctions). Ce temps est compressible et peut être opti-
misé.
• Pour visualiser rapidement le code du traitement en cours, il suffit de cliquer sur l'icone .
L'analyseur reste ouvert, et vous pouvez modifier le code en cours.
• Le bouton "Précédent" permet de revenir à la fonction immédiatement appelante.
• Le bouton "Début" permet de revenir au traitement du début de l'application.
433
434
Présentation
Comparer deux fenêtres (deux états, deux classes, ...) est un besoin courant dans la vie d’une appli-
cation.
Par exemple, une fenêtre qui fonctionnait il y a deux semaines a été modifiée par un stagiaire. Cette
fenêtre ne fonctionne plus désormais. Comment connaître les modifications effectuées dans cette
fenêtre ? Il suffit d’utiliser le comparateur de projets !
Le comparateur de projets permet de comparer deux projets ou deux éléments WinDev (fenêtres,
états, ...) entre eux.
Toutes les différences trouvées entre les deux éléments comparés sont listées.
• collection de procédures
Comment le faire ?
Pour comparer deux projets WinDev :
1. Sélectionnez l’option "Fichier .. Comparaison .. Comparer deux projets". L’assistant de compa-
raison se lance.
2. Sélectionnez les deux projets WinDev à comparer.
3. Validez (bouton "Terminer").
L’ensemble des différences trouvées entre les deux projets est listé.
435
L’ensemble des différences trouvées entre les deux éléments est listé.
Pour comparer deux éléments WinDev :
1. Sélectionnez l’option "Fichier .. Comparaison .. Comparer deux éléments". L’assistant de
comparaison se lance.
2. Sélectionnez le type d’élément WinDev à comparer (projet, fenêtre, état, ...).
3. Sélectionnez les deux éléments WinDev à comparer.
4. Validez (bouton "Terminer").
L’ensemble des différences trouvées entre les deux éléments est listé.
436
• Présentation de WDTest.
• Utilisation de WDTest.
437
Présentation de WDTest
WDTest est un utilitaire permettant d'enregistrer et d'exécuter automatiquement des scripts de test
d'applications (WinDev ou non WinDev).
Un script de test contient principalement les différentes manipu-
lations (position de la souris, clic de souris et touche du clavier
utilisé) effectuées sur une application.
Après avoir été enregistré, le script de test peut être exécuté à
volonté. Lorsqu'un script est exécuté, un script de résultat est
automatiquement généré. Les différences entre les deux scripts
(script d'origine et script de résultat) sont signalées.
Il est ainsi possible par exemple de vérifier le fonctionnement de
vos applications WinDev entre deux mises à jour.
WDTest permet donc d'automatiser les procédures de test de vos applications.
Conditions d'utilisation
WDTest est un outil non redistribuable. WDTest ne peut pas être installé avec les applications déve-
loppées avec WinDev.
Pour utiliser WDTest, WinDev doit obligatoirement être installé sur le poste en cours.
Nous ne détaillerons pas toutes les possibilités offertes par WDTest. Nous aborderons uniquement
les principes d’utilisation de WDTest.
Utilisation de WDTest
438
3. Cliquez sur le bouton "Nouveau". Dans la fenêtre qui s’ouvre, indiquez un nom et spécifiez
les répertoires de sauvegarde des scripts et des résultats des tests.
439
4. Lorsque WDTest vous demande si vous souhaitez enregistrer le script, cliquez sur "Oui" si
vous êtes prêt à tester votre application. Sinon, vous pourrez lancer l’enregistrement du script
en cliquant sur le bouton "Enregistrer un script" dans WDTest.
5. WDTest vous informe alors que vous pourrez arrêter le test en appuyant sur la touche [Arrêt
Défil] ou en effectuant la combinaison suivante [CTRL] + [SHIFT] + [’+’ du pavé numérique].
6. Effectuer les différentes manipulations "tests" sur votre application (que vous aviez lancée
au départ).
7. Lorsque vous avez terminé, appuyez sur [Arrêt Défil]. L’enregistrement est alors effectué.
Nous n’allons pas détailler la modification du script. Pour plus de détails, consultez l’aide en ligne
(mot-clé : "WDTest").
440
WDTest permet de :
• modifier la durée d'exécution d'un événement, d'un ensemble d'événement ou de tout le
script de test.
• spécifier un délai entre chaque manipulation du script de test.
Pour modifier la durée d'exécution, spécifiez un coefficient de temporisation dans l'option
"Coefficient" :
• pour augmenter la durée d'exécution : saisissez une valeur supérieure à 1.
• pour diminuer la durée d'exécution : saisissez une valeur comprise entre 0 et 1.
• pour conserver la durée d'exécution d'origine : saisissez "1".
Pour spécifier un délai entre chaque manipulation du script de test, spécifiez ce délai (en millise-
condes) dans l'option "Délai de temporisation supplémentaire".
Attention !
Si une des options ci-dessus est utilisée, l'action d'origine peut être modifiée. Par
exemple, un double-clic de souris exécuté plus lentement sera interprété comme
deux clics successifs (selon les propriétés de la souris utilisée).
Partie 10 : Utilisation avancée
Vous avez également la possibilité d’exécuter le script en continu, pour vérifier la stabilité de l’appli-
cation par exemple (bouton "Jouer les scripts" dans WDTest), ou bien exécuter le test en mode pas
à pas (bouton "Exécuter pas à pas").
Une fois l’exécution lancée, vous pouvez observer sur votre écran toutes les manipulations que
vous aviez enregistrées lors de l’enregistrement du script de test.
Lorsque l’exécution du test est terminée, WDTest compare le fichier de script de test avec un fichier
de résultat, pour observer d’éventuelles différences de comportement de votre application.
Astuce
Plutôt qu’un long scénario, créez plusieurs petits scénarios de tests, que vous
enchaînerez ...
Nous ne détaillerons pas plus les fonctionnalités de WDTest, nous vous conseillons de consulter
l’aide en ligne (mot-clé : "WDTest").
PARTIE 11
Comment le faire ?
GAF WinDev.BOOK Page 442 Mardi, 11. juillet 2006 5:42 17
GAF WinDev.BOOK Page 443 Mardi, 11. juillet 2006 5:42 17
443
QUESTIONS / RÉPONSES
Ce que vous allez apprendre dans cette leçon ...
444
Champs, fenêtres
Le "clonage humain" n’est pas encore en vogue, mais avec WinDev, il est déjà possible de cloner
les champs. La fonction ChampClone permet de dupliquer par programmation un champ dans une
fenêtre ou un état.
Le champ est dupliqué avec les mêmes caractéristiques mais avec un nom différent.
La fonction ChampSupprime permet de supprimer par programmation un champ dans une fenêtre
ou un état.
Les plans d'une fenêtre permettent de répartir des champs dans différentes "couches" afin d'éviter
les écrans trop chargés ou la multiplication des fenêtres dans un projet.
Partie 11 : Questions / Réponses
Pour passer d'un plan à l'autre dans l'éditeur, utilisez les touches [Page Suivante] et [Page Précé-
dente] du clavier. Le numéro du plan en cours est affiché :
• dans la barre de message de l’éditeur (en bas à gauche)
• dans la fenêtre d’accueil de la fenêtre en cours (en haut à droite).
Astuce
Pour éviter de dupliquer un même champ dans une fenêtre, vous pouvez associer
le champ à "aucun plan". Le champ est alors visible dans tous les plans.
Seuls les champs du plan en cours et les champs n'appartenant à aucun plan sont visibles en édi-
tion et en exécution.
Vous pouvez également utiliser la propriété Plan pour :
• connaître et changer le plan actif d’une fenêtre.
• connaître et changer le plan associé à un champ.
445
Un onglet est une sorte de bouton constitué de plusieurs zones clicables nommées "Volets".
Pour gérer et déterminer sur quel volet un clic est réalisé, utilisez la syntaxe suivante dans le code
de clic de l’onglet :
SELON NomChampOnglet
CAS 1 // premier volet
//...Traitement à effectuer...
CAS 2 // deuxième volet
//...Traitement à effectuer...
AUTRES CAS
//...Autres traitements à effectuer...
FIN
Pour afficher la progression d'un traitement, on utilise le plus souvent une jauge.
Pour cela, utilisez un champ Jauge dans une fenêtre (option "Insertion .. Champ .. Jauge").
Avec WinDev, vous pouvez facilement insérer une liaison Internet dans vos applications. Pour cela :
1. Insérez un champ HTML dans une fenêtre (option "Insertion .. Champ .. Champ HTML").
2. Initialisez le champ HTML avec l'adresse du site auquel vous souhaitez vous connecter :
NomChampHTML = "http://www.pcsoft.fr"
Bien évidemment, votre poste (ainsi que le poste de l’utilisateur final) doit avoir une connexion à
Internet active.
446
La couleur d’un champ se définit dans le style du champ (option "Champ .. Choisir un style").
Cependant, il est possible de modifier la couleur de ce champ par programmation. La syntaxe est la
suivante :
// Colorier le texte en rouge
NomChamp..Couleur = iRougeClair
// Colorier la couleur de fond du libellé en vert
NomChamp..CouleurFond = iVertClair
// Remettre la couleur d'origine (celle du style)
NomChamp..Couleur = iCouleurDefaut
Notes
La fonction RVB permet de définir une couleur à partir des différentes valeurs des composantes
Rouge, Vert et Bleu.
<CodeCouleur> = RVB(<rouge>,<vert>,<bleu>)
Il est également possible de modifier les couleurs des lignes, des colonnes ou d’une cellule d'un
Partie 11 : Questions / Réponses
Un bouton peut être rendu invisible par programmation avec la syntaxe suivante :
NomBouton..Visible = Faux
447
Question Comment lier une fenêtre à une option de mon menu principal ?
La fonction Ouvre permet d'associer une fenêtre à une option de menu. Saisissez le code suivant
dans le code de clic de votre option de menu :
Ouvre(MAFENETRE)
Notes
Pour insérer automatiquement un menu "?" dans votre application, sélectionnez l’option "Fenêtres
... Menu principal .. Ajouter le menu ’?’" et sélectionnez les options désirées dans l’assistant qui se
lance.
448
Pour connaître ou modifier le menu contextuel d’une champ ou d’une fenêtre par programmation,
utilisez la propriété MenuContextuel.
Question Comment fermer une fenêtre automatiquement après une durée prédéfinie ?
Pour plus de détails, consultez l’aide en ligne (mot-clé : "Fermer, Fermeture automatique (bouton)").
Notez que vous pouvez également utiliser l’option "Validation automatique" disponible dans l’onglet
"Détail" de la description de la fenêtre.
Partie 11 : Questions / Réponses
La méthode pour passer des paramètres à une fenêtre est similaire au passage des paramètres à
une procédure.
Dans le code de déclaration globales de la fenêtre, saisissez la syntaxe du code W-Langage
449
suivante :
PROCEDURE NomFenêtre(pNomParam1, pNomParam2, ...)
Lors de l'ouverture de la fenêtre avec la fonction Ouvre, passez les paramètres après le nom de la
fenêtre, par exemple :
Ouvre(Nomfenêtre, ValeurParam1, ValeurParam2, ...)
Si vous initialisez un paramètre lors de la déclaration dans la fenêtre, ce paramètre devient
optionnel :
// pNomParam2 est un paramètre optionnel
PROCEDURE NomFenêtre(pNomParam1, pNomParam2 = "Test")
Notes
Il est préférable de passer des paramètres à une fenêtre plutôt que de déclarer
des variables globales dans le projet.
Question Comment regrouper des champs pour modifier leurs propriétés par
programmation ?
Les champs seront associés à ce groupe. Vous pourrez ensuite modifier les propriétés des champs
de ce groupe par la syntaxe :
NomGroupe..<NomPropriété> = Valeur
450
Attention !
L'option de menu "Champ .. Permuter .. Sélecteur/Interrupteur" inverse les deux types de champs.
Notes
Cette opération peut également être effectuée entre un champ Liste et une
Combo ou entre un champ Potentiomètre et un Potentiomètre rotatif.
4 Pour gérer la persistance des champs, sélectionnez l’option "Mémoriser la valeur" dans l’onglet
"Détail" de la fenêtre de description du champ.
Remarque : l’utilisateur peut également mémoriser la valeur d’un champ grâce au menu contextuel
du champ.
Sur la fenêtre :
1. Faites un clic droit et sélectionnez l'option "Description".
2. Sélectionnez l'onglet "Image". Vous pouvez choisir une image et son mode d'affichage.
Sur la fenêtre :
1. Faites un clic droit et sélectionnez l'option "Description".
2. Sélectionnez l'onglet "Style".
3. Définissez l’opacité de la fenêtre grâce au potentiomètre.
Il est également possible de définir l’opacité d’une fenêtre grâce à la propriété W-Langage Opacité.
451
Environnement
Pour visualiser l’élément correspondant au traitement en cours, cliquez sur l’icone . La fenêtre
contenant l’élément voulu s’affiche.
Le code source en cours peut être imprimé directement en cliquant sur l'icone dans la barre
d'icones de l'éditeur ou en sélectionnant l'option "Fichier .. Imprimer le dossier", ou la combinaison
de touches CTRL P.
Le dossier d'analyse peut être imprimé directement en cliquant sur l'icone dans la barre d'ico-
nes de l'éditeur ou en sélectionnant l'option "Fichier .. Imprimer le dossier", ou la combinaison de
touches CTRL P.
Le dossier complet du projet peut être imprimé en sélectionnant l'option "Projet .. Imprimer le dos-
sier du projet".
Cette manipulation comprend de nombreuses étapes. Pour plus de détails, consultez l’aide ligne
(mot-clé : "Créer gabarit"). Mais n’oubliez pas : de nombreux gabarits sont disponibles en standard
avec WinDev !
Les fonctions de recherche ou de remplacement dans le code sont accessibles depuis le menu de
WinDev (choix "Edition .. Rechercher" ou "Edition .. Remplacer") ou dans le volet "Recherche" en cli-
452
quant sur :
Vous pouvez accéder à la recherche à tout moment en appuyant sur les touches [CTRL]+[F].
La liste des tâches d'un projet peut être consultée et mise à jour en temps réel dans le volet "Liste
des tâches" de l'éditeur.
4 Pour ajouter directement une nouvelle tâche, faites un clic droit sur la liste des tâches et sélec-
tionnez "Créer une nouvelle Tâche".
Astuce
Cette liste des tâches est liée au projet en cours. Lors du développement en groupe, tous les déve-
loppeurs peuvent consulter et mettre à jour cette liste.
Les éléments d'un projet contenus dans un projet sont : fenêtres, états, requêtes, …
4 Pour visualiser les éléments d'un projet, sélectionnez l’option "Projet .. Liste des éléments du
projet".
Astuce
453
Question Comment visualiser et changer l’ordre de navigation des champs dans une
fenêtre ?
L'ordre de navigation des champs est défini par l'ordre de création des champs dans la fenêtre.
La touche de fonction [F5] permet de visualiser l'ordre en cours.
4 1.
Pour modifier l'ordre de navigation :
Sélectionnez l'option "Fenêtres .. Ordre de navigation .. Editer".
2. Dans la fenêtre affichée, modifiez l'ordre de saisie des champs.
Dans le menu de WinDev, sélectionnez l'option "Projet .. Description du projet" puis sélectionnez
l'onglet "Langue". Dans la fenêtre affichée, cochez la ou les nouvelles langues à gérer.
Les perso-dossiers permettent de ranger des éléments du projet. Vous pouvez par exemple créer
un perso-dossier pour conserver tout ce qui se rapporte à la gestion des fournisseurs. Le nombre
de perso-dossiers n’est pas limité et un élément peut être commun à plusieurs perso-dossiers.
4 1.
Pour créer un perso-dossier :
Affichez le menu contextuel du graphe du projet (Clic droit) et sélectionnez l’option "Nouveau
Perso-Dossier".
2. Indiquez le nom du perso-dossier et validez.
3. Déplacez par "Drag and Drop" les différents éléments dans le perso-dossier. Ce déplacement
peut être effectué directement dans le graphe du projet, ou depuis le volet "Projet".
454
Divers
La prise en main est donc facilitée. WinDev pour le Back Office, WebDev pour le Front Office.
Consultez notre service commercial pour obtenir de plus amples informations sur WebDev.
Question Comment créer une application pour Pocket PC reliée à vos données ?
Partie 11 : Questions / Réponses
WinDev Mobile est un AGL dédié au monde des Mobiles (Pockets PC, Smartphones, ...).
Avec un existant sous WinDev, il est très facile de créer une application pour Pocket PC accédant
aux mêmes données. WinDev Mobile permet de créer rapidement cette application.
La philosophie de WinDev et WinDev Mobile est identique, l’ergonomie générale des deux produits
est très proche.
OLE Automation permet d'utiliser directement les fonctions de Word et Excel. Par exemple pour pilo-
ter Word depuis WinDev, il suffit de déclarer :
MonWord est un objet OLE "Word.Application"
455
Et ensuite toutes les fonctions internes à Word sont pilotables en W-Langage. Exemple : la fonction
"Enregistrer Sous" :
MonWord >ActiveDocument>>SaveAs("C:\temp\MonDocument.doc")
Intégrez dans votre fenêtre le superchamp "Capture d’écran" disponible dans le volet "Assistant
Catalogue". Vous n’avez même pas besoin de saisir de code !
Les fonctions RegistreLit, RegistreEcrit permettent de lire et écrire dans la base de registres.
Consultez l'aide en ligne pour obtenir la syntaxe détaillée de ces fonctions et des autres fonctions
456
Les fonctions IniLit, IniEcrit permettent de lire et d'écrire dans un fichier INI.
Consultez l'aide en ligne pour obtenir la syntaxe détaillée de ces 2 fonctions (mots-clés : "IniLit",
"IniEcrit").
Lors de la création de l’installation (option "Atelier .. Créer la procédure d’installation"), vous avez la
possibilité de choisir différents supports d’installation. En sélectionnant l’option "CD-ROM", WinDev
créera un dossier dans lequel tous les fichiers nécessaires à une installation par CD-ROM seront
créés (fichier AUTORUN, fichiers d’installation, ...).
Vous n’avez plus alors qu’à graver le contenu de ce dossier complet sur un CD-ROM vierge pour dis-
tribuer votre application !
L'exécutable de votre projet peut être créé en sélectionnant l'option "Atelier .. Générer l'exécutable
Windows".
457
Lorsque l’exécutable a été réalisé (option "Atelier .. Créer l’exécutable"), le répertoire EXE présent
dans le répertoire de votre projet contient tous les éléments permettant de faire fonctionner votre
application.
Pour préparer une installation de votre application :
1. Sélectionnez l'option "Atelier .. Créer la procédure d’installation". L'assistant de préparation
d'une installation démarre.
2. Suivez les instructions à l’écran.
L'icone qui est associé à votre exécutable peut être défini lors de la création de l'exécutable. Cet
icone doit être au format ICO.
Notes
L'image de lancement qui est associée à votre exécutable peut être définie lors de la création de
l'exécutable. Cet image doit être à un format standard reconnu par WinDev (BMP, WMF, GIF, JPEG,
TIFF, …)
Un catalogue d'images prédéfinies est fourni en standard avec WinDev. Ce catalogue est accessi-
ble lors de la sélection de l'image.
WinDev offre la possibilité de personnaliser directement cette image lors de la création de l’exécu-
table. Vous pouvez ainsi écrire le texte de votre choix (avec la mise en forme voulue) sur cette
image.
Question Comment mettre l’icone de mon application en bas à droite dans la barre de
tâches ?
458
Consultez l'aide en ligne pour la syntaxe détaillée de cette fonction (mot-clé : "Créer, Un raccourci").
Consultez l'aide en ligne pour la syntaxe détaillée de cette fonction (mot-clé : "Framework").
Partie 11 : Questions / Réponses
459
La fonction fRep avec l’utilisation de la constante FRFichier permet de lister les fichiers d’un réper-
toire.
Pour une utilisation avancée, la fonction fListeFichier permet de récupérer la liste des fichiers d'un
répertoire ou de plusieurs répertoires en cascade.
Consultez l'aide en ligne de cette fonction (mot-clé : "fListeFichier").
La fonction fDisqueInfo permet de connaître le type d'un disque (réseau, CD ROM, Disquette, …).
Consultez l'aide en ligne de cette fonction (mot-clé : "fDisqueInfo").
460
FIN
FIN
fFerme(NumeroFichier)
Pour plus de détails sur ces fonctions, consultez l’aide en ligne (mot-clé : "Lecture dans un fichier
externe").
Pour permettre l'enregistrement de données confidentielles (numéro de compte, mot de passe, ...),
WinDev dispose d'un ensemble de fonctions de cryptage / décryprage utilisables :
• sur du texte (fonctions Crypte et Décrypte)
• sur un fichier quelconque (fonctions fCrypte et fDécrypte)
Ces fonctions sont disponibles en plus de la possibilité de crypter les fichiers d'une base de don-
nées Hyper File (point abordé dans la leçon “Cryptage de données”, page 197).
Partie 11 : Questions / Réponses
461
Tables
La clé de parcours dans un champ table correspond à la rubrique qui sert d'argument de tri pour
les lignes de la table.
4 1.
Pour modifier la clé de parcours d'une table reliée à un fichier :
Faites un clic droit sur la table fichier et sélectionnez "Description".
2. Cliquez sur l'onglet "Contenu".
3. Sélectionnez dans la combo "Rubrique de parcours" la rubrique du fichier qui servira de clé
de parcours.
Notes
Le contenu d'un champ Table peut être imprimé à l'aide du bouton "Etat sur table". Ce bouton est
Un état possédant la même structure que la table est créé. Il ne vous reste plus qu'à sauvegarder
l'état et à le tester.
La rubrique mémorisée dans un champ table fichier correspond à la valeur récupérée dans la table
pour la ligne sélectionnée.
4 1.
Pour modifier la rubrique mémorisée d'une table reliée à un fichier :
Faites un clic droit sur la table fichier et sélectionnez "Description".
2. Cliquez sur l'onglet "Contenu".
3. Sélectionnez dans la combo "Rubrique mémorisée" la rubrique du fichier qui pourra être
462
récupérée.
Astuce
La rubrique mémorisée d'une table peut être utilisée pour relier en cascade deux
tables fichier.
Notes
Le contenu d'une table peut être récupéré dans Excel en réalisant la manipulation suivante :
1. En exécution, faites un clic droit dans la table.
2. Sélectionnez l'option "Exporter la table vers Excel".
3. Saisissez un nom de fichier et validez.
Un fichier Excel ayant le nom que vous avez saisi sera créé et contiendra les données de la table.
Ce fichier pourra être ensuite ouvert dans Excel.
Le contenu d'une table peut être récupéré dans Word en réalisant la manipulation suivante :
1. En exécution, faites un clic droit dans la table.
2. Sélectionnez l'option "Exporter la table vers Word".
3. Saisissez un nom de fichier et validez.
Un fichier Word ayant le nom saisi sera créé et contiendra les données de la table. Ce fichier pourra
être ensuite ouvert dans Word.
Question Comment exporter les données d’une table vers un fichier au format XML ?
Le contenu d'une table peut être exporté dans un fichier au format XML en réalisant la manipula-
tion suivante :
1. En exécution, faites un clic droit dans la table.
2. Sélectionnez l'option "Exporter la table vers XML".
3. Saisissez un nom de fichier et validez. Un fichier ayant le nom saisi sera créé et contiendra
les données de la table sauvegardé au format XML.
463
Hyper File
Les contraintes d'intégrité sont définies dans l'analyse lors de la création des liaisons entre les
fichiers.
Chaque contrainte est nommée. Par défaut, toutes les contraintes sont activées.
La gestion de la désactivation d'une contrainte se fait à l'aide de la fonction HGèreIntégrité. Vous
pouvez utiliser cette fonction avant et après certains traitements spécifiques ou bien l’utiliser dans
le code d’initialisation de vos fenêtres ou projets.
Consultez l'aide en ligne pour la syntaxe détaillée de cette fonction (mot-clé : "Intégrité").
Question Comment gérer une erreur de doublons lors d’une écriture dans un fichier ?
Par défaut, si une erreur de doublons est rencontrée lors d’une écriture dans un fichier (fonctions
HAjoute et HModifie), une fenêtre de gestion des erreurs s’affiche automatiquement. Cette fenêtre
permet à l’utilisateur de modifier les valeurs saisies.
Pour savoir par programmation si une erreur de doublons est survenue et pour la traiter, il suffit de
tester la fonction HErreurDoublon après l’utilisation des fonctions HAjoute et HModifie.
464
Exemple de code :
HModifie(CLIENT)
SI HErreurDoublon() ALORS
Erreur("Impossible de modifier le client",...
"Erreur de doublons")
FIN
Rappel : Le moteur Hyper File propose en standard une gestion automatique des doublons. En cas
d’erreur, une fenêtre est affichée, et l’utilisateur peut corriger sa saisie.
Question Comment gérer une erreur d’intégrité lors d’une écriture ou d’une suppres-
sion dans un fichier ?
Par défaut, si une erreur d’intégrité est rencontrée lors d’une écriture dans un fichier (fonctions
HAjoute et HModifie) ou d’une suppression (HSupprime), une fenêtre de gestion des erreurs s’affi-
che automatiquement.
Pour savoir par programmation si une erreur d’intégrité est survenue et pour la traiter, il suffit de
tester la fonction HErreurIntégrité après l’utilisation des fonctions HAjoute , HModifie, et HSup-
prime.
Exemple de code :
HSupprime(CLIENT)
SI HErreurIntégrité() ALORS
Partie 11 : Questions / Réponses
465
Exemple 2. On charge les noms de clients par initiales (classement de type agenda) :
// Parcours du fichier
HlitPremier(CLIENT, NOMCLI)
TANTQUE HEnDehors() = Faux
// Ajout dans l'arbre
ArbreAjoute(ChampArbre,Gauche(Client.NomCli,1)+TAB+Client.Nom-
Cli)
HlitSuivant(CLIENT,NOMCLI)
FIN
Exemple 3. Avec une syntaxe plus courte (utilisation de l'opérateur POUR TOUT) :
// Parcours du fichier
POUR TOUT CLIENT SUR NOMCLI
// Ajout dans l'arbre
Il faut utiliser la fonction HConstruitValClé avant d’amorcer une recherche avec HFiltre ou HLitRe-
cherche.
Exemple :
// Construction de la clé composée
sValRech est une chaîne = HConstruitValClé(CLIENT,NOM_PRENOM, ...
"MOULIN","Françoise")
Pour plus de détails sur la fonction HConstruitValClé, consultez l’aide en ligne (mot-clé :
"HConstruitValClé").
466
Requêtes
Pour optimiser la vitesse d’exécution de la requête en cours, sélectionnez l’option "Requête .. Opti-
miser la requête". La fenêtre d’optimisation d’une requête s’affiche et propose les différentes modi-
fications possibles à effectuer dans l’analyse.
Attention : L’ajout d’un nombre important de clés composées dans l’analyse augmente la taille des
fichiers d’index et peut ralentir les accès aux fichiers de données.
Remarque : Cette option est disponible uniquement si les conditions suivantes sont réunies :
• le "Live Data" est activé (option "Projet .. Description du projet .. Live Data"). Pour plus de
détails, consultez l’aide en ligne (mot-clés : "Live Data").
• les fichiers de données sont présents dans le répertoire de test du projet (option "Projet ..
Description du projet .. Fichiers"). Pour plus de détails, consultez l’aide en ligne (mot-clés :
Partie 11 : Questions / Réponses
"Tester, Projet").
4 1.
Pour ajouter ou modifier une condition dans une requête :
Sélectionnez et ouvrez la requête à modifier.
2. Faites un clic droit sur la requête et sélectionnez "Description de la requête".
3. Sélectionnez la rubrique sur laquelle une condition doit être modifiée.
4. Cliquez sur le bouton "Conditions de sélection" et sélectionnez l’option "Modifier la condi-
tion".
Rappel : Lors de la définition d'une condition, vous pouvez faire référence à une valeur (constante
dans la requête) ou à un paramètre (valeur passée en paramètre lors de l'appel à la requête).
4 1.
Pour ajouter ou modifier un tri dans une requête :
Sélectionnez et ouvrez la requête à modifier.
2. Faites un clic droit sur la requête et sélectionnez "Description de la requête".
3. Faites un clic droit sur la rubrique voulue, sélectionnez "Trier la rubrique ..." et choisissez
l’opération à effectuer.
467
Rappel : Si vous cliquez sur la flèche rouge, vous changez le sens de tri.
Algorithme :
// Exécution de la requête
HExécuteRequête(NomRequête, hRequêteDefaut,...)
// Parcours de la requête
HLitPremier(NomRequête)
TANTQUE HEnDehors() = Faux
// Ajout dans l'arbre
ArbreAjoute(NomChampArbre, Racine+TAB+Branche+TAB+Feuille)
HLitSuivant(NomRequête)
FIN
Exemple 1. Avec une syntaxe plus courte (utilisation de l'opérateur POUR TOUT) :
HExécuteRequêteSQL (RequêteClient, hRequêteDefaut)
POUR TOUT RequêteClient
ArbreAjoute(ChampArbre,Gauche(RequêteClient.NomCli,1) + ...
TAB + RequêteClient.NomCli)
FIN
Pour passer des paramètres à une requête paramétrée utilisée dans une fenêtre ou dans un
champ (liste, combo, table ...) , le W-Langage offre deux possibilités :
• soit passer les paramètres directement dans la fonction W-Langage HExécuteRequête
• soit utiliser la notation <Nom de la requête>.<Nom du paramètre> , puis la fonction HExécuteRe-
quête .
468
Attention :
• Le nom du paramètre doit être le nom spécifié lors de la création de la requête sous l'éditeur de
requête. Ce nom doit être différent d'un nom de rubrique.
• Il n'est pas possible d'utiliser d' opérateurs d'indirection ou la compilation dynamique (fonction
Compile ) avec cette syntaxe.
• A chaque exécution de la requête avec la fonction HExécuteRequête , les paramètres sont ré-ini-
tialisés (remis à 0).
• Si au moins un paramètre est spécifié dans la fonction HExécuteRequête , tous les paramètres
spécifiés précédemment seront ignorés.
• La valeur du paramètre peut correspondre à NULL.
• Si un des paramètres n'est pas précisé, la condition correspondante ne sera pas prise en
compte.
Pour plus de détails, consultez l’aide en ligne (mot-clé : "Requête paramétrée, Passer des paramè-
tres à une requête")
469
Impression
Le résultat d'une impression peut être re-dirigé à l'écran, sur une imprimante (ou un fax) ou dans un
fichier.
Si vous optez pour la re-direction vers un fichier, le format de ce fichier peut être RTF, ASCII, XML,
HTML ou PDF.
La fonction iAperçu associée au paramètre iPDF permet de re-diriger le résultat d'une impression
dans un fichier au format PDF :
iAperçu(iPDF)
Utilisez la fonction iParamètrePDF pour fixer les options de protection du fichier PDF généré.
Communication
Question Puis-je utiliser des assemblages .NET dans une application WinDev ?
WinDev permet de :
470
WinDev permet de simplifier l'envoi de fax en exploitant les possibilités offertes par le serveur de
fax de Windows (depuis les versions 2000 et XP).
Pour que ce type de manipulation soit le plus simple possible à mettre en oeuvre, WinDev permet
de générer un fax à partir de n'importe quel état.
Il suffit d'indiquer par la fonction iAperçu que l'on souhaite envoyer l’état par fax (paramètre iFax).
Pour que l'envoi de l'état commence, une seule fonction : iImprimeEtat !
Il devient ainsi possible d'envoyer par fax à vos clients, un duplicata de facture en utilisant les états
existants : que de temps gagné !
Consultez l'exemple "WD Fax" pour plus d'informations sur le fonctionnement de ces fonctions.
Consultez l’aide en ligne (mot-clé : "Fax") pour plus de détails sur l’utilisation de ces fonctions.
Partie 11 : Questions / Réponses
Question Est-il possible d'accéder aux données contenues dans mon Palm Pilot ?
WinDev permet d'accéder très simplement aux données suivantes d'un Palm Pilot :
• Carnet d'adresse
• Agenda
• Liste des tâches
• Bloc Notes
Pour plus d'informations, consultez l'exemple "WD Palm" livré avec WinDev ou reportez-vous à l'aide
concernant les fonctions PALM*.
L'exemple "WD PALM" livré avec WinDev illustre comment effectuer une synchronisation entre un
programme écrit avec WinDev et un Palm.
Vous trouverez dans l'aide en ligne la syntaxe détaillée des fonctions du W-Langage pour les dialo-
gues avec un Palm (mot-clé : "Palm Pilot, Fonctions W-Langage").
471
L'exemple "WD POP3" livré avec WinDev présente comment envoyer ou recevoir des messages.
Vous pouvez gérer l'envoi et la réception des messages en utilisant les protocoles POP3/SMTP ou
au travers de MAPI4 (Microsoft Exchange).
L'exemple "WD Outlook" livré avec WinDev illustre comment piloter Microsoft Outlook depuis une
application écrite avec WinDev.
472
Ports
Question Comment lire les données envoyées par un lecteur de carte magnétique ?
Les fonction de gestion des ports parallèles sont les mêmes que les fonctions de gestion des ports
série.
4 Utilisez les fonctions W-Langage sOuvre, sLit, sEcrit, sFerme, …
Vous trouverez dans l'aide en ligne la syntaxe de ces fonctions (mot-clé : "Série (port)").
473
CONCLUSION
Le cours est maintenant terminé !
Ce cours a abordé un ensemble de sujets, mais pas la totalité des fonctionnalités de WinDev, loin
s’en faut !
Vous êtes maintenant familiarisé avec les principaux concepts.
Nous vous conseillons de consacrer une journée supplémentaire à explorer les différents choix de
menu de WinDev, pour chacun des modules.
Explorez également les exemples livrés avec WinDev : certains sont simples et ne traitent que d’un
sujet, d’autres sont très complets. Ces exemples vous montreront les différentes facettes de Win-
Dev. La lecture du code source sera également instructive en général.
Faute de place, nous n’avons pas pu aborder tous les sujets (il y en des centaines, voire des
milliers !). WinDev offre de nombreuses possibilités non abordées ou non approfondies dans ce
cours :
• groupware utilisateur
• fonctions sockets, HTTP, téléphonie
• création de gabarits ...
• états imbriqués, requêtes paramétrées ...
• compilation dynamique, appels de DLL, langages externes ...
Pour plus de détails sur toutes ces possibilités, n’hésitez pas à consulter l’aide en ligne.
Nous vous souhaitons de bons développements, avec WinDev 10, AGL n°1 en France !
Conclusion
474
ANNEXE
Glossaire des mots principaux
Un rapide rappel de vocabulaire.
Fenêtre Une fenêtre s'appelle également "boîte de dialogue". Nous utiliserons indifférem-
ment les termes "boîte de dialogue", "fenêtre"; que les puristes veuillent bien nous
en excuser.
Une fenêtre peut également être appelée écran.
Bouton Un bouton (texte ou graphique) est une zone matérialisée par un "rectangle" sur
laquelle on peut cliquer et qui déclenche une action. Dans les barres d'icones, on
parle d'icones plutôt que de boutons. Un bouton s’appelle également un "contrôle".
A propos de l'orthographe du mot icone : on parle de un ou une icone, mais sans "^"
sur le "o" (d'après le dictionnaire "le petit Robert").
Projet Un "projet" est un ensemble de fenêtres, d’états, .... Un projet peut faire appel à une
"analyse" réalisée à l'aide de l'éditeur d'analyses.
Analyse Une "analyse" est un ensemble de fichiers (ou tables) créés dans le but de réaliser
une base de données.
Application Une "application" est un ensemble de programmes plus ou moins liés réalisant une
gestion particulière.
Champ / Rubrique Nous emploierons le terme de "champ" pour les zones de l'écran, et le terme de
"rubrique" pour les zones de fichier. Nous parlerons donc du champ "NOM" (qui se
trouve dans la fenêtre) et de la rubrique "NOM" (qui se trouve dans un fichier); il peut
de plus exister une variable de programme "NOM".
Table Une table est un champ permettant de visualiser le contenu d’un fichier ou d’une
zone mémoire sous forme de tableau. Une table s’appelle également "browse" ou
"feuille de données".
Combo / Le terme "combo" ou "combo box" correspond à une "liste déroulante".
Liste déroulante
Barre de défilement / Une "barre de défilement" sera également appelée "ascenseur".
Ascenseur
Sélecteur / Un "sélecteur" peut parfois être appelé "case d'options".
Case d’options
Interrupteur / Un "interrupteur" peut être aussi appelé "case à cocher".
Case à cocher
Fichier Un fichier est parfois appelé une "table". Nous conserverons le terme "table" pour un
objet permettant de visualiser le contenu d'un fichier ou d'une zone mémoire sous
Annexe