Cours gratuits » Cours informatique » Cours programmation » Cours visual basic » Formation de base pour s'initier au langage Visual Basic

Formation de base pour s'initier au langage Visual Basic

Problème à signaler:

Télécharger



★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

VISUAL BASIC 6

DESS IAIE, ISTIA, UniversitØ d Angers

2003/2004, 30h Jean-Louis Boimond

1        INTRODUCTION  

2        ENVIRONNEMENT DE DÉVELOPPEMENT INTÉGRÉ 

2.1     PrØsentation de l Environnement de DØveloppement IntØgrØ (EDI) 

2.2     Un premier exemple : Affichage d une ligne de texte

3        INTRODUCTION À LA PROGRAMMATION DE VISUAL BASIC 

3.1     La programmation orientØe objet 

3.2     Programmation ØvØnementielle 

3.3     Deux exemples 

3.4   &nb

sp; R?gles de prioritØ des opØrateurs arithmØtiques 

3.5     OpØrateurs de comparaison 

4        STRUCTURES DE CONTRÔLE

4.1     Structures de sØlection 

4.2     Structures de rØpØtition 

4.3     OpØrateurs logiques 

4.4     Types de donnØes 

5        PROCÉDURES ET FONCTIONS

5.1     Introduction 

5.2     Les modules 

5.3     Les procØdures Sub 

5.4     Les procØdures Function 

5.5     Appel par valeur, appel par rØfØrence 

5.6     Exit Sub et Exit Function 

5.7     DurØe de vie d une variable 

5.8     PortØe d une variable, d une procØdure, d une fonction 

5.9     Les constantes 

5.10    Param?tres optionnels 

5.11    Fonctions mathØmatiques de Visual Basic 

5.12    Module standard 

6        LES TABLEAUX  

6.1     Leurs dØclarations 

6.2     Les tableaux dynamiques 

6.3     Passage de tableaux dans les procØdures 

7        LES CHAÎNES 

7.1     ConcatØnation avec & (esperluette) et + 

7.2     Comparaison de cha nes 

7.3     Manipulation de caract?res dans une cha ne 

7.4     Left$, Right$, InStr, InStrRev, Split, Join 

7.5     LTrim$, RTrim$ et Trim$ 

7.6     String$ et Space$ 

7.7     Autres fonctions de traitement de cha nes 

7.8     Fonctions de conversion 

8        INTERFACE UTILISATEUR GRAPHIQUE : LES BASES 

8.1     Le contr le Label

8.2     Le contr le TextBox 

8.3     Le contr le CommandButton

8.4     Les contr les ListBox, ComboBox 

8.5     Les contr les Frame, CheckBox, OptionButton 

8.6     Les menus 

8.7     La fonction MsgBox 

8.8     Le contr le Timer 

9        BASE DE DONNÉES : ACCÈS 

9.1     Introduction de l’ADO Data Control 6.0 et du DataGrid Control 6.0   

9.2     Survol du langage SQL    

9.3     Description de l’ADO Data Control 6.0 et du DataGrid Control 6.0     

9.4     L’objet Recordset    

10       MULTIPLE DOCUMENT INTERFACE    

11       RÉSEAUX, INTERNET ET WEB 

11.1    Le contr le WebBrowser    

11.2    Le contr le Internet Transfer     

11.3    Le contr le Winsock     

12       PROGRAMMATION ORIENTÉE OBJET 

12.1    Les modules de classe     

12.2    Acc?s aux membres d’une classe : Public, Private     

12.3    Composition : Objets en tant que variables d’instance d’autres classes     

12.4    EvØnements et classes    

________________________________________________

Annexes :

A  : Code de compilation

B   : Types de projet

C   : ElØments clØs de Windows : FenŒtres, ØvØnements et messages       D : Description du mod?le ØvØnementiel

            E : Description (notamment) des param?tres de MoveComplete       F : Les types de variables objet

                         G : Traitement de fichiers avec d anciennes instructions et fonctions d E/S de fichiers

Bibliographies :

1)  MSDN Library Visual Studio 6.0

2)  Visual Basic 6: How to Program, H.M. Deitel, P.J. Deitel, T.R. Nieto, Prentice Hall, Upper Saddle River, New Jersey 07458, 1015 pages, ) Visual Basic 6, Peter Wright, Eyrolles, 767 pages,

4)  Visual Basic 6, M. Franke, Micro Application, Paris, 493 pages,

5)  Visual Basic 6 : Le guide du programmeur, G. Frantz, Edition OEM, 1272 pages,

6)  Programmer avec Visual Basic, Alain Godon, cours M2AI - ISTIA, 2001/2002, 28 pages

7)  Visual Basic version 5, Roland Guihur, oct. 1999, 47 pages

8)  T.P. de Visual Basic, Serge TahØ, Innovation - ISTIA

________________________________________________

1        INTRODUCTION 

Visual Basic s est dØveloppØ  partir du langage BASIC (Beginner s All-purpose Symbolic Instruction Code, Larousse : " Langage de programmation con u pour l utilisation interactive de terminaux ou de micro-ordinateurs ", 1960). Le but du langage BASIC Øtait d aider les gens  apprendre la programmation. Son utilisation tr?s rØpandue conduisit  de nombreuses amØliorations. Avec le dØveloppement (1980-1990) de l interface utilisateur graphique (Graphical User Interface - GUI) de Windows Microsoft, BASIC a naturellement ØvoluØ pour donner lieu  Visual Basic (1991). Depuis, plusieurs versions ont ØtØ proposØes, Visual Basic 6 est apparue en 1998.

Visual Basic est un langage de programmation existant actuellement en trois versions (Learning, Professional, Entreprise). Les programmes (aussi appelØes applications) sont crØØs dans un environnement de dØveloppement intØgrØ (Integrated Development Environment - IDE), ceci dans le but de crØer, exØcuter et dØboguer les programmes d une mani?re efficace. Ce langage est rØputØ pour permettre un dØveloppement rapide d applications. Outre une interface utilisateur graphique, il dispose de caractØristiques telles que la manipulation d ØvØnements, un acc?s  Win32 API, la programmation orientØe objet, la gestion d erreurs, la programmation structurØe. C’est un langage interprØtØ, notons que les Øditions Professional et Entreprise permettent une compilation en code natif (code machine) (voir annexe A pour plus de dØtails).

2        ENVIRONNEMENT DE DÉVELOPPEMENT INTÉGRÉ (EDI) 

L environnement de dØveloppement intØgrØ de Visual Basic permet de crØer, exØcuter et dØboguer des programmes Windows dans une seule application ( savoir Visual Basic).

2.1       Présentation de l’Environnement de Développement Intégré (EDI) 

Au dØmarrage de Visual Basic, la bo te de dialogue suivante, intitulØe Nouveau projet (cf. barre de titre), s affiche. Elle permet de choisir le type de projet que l on souhaite crØer. 

 

Double-cliquer sur l option EXE Standard (surlignØe par dØfaut) de l onglet Nouveau afin de crØer un projet (ensemble de fichiers permettant de crØer une application Windows). Certaines options de cette bo te de dialogue sont bri?vement dØcrites en annexe B. L interface de l EDI de Visual Basic s affiche (voir la recopie d Øcran dans la figure suivante). 

 

Cet environnement, situØ dans une fenŒtre intitulØe Projet1 - Microsoft Visual Basic [création] (cf. barre de titre), est formØ d une barre de menu, d une barre de contrôles et de plusieurs fenŒtres.

!  Le tableau suivant rØcapitule les menus accessibles  partir de la barre de menu, situØe en haut de l Øcran. En dessous sont situØs, dans une barre d’outils, les raccourcis graphiques (ic nes) reprØsentant les commandes les plus courantes.

Menu

Description

Fichier

Contient des options pour ouvrir, fermer, Øcrire,     des projets.

Edition

Contient des options telles que couper, copier, coller, etc.

Affichage

Contient des options concernant l EDI.

Projet

Contient des options pour ajouter au projet des particularitØs telles que des feuilles.

Format

Contient des options pour aligner et verrouiller les contr les d une feuille.

DØbogage

Contient des options pour dØboguer le programme.

ExØcution

Contient des options pour exØcuter, stopper,     un programme.

RequŒte

Contient des options pour manipuler des donnØes rØcupØrØes d une base de donnØes.

SchØma

Contient des options pour Øditer des bases de donnØes.

Outils

Contient des options pour particulariser l EDI.

ComplØments

Contient des options pour utiliser, installer et dØsinstaller des complØments (programmes visant  augmenter la performance de Visual Basic).

FenŒtres

Contient des options pour disposer les fenŒtres  l Øcran.

Aide

Contient des options pour obtenir de l aide.

!  La barre de contrôles, situØe dans la partie gauche de l Øcran,contient des contr les permettant de rØaliser l Interface Utilisateur Graphique (IUG) (i.e., la partie de la feuille visible par l utilisateur). Ces derniers permettent une programmation accØlØrØe. La figure et le tableau suivants rØsument les contr les contenus dans cette barre. 

Contrôle

Description

Curseur

Permet d interagir avec les contr les de la feuille (en fait, ce n est pas un contr le).

PictureBox (zone d image)

Permet l affichage d un fichier image (bmp, ico, wmf,      ).

Label (Øtiquette)

Permet l affichage d un texte non modifiable directement par l utilisateur.

TextBox (zone de saisie)

Permet  l utilisateur d entrer du texte.

Frame (cadre)

Permet de regrouper d autres contr les tels que des cases  option.

CommandButton (bouton)

Ce contr le est reprØsentØ par un bouton que l utilisateur peut presser, ou cliquer, pour exØcuter une action sous-jacente.

CheckBox (case  cocher)

Permet de fournir un bouton de choix (checked ou unchecked).

OptionButton (case  option)

Les cases  option sont utilisØes en groupe (dans le mŒme cadre), sachant que seulement une case peut Œtre sØlectionnØe (True)  la fois.

ListBox (liste)

Permet l affichage de diffØrents items (ØlØments).

ComboBox (liste combinØe)

Permet de combiner les fonctionnalitØs des zones de saisie et des listes.

HScrollBar

Une barre de dØfilement horizontale.

VScrollBar

Une barre de dØfilement verticale.

Timer (horloge)

Permet la rØpØtitivitØ de t ches (ce contr le est non visible pour l utilisateur).

DriveListBox

Permet un acc?s aux diffØrents disques du syst?me.

DirListBox

Permet un acc?s  des rØpertoires.

FileListBox

Permet d accØder aux fichiers d un rØpertoire.

Shape

Permet de dessiner des cercles, des rectangles, des carrØs ou des ellipses.

Line

Permet de dessiner des lignes.

Image (dessin)

Similaire au contr le PictureBox avec des capacitØs moindres.

Data

Permet la connexion  une base de donnØes.

OLE

Permet d interagir avec d autres applications Windows.

!  L’EDI d’un projet EXE Standard contient les fenŒtre suivantes :

- Projet1 – Form1 (Form) - Présentation des feuilles - Propriétés – Form1 - Projet – Projet1

•   La fenŒtre Projet1 – Form1 (Form) contient une feuille (en anglais form) vierge nommØe, par dØfaut, Form1, dans laquelle le programme de l IUG sera con u. L IUG est la partie visible du programme (boutons, cases  cocher, cases  option, zones de saisie, etc.), elle permet : -  un utilisateur de fournir des donnØes (appelØes entrées) au programme, - au programme de restituer des rØsultats (appelØs sorties) l utilisateur.

•   La fenŒtre Présentation des feuilles (en anglais Form Layout)permet de spØcifier -  l aide de la souris - la position souhaitØe de la feuille (dans le cas prØsent Form1) sur l Øcran lors de l exØcution du programme.

•   La fenŒtre Propriétés – Form1 dØcrit les propriØtØs (taille, position, couleur, etc.) d une feuille ou d un contr le. Dans le cas prØsent, sont listØes les propriØtØs liØes  la feuille Form1. Chaque type de contr le a son propre ensemble de propriØtØs. Certaines propriØtØs, telles que Height et Width sont communes aux feuilles et aux contr les, alors que d autres propriØtØs sont uniques  une feuille, ou un contr le.

•   La fenŒtre Projet – Projet1 est l’explorateur de projets, elle regroupe par type les diffØrents fichiers composant le projet en cours. La barre de menu de cette fenŒtre comporte 3 boutons : Code afin de visualiser la fenŒtre contenant le code du programme, Afficher l’objet pour faire appara tre la feuille, Basculer les dossiers cache, ou montre, le dossier Feuilles. Par dØfaut, le projet a pour nom Projet1 et est constituØ d une seule feuille, nommØe Form1.

2.2       Un premier exemple : Affichage d’une ligne de texte 

RØalisons un programme qui Øcrit le texte " Premier exemple "  l’Øcran. Ce programme, de part sa simplicitØ, se fait sans Øcrire une seule ligne de code. En fait, nous allons utiliser les techniques de la programmation visuelle dans laquelle,  travers diffØrentes manipulations (tel qu un clic de souris), vont Œtre fournies les informations suffisantes  Visual Basic pour qu il puisse automatiquement gØnØrer le code de notre programme.

Voici la dØmarche. Nous allons ajouter un contr le Label sur l IUG d une feuille : Le fait de doublecliquer sur ce contr le fait appara tre un contr le Label, nommØ de mani?re standard Label1, au centre de l IUG de la feuille. L utilisation de la souris permet de le positionner et de le dimensionner  volontØ (la grille, visible en mode création, permet un alignement des contr les, cf. onglet Général du menu Outils |

Options).

La propriØtØ Caption du contr le Label1, visible dans la fenŒtre des propriØtØs (fenŒtre Propriétés – Label1), dØtermine le texte affichØ par ce contr le. Il suffit donc de remplacer le texte " Label1 ", mis par dØfaut, par celui souhaitØ ( savoir " Premier exemple ").

Remarques :

-   La propriØtØ Caption ne doit pas Œtre confondue avec la propriØtØ Name du contr le, bien que leurs contenus soient par dØfaut les mŒmes !

-   Le fait de prØfixer le Name de chaque Label avec les lettres (minuscules) lbl permet une meilleure identification des contr les Label. Il en sera de mŒme pour les autres contr les. Cette convention, largement adoptØe, permet une meilleure " lisibilitØ " du programme.

Attention : Avant de tenter une exØcution, il est prudent de sauvegarder le projet (cf. menu Fichier | Enregistrer le projet sous …). En ce qui concerne notre exemple, la sauvegarde du projet, nommØ Projet1 par dØfaut, donne lieu  la crØation de deux fichiers (texte) :

-   l’un, avec l’extension .frm, pour mØmoriser les propriØtØs de la feuille, nommØe Form1 par dØfaut. En fait,  chaque ØlØment du projet (feuille ou module) va correspondre un fichier (.frm ou .bas).

-   l’autre, avec l’extension .vbp, pour mØmoriser les param?tres des variables d’environnement et des noms de fichiers des ØlØments constituant le projet.

Jusqu’ prØsent, nous avons travaillØ dans le mode création de l’EDI (i.e., le programme n’est pas exØcutØ). En pla ant l’EDI en mode exécution (obtenu en cliquant le bouton Exécuter, ou en activant le menu Exécution | Exécuter), le programme est exØcutØ (avec une possible interaction via le programme de l’IUG). Il s’ensuit alors que :

-   la fenŒtre de l’EDI est intitulØe Projet1 - Microsoft Visual Basic [exécution] (cf. barre de titre),

-   la plupart des fenŒtres utilisables dans le mode création sont indisponibles (c’est le cas, par exemple, de la fenŒtre Propriétés). Notons l’apparition d’une fenŒtre nommØe Exécution, habituellement utilisØe pour dØboguer le programme.

3        INTRODUCTION A LA PROGRAMMATION DE VISUAL BASIC

La rØalisation d une application s appuie essentiellement sur l association de deux ØlØments : Les objets et les ØvØnements.

3.1       La programmation orientée objet 

Visual Basic permet le dØveloppement orientØ objet. Au lieu de rØsoudre un probl?me en le dØcomposant en probl?mes plus petits, il s agit de le scinder sous forme d objets qui existent chacun indØpendamment les uns des autres. Chaque objet poss?de certaines caractØristiques (appelØes propriétés) et fonctions qu il serait en mesure d effectuer (appelØes méthodes).

A titre d illustration, la feuille " Form1 " est un objet ayant, entre autres, une propriØtØ appelØe " Caption " qui permet de spØcifier le texte affichØ dans la barre de titre de la feuille, et deux mØthodes appelØes " Show " et " Hide " qui permettent respectivement d afficher et de cacher la feuille. 

Tr?s bri?vement, on peut dire que les objets " encapsulent " les donnØes (les attributs) et les mØthodes (les comportements), sachant que les donnØes et les mØthodes sont intimement liØes. Les objets ont la propriØtØ de " cacher l’information ", au sens oø la communication d’un objet avec un autre ne nØcessite pas de conna tre comment ces objets sont " implØmentØs " ( titre d’illustration, il est possible de conduire une voiture sans conna tre en dØtail son fonctionnement mØcanique).

Alors que dans un langage procØdural, la fonction joue le r le de l’unitØ de programmation (les fonctions en langage objet sont appelØes mØthodes), l’unitØ de programmation en langage objet est la classe partir laquelle les objets sont " instanciØs " (crØØs) (tout objet appartient  une classe). En fait, la communication avec un objet se fait notamment  travers ses propriØtØs et ses mØthodes. Une propriØtØ a une valeur que le programmeur peut consulter, ou modifier ; une mØthode est une procØdure permettant d’agir sur les objets d’une classe. Le programmeur peut faire rØfØrence  la propriØtØ prop, respectivement  la mØthode meth, de l’objet obj en Øcrivant , respectivement .

De nombreuses classes sont prØdØfinies dans Visual Basic. Par exemple, chaque ic ne de contr le, situØ dans la barre de contr les de l’EDI, reprØsente en fait une classe. Lorsqu’un contr le est dØplacØ vers une feuille, Visual Basic crØe automatiquement un objet de cette classe, vers lequel votre programme pourra envoyer des messages ; ces objets pouvant aussi gØnØrer des ØvØnements. Les versions rØcentes de Visual Basic permettent le dØveloppement de ses propres classes (et contr les).

3.2       Programmation événementielle 

Visual Basic permet la crØation d IUG, sous une forme standard dans l’environnement Windows, par simple pointage et cliquage de la souris, ce qui a pour intØrŒt d Øliminer l Øcriture du code permettant de gØnØrer l IUG d une feuille, de fixer ses propriØtØs, de crØer les contr les contenus dans l IUG.

Il s agit pour le programmeur de crØer l IUG d une feuille et d Øcrire le code dØcrivant ce qui se produit lorsque l utilisateur interagit avec l IUG (clic, double-clic, appuie sur une touche, etc.). Ces actions, appelØes ØvØnements (en anglais events), sont reliØes au programme via le syst?me d exploitation de Microsoft Windows (voir l’annexe C pour plus de prØcisions). En fait, il est possible pour chacun des contr les contenus dans l IUG de rØpondre, de mani?re appropriØe, aux diffØrents ØvØnements auxquels sont sensibles les contr les.

Pour cela, il va correspondre  chacun de ces ØvØnements une procØdure de rØponse (en anglais event procedure), dans laquelle le programmeur insØrera des lignes de code appropriØ. Une telle programmation de code en rØponse  ces ØvØnements est dite programmation ØvØnementielle.

Ainsi, ce n est plus le programmeur mais l utilisateur qui ma trise l ordre d exØcution du programme (le programme ne dicte plus la conduite de l utilisateur).

Dans un programme Visual Basic, tous les contr les (zones de texte, boutons de commande, etc.) poss?dent un ensemble d ØvØnements prØdØfinis auxquels on peut lier du code (pour ne pas rØagir  un ØvØnement prØdØfini, il suffit de ne pas Øcrire de code correspondant). A titre d illustration, l ØvØnement appelØ " Load " de la feuille " Form1 " est dØclenchØ  chaque premier chargement de la feuille (ici " Form1 "), juste avant son affichage. Il sert habituellement fixer les valeurs des propriØtØs de la feuille, ou  exØcuter du code lors de son apparition. Voir l’annexe D pour plus de prØcisions. 

En bref, un programme (une application) Visual Basic est crØØ  partir d’un projet constituØ, notamment, de feuilles, lesquelles comprennent :

-  une IUG composØe de contr les,

-  les procØdures de rØponses aux ØvØnements associØes  ces contr les.

Notons qu une feuille peut aussi contenir des procØdures et des dØclarations locales  la feuille, sans lien direct avec un contr le contenu dans l IUG. Nous verrons par la suite, qu en plus des feuilles, un projet peut Œtre constituØ de modules.

3.3       Deux exemples 

3.3.1 Écriture d’une ligne de texte sur une feuille  

L IUG consiste en deux boutons : Ecrire et Sortir. Il s agit d Øcrire la ligne " Deuxi?me exemple " autant de fois que l utilisateur clique sur le bouton Ecrire. Le fait de cliquer sur le bouton Sortir permet de terminer l exØcution du programme. Les recopies d Øcran qui suivent montrent,  gauche, la feuille avant un clic sur le bouton Ecrire, droite, la feuille apr?s plusieurs clics sur ce bouton. 

 


Le tableau qui suit liste les objets et certaines de leurs propriØtØs (seules les propriØtØs ayant ØtØ modifiØes sont listØes).

Objet

Propriété

Valeur de la propriété

Description

Form

Name

frmExemple2

Identification de la feuille.

Caption

Ecrire du texte sur une feuille

SpØcification du texte affichØ dans la barre de titre de la feuille.

Font

MS Sans Serif Gras 12 pt

SpØcification             de        la            police caract?res de la feuille.

de

CommandButton

Ecrire

Name

cmdDisplay

Identification du bouton Ecrire.

 

Caption

Ecrire

Texte qui appara t sur le bouton.

 

Font

MS Sans Serif Gras 12 pt

SpØcification             de        la            police caract?res du texte Caption.

de

TabIndex

0

NumØro d ordre de Tab.

 

CommandButton

Sortir

Name

cmdExit

Identification du bouton Sortir.

 

Caption

Sortir

Texte qui appara t sur le bouton.

 

Font

MS Sans Serif Gras 12 pt

SpØcification             de        la            police caract?res du texte Caption.

de

TabIndex

1

NumØro d ordre de Tab.

La propriØtØ TabIndex permet de contr ler l ordre dans lequel les contr les, constituant l’IUG, re oivent le focus (i.e., deviennent actifs). Le contr le, ayant une valeur de TabIndex Øgale  0, a le focus au dØpart.

Le code programme qui suit permet :

-  d afficher dans la feuille le texte " Deuxi?me exemple " avec la police de caract?res souhaitØe lors d un clic sur la touche Ecrire (cf. la procØdure de rØponse  l ØvØnement, nommØe cmdDisplay_Click).

-  de terminer le programme lors d un clic sur la touche Sortir (cf. la procØdure de rØponse  l ØvØnement,

nommØe cmdExit_Click).

___________________________________________________

Private Sub cmdDisplay_Click()

' A chaque fois que le bouton "Ecrire" est cliqué,

' le message "Deuxième exemple" est affiché sur la feuille

Print "Deuxième exemple"

End Sub

Private Sub cmdExit_Click()

      End            ' Termine l'exécution du programme

End Sub

___________________________________________________

Private Sub et End Sub marquent respectivement le dØbut et la fin d une procØdure. Le code que le programmeur veut exØcuter lors d un clic sur la touche Ecrire, est placØ entre le dØbut et la fin de la procØdure, i.e., Private Sub cmdDisplay_Click() et End Sub.

    ' A chaque fois que le bouton "Ecrire" est cliqué,

    ' le message "Deuxième exemple" est affiché sur la feuille

sont des lignes de commentaires.

La ligne

Print "Deuxième exemple"

affiche le texte " Deuxi?me exemple " sur la feuille (en cours) en utilisant la mØthode Print. En toute rigueur, il faudrait faire prØcØder la mØthode Print du nom de la feuille, soit la ligne

                frmExemple2.Print "Deuxième exemple"           (nom de l de la propriØtØ)

Notons que cette mØthode n est pas la plus appropriØe lorsque la feuille contient des contr les, il serait prØfØrable d Øcrire le texte dans un contr le de type TextBox (dØtaillØ au § 8.2).

La ligne

            End

situØe dans la procØdure cmdExit, termine l exØcution du programme (i.e., place l EDI en mode crØation).

3.3.2 Addition d’entiers   

A partir d entiers introduits par l utilisateur, il s agit d afficher leur somme successive. L IUG consiste en deux Øtiquettes (Label), deux zones de saisie (TextBox) et deux boutons (CommandButton), cf. la recopie d Øcran dans la figure suivante. 

 

Le tableau qui suit liste les objets et certaines de leurs propriØtØs (seules les propriØtØs ayant ØtØ modifiØes sont listØes).

 

Objet

Propriété

Valeur de la propriété

Description

 

Form

Name

frmExemple3

Identification de la feuille.

 

Caption

Programme d addition

SpØcification du texte affichØ dans la barre de titre de la feuille.

 

CommandButton Ajouter

Name

cmdAjouter

Identification du bouton Ajouter.

 

Caption

Ajouter

Texte qui appara t sur le bouton.

 

CommandButton

Sortir

Name

cmdSortir

Identification du bouton Sortir.

Caption

Sortir

Texte qui appara t sur le bouton.

 

Label

Name

lbl1

Identification du label.

 

Caption

Entrer un entier

Texte qui appara t dans le label.

 

Label

Name

lbl2

Identification du label.

 

Caption

La somme est

Texte qui appara t dans le label.

 

TextBox

Name

txtEntree

Identification du TextBox.

 

Font

MS Sans Serif Gras 12 pt

SpØcification de        la         police             de caract?res.

 

MaxLength

5

Limite le nombre maximum de caract?res (la valeur 0, mise par dØfaut, indique qu il n y a pas de limite).

 

TabIndex

0

NumØro d ordre de Tab.

 

Text

(vide)

Texte affichØ.

 

TextBox

Name

txtSomme

Identification du TextBox.

 

Font

MS Sans Serif Gras 12 pt

SpØcification de        la         police             de caract?res.

 

Text

0

Texte affichØ.

 

Enabled

False

Autorisation / non autorisation.

 

                 

Le contr le TextBox permet  l utilisateur, via la propriØtØ Text, d entrer du texte (cf. TextBox txtEntree), il permet aussi d afficher du texte (cf. TextBox txtSomme).

La propriØtØ Enabled du contr le TextBox txtSomme positionnØe  False fait que ce contr le ne rØagit  aucun ØvØnement, il s ensuit que le texte reprØsentant la somme est de couleur grise.

Le code du programme est le suivant :

___________________________________________________

Dim sum As Integer

Private Sub cmdAjouter_Click() sum = sum + = "" = sum

End Sub

Private Sub cmdSortir_Click() End End Sub

___________________________________________________

La ligne

Dim sum As Integer

dØclare une variable, nommØe sum, de type entier (2 octets, entre 32768 et 32767), initialisØe par dØfaut  0.

Remarque : La dØclaration des variables dans Visual Basic est facultative, une variable non dØclarØe sera par dØfaut de type Variant (cf. § 4.4). Toutefois, il est conseillØ, pour des raisons d’aide  la mise au point de programmes, de rendre obligatoire la dØclaration des variables. Pour cela, il faut la prØsence dans la partie " dØclaration gØnØrale " de la ligne suivante :

            Option Explicit

Cette ligne peut Œtre soit tapØe directement dans la partie " dØclaration gØnØrale ", soit introduite automatiquement par Visual Basic en ouvrant, avant toute programmation, le menu Outils | Options, puis en cliquant l’onglet nommØ Editeur et en cochant la case Déclaration des variables obligatoire (case non cochØe par dØfaut).

La ligne

            sum = sum +

ajoute le texte de txtEntree  la variable sum, puis place le rØsultat dans la variable sum. Avant l opØration d addition (+), la cha ne de caract?res situØe dans la propriØtØ Text est convertie implicitement en une valeur enti?re.

La ligne

            = sum

met le contenu de la variable sum dans , Visual Basic convertit implicitement la valeur enti?re contenue dans sum en une cha ne de caract?res.

Remarque : De mani?re plus rigoureuse que les conversions implicites (qui peuvent donner lieu  des mØprises), il existe des fonctions Visual Basic permettant de convertir une cha ne de caract?res en une valeur enti?re, et rØciproquement (cf. fonctions Val et Str$).

3.4       Règles de priorité des opérateurs arithmétiques 

Les opØrations arithmØtiques sont effectuØes selon un ordre fixØ par les r?gles de prØcØdence d opØrations suivantes :

 

Opération

Ordre d’évaluation

 

()   parenth?ses

EvaluØ en 1er. S il y a plusieurs paires de parenth?ses " de mŒme niveau ", elles sont ØvaluØes de gauche  droite.

 

^   exponentielle

EvaluØ en 2e. S il y en a plusieurs, elles sont ØvaluØes de gauche droite.

 

-   nØgation

EvaluØ en 3e. S il y en a plusieurs, elles sont ØvaluØes de gauche droite.

 

* ou /   multiplication et division

EvaluØ en 4e. S il y en a plusieurs, elles sont ØvaluØes de gauche droite.

 

\   division enti?re

EvaluØ en 5e. S il y en a plusieurs, elles sont ØvaluØes de gauche droite.

 

Mod   modulo

(17 Mod 3 = 2 car 17 = 3*5 + 2)

EvaluØ en 6e. S il y en a plusieurs, elles sont ØvaluØes de gauche droite.

 

+ ou -   addition et soustraction

EvaluØ en dernier. S il y en a plusieurs, elles

 

sont ØvaluØes de gauche droite.

 

         

3.5       Opérateurs de comparaison 

Dans l’algèbre standard

Equivalent dans Visual Basic

a = b

a = b

c ? d

c < > d

e > f

e > f

g < h

g < h

i ? j

i >= j

k ? l

k <= l

Ces opØrateurs permettent au programme de prendre une dØcision basØe sur la vØrification, ou non, (True ou False) d’une condition.

4          STRUCTURES DE CONTRÔLE 

Afin de concevoir un programme, nous allons dØcrire les diffØrents types de blocs de construction possibles et rappeler les principes de la programmation structurØe. N importe quel probl?me informatique peut-Œtre rØsolu en exØcutant une sØrie d actions dans un ordre spØcifique, une telle procØdure est appelØe un algorithme.

Lorsque les instructions d un programme sont exØcutØes l une  la suite de l autre, dans l ordre oø elles ont ØtØ Øcrites, l’exØcution est dite séquentielle. Certaines instructions permettent au programmeur de spØcifier que la prochaine instruction  exØcuter peut Œtre diffØrente de celle qui est situØe dans la sØquence, ces instructions effectuent un transfert de contrôle.

Durant les annØes 1960, l utilisation de l instruction de transfert de contr le goto fut bannie comme Øtant la source de nombreux probl?mes de programmation (difficultØs vis- -vis de la comprØhension, du test, de la modification d un programme). La programmation dite structurée (" sans goto ") fut prØsentØe comme une alternative. En fait tous les programmes peuvent Œtre construits par combinaison de seulement trois structures de contr le : La structure en séquence, la structure de sélection et la structure de répétition.

Visual Basic propose :

-    trois types de structures de sØlection : If/Then, If/Then/Else, Select Case,

-    six types de structures de rØpØtition : While/Wend, Do While/Loop, Do/Loop While, Do Until/Loop, Do/Loop Until, For/Next.

La figure suivante rØcapitule les diffØrentes structures de contr le de Visual Basic. 

                                    Séquence                                                                       Sélection

 

RØpØtition

                                structure While/Wend             structure Do While/Loop                     structure Do/Loop While

 

                                structure Do Until/Loop         structure Do/Loop Until          structure For/Next

 

La connexion arbitraire de telles structures peut induire des programmes non structurØs. Les r?gles suivantes permettent la construction de programmes structurØs (le symbole rectangle peut Œtre utilisØ pour indiquer une action, y compris l entrØe/sortie) :

1.     Commencer avec le diagramme (flowchart) suivant : 

 

2.     Tout rectangle (action) peut Œtre remplacØ par deux rectangles en sØquence.

3.     Tout rectangle (action) peut Œtre remplacØ par une structure de contr le (sØquence, If/Then, If/Then/Else, Select Case, While/Wend, Do While/Loop, Do/Loop While, Do Until/Loop, Do/Loop Until, For/Next).

4.     Les r?gles 2 et 3 peuvent Œtre appliquØes autant de fois que nØcessaire et dans n importe quel ordre.

4.1       Structures de sélection 

•   Structure de type If/Then

            If note >= 10 Then

                        lblNote.Caption = "Accepté"

            End If

•   Structure de type If/Then/Else

            If note >= 10 Then

                        lblNote.Caption = "Accepté"

            Else

                        lbl.Caption = "Refusé"

            End If

•   Structure de type Select Case 

Cette structure permet de ne pas utiliser des If imbriquØs. Les conditions sont examinØes dans l ordre d Øcriture, d?s qu une condition est vØrifiØe, les suivantes ne sont pas examinØes.

            Select Case code_d_acces

                        Case Is < 1000

                                    Message = "Accès refusé"

                        Case 1542, 1645 To 1689

                                    Message = "Personnel technique"

                        Case Else

                                    Message = "Accès refusé"

            End Select

4.2       Structures de répétition 

•   Structure de type While/Wend 

Private Sub cmdBouton_Click() Dim produit As Integer produit = 2

While produit <= 1000

                                Print produit

produit = produit * 2

Wend End Sub

•   Structure de type Do While/Loop 

Cette structure se comporte comme la prØcØdente.

Private Sub cmdBouton_Click() Dim produit As Integer produit = 2

Do While produit <= 1000

                                Print produit

                                produit = produit * 2

Loop End Sub

•   Structure de type Do/Loop While 

Cette structure est similaire  la prØcØdente si ce n’est que la condition de test de la boucle est faite apr?s que le corps de la boucle ait ØtØ exØcutØ.

Private Sub cmdBouton_Click() Dim compteur As Integer compteur = 1 Do

  Print compteur & Space$(2) ; ' permet d'écrire 1  2  3  4  …  10  compteur = compteur + 1

Loop While compteur <= 10

End Sub

•   Structure de type Do Until/Loop  

Private Sub cmdBouton_Click() Dim produit As Integer produit = 2

Do Until produit > 1000

                                Print produit

                                produit = produit * 2

Loop End Sub

Au contraire des trois prØcØdentes structures, les instructions, situØes dans le corps de la boucle, sont exØcutØes autant de fois que la condition de test de la boucle est fausse.

•   Structure de type Do/Loop Until 

Cette structure est similaire  la prØcØdente si ce n’est que la condition de test de la boucle est faite apr?s que le corps de la boucle ait ØtØ exØcutØ.

Private Sub cmdBouton_Click() Dim compteur As Integer compteur = 1

Do

Print compteur & Space$(2) ;

                        compteur = compteur + 1

Loop Until compteur = 10

End Sub

•   Structure de type For/Next 

A titre d exemple, rØØcrivons la portion de programme suivante qui utilise la structure Do While/Loop :

Private Sub cmdBouton_Click() Dim compteur As Integer compteur = 3

Do While compteur <= 20

                                Print compteur

                                compteur = compteur + 2

Loop End Sub

 En fait l initialisation, la condition de rØpØtition et l incrØmentation sont incluses dans la structure d entŒte For :

Private Sub cmdBouton_Click() Dim compteur As Integer

For compteur = 3 To 20 Step 2

                                Print compteur

Next compteur ‘ la présence du nom de la variable compteur est facultative End Sub

Remarque : L’incrØment, ici Øgal  2, peut-Œtre nØgatif. Par dØfaut, sa valeur est unitaire.

Remarque : Les instructions Exit Do et Exit For permettent la sortie immØdiate de ces structures (Exit For est rØservØe  la structure For/Next).

4.3       Opérateurs logiques 

Liste des opØrateurs permettant d effectuer des opØrations logiques  partir d expressions  valeurs boolØennes True (vraie) ou False (fausse) :

Not Expression

Etablit la nØgation logique de Expression

 

E1 And E2

True si les conditions E1 et E2 sont True

 

E1 Or E2

True si l une au moins des conditions E1, E2 est True

 

E1 Xor E2

True si seulement une seule des deux conditions E1, E2 est

True

4.4       Types de données 

•    Les types de donnØes dØcrivent l information qu une variable stocke. Les types prØdØfinis dans Visual Basic sont listØs dans le tableau ci-dessous.

 

Type

Occupation mémoire

Portée des valeurs

 

Boolean

2 octets

True ou False

 

Byte

1 octet

0  255   (28)

 

Currency

8 octets

-922 337 203 685 477.580 8  922 337 203 685 477.580 7

 

Date

8 octets

1er janvier 100 au 31 dØcembre 9999 0:00:00  23:59:59

Double

8 octets

-1.797 693 134 862 32 E308   4.940 656 458 412 47 E-324

4.940 656 458 412 47 E-324  1.797 693 134 862 32 E308

 

Integer

2 octets

-32 768  32 767   (216, signØ)

 

Long

4 octets

-2 147 483 648  2 147 483 647   (232, signØ)

 

Object

4 octets

Pointeur sur un objet (voir chp. 12, annexe F)

 

Single

4 octets

-3.402 823 E38  -1.401 298 E-45

1.401 298 E-45  3.402 823 E38

 

String

10 octets + taille de la cha ne

La longueur (variable) de la cha ne est composØe d au plus 2 147 483 648 caract?res

 

String*n

Taille de la cha ne

La taille de la cha ne, fixØe par n, est comprise entre 1 et 65536

 

Variant

16 octets

Une valeur parmi celles listØes au-dessus, mise  part String*n

 

             

Currency est un type de donnØes, stockØ sur 8 octets, qui permet, notamment, des calculs monØtaires prØcis dans le cas de nombres de moins de 4 dØcimales.

Variant est le type de donnØes par dØfaut pour les variable dont le type n est pas explicitement dØclarØ et stocke n importe quel type de donnØes (exceptØ String*n), y compris les types dØfinis par le programmeur (voir ci-dessous). Ce type de donnØes peut-Œtre intØressant :

-  dans le cadre de la conception d’une interface utilisateur, au sens oø il permet de prendre en compte des donnØes dont on ne conna t pas le type. Par exemple,  la question " entrer votre ge ", un utilisateur peut introduire un nombre, mais aussi du texte (" vingt-deux " au lieu de 22) ; le fait de stocker cette information dans une variable Variant permet, via les fonctions VarType() ou TypeName(), de conna tre son type. 

-  pour construire des structures de donnØes (listes cha nØes, arbres), sachant que le code manipulant de telles structures peut Œtre Øcrit indØpendamment du type de donnØes des ØlØments stockØs.

• Visual Basic permet la crØation de ses propres types de donnØes. Il s agit de regrouper sous un seul type des collections de variables non nØcessairement de mŒme type (au contraire des tableaux). Il suffit de rØpertorier, entre les instructions Type et End Type, l ensemble des variables pour dØfinir un nouveau type, voir l’exemple ci-dessous.

Type Client

Nom As String*15

Prénom As String*15

Age As Integer

End Type

Le type Client Øtant dØfini, il est possible de dØclarer une nouvelle variable basØe sur ce type, par exemple :

Dim Untel As Client

= "Dupond"

énom = "Léon"

= 40

Usuellement, ces types de donnØes sont utilisØs dans le cas de manipulation de fichiers  acc?s direct (fichiers constituØs d enregistrements de longueur fixe).

Remarque : Les dØfinitions Type doivent Œtre privØes (Private) quand elles sont dØclarØes dans des modules feuilles, elles peuvent Œtre publiques (Public) ou privØes quand elles sont dØclarØes dans des modules code. 

5        PROCÉDURES ET FONCTIONS 

5.1       Introduction

L expØrience montre que le fait de fractionner un programme (important) en plusieurs parties facilite bien souvent son dØveloppement et sa maintenance. Cette approche, applicable, notamment, dans le cadre de Visual Basic, est appelØe " diviser et conquérir ".

5.2       Les modules 

Un projet est constituØ de modules, tels que des modules feuilles, ou des modules standards (encore appelØs modules codes). A la diffØrence d un module feuille, un module standard ne comporte pas d’IUG, il est uniquement composØ de codes de programme.

En dehors de dØclarations, les modules sont constituØs de procØdures, quatre types de procØdures existent

:

-  les procØdures événementielles, en anglais event procedures, en rØponse  des ØvØnements (appui sur une touche du clavier, clic de souris, etc.) ;

-  les procØdures Visual Basic, en anglais Visual Basic procedures, (Print, VarType, etc.), fournies par Microsoft pour effectuer des t ches courantes (le but cherchØ Øtant de rØduire le temps de dØveloppement) ;

-  les procØdures con ues par le programmeur (car non fournies par Visual Basic). Elles sont de deux types : Les procØdures Sub et les procØdures Function.

Un programmeur peut Øcrire des procØdures pour exØcuter des t ches spØcifiques pouvant Œtre utilisØes  diffØrents endroits dans un programme. A des fins de rØutilisation Øventuelle (en anglais, on parle de software reusability), chaque procØdure devra Œtre limitØe  la rØsolution d une t che bien dØfinie, il est de coutume que la taille d une procØdure ne dØpasse pas une demie page.

L appel  une procØdure se fait en spØcifiant le nom de la procØdure et en fournissant les informations (on parle de param?tres d entrØe) nØcessaires  la procØdure " appelØe " pour rØaliser le travail demandØ (restituØ au programme " appelant " via des param?tres de sortie).

5.3       Les procédures Sub 

Voici un exemple de procØdure Sub qui dØtermine la plus petite valeur parmi trois nombres entiers et l affiche dans un Label (voir la recopie d Øcran dans la figure qui suit) :

_________________________________   

‘ Ce programme permet de trouver le minimum parmi trois nombres entiers Option Explicit  ‘ Force les variables à être explicitement déclarées

Private Sub cmdPlusPetit_Click()

Dim valeur1 As Long, valeur2 As Long, valeur3 As Long valeur1 = valeur2 = valeur3 =

Call Minimum(valeur1, valeur2, valeur3)   ‘ ou Minimum valeur1, valeur2, valeur3 End Sub

Private Sub Minimum (min As Long, y As Long, z As Long)

If y < min Then min = y

End If

If z < min Then min = z End If

lblPlusPetit.Caption = "La plus petite valeur est" & min

End Sub

_________________________________

 

Le corps de la procØdure Minimum est placØ entre l entŒte et End Sub. A chaque appel de cette procØdure

(cf. instruction Call Minimum(valeur1, valeur2, valeur3), ou de mani?re Øquivalente, Minimum valeur1, valeur2, valeur3), le corps de la procØdure est immØdiatement exØcutØ, puis l exØcution du programme se poursuit par l instruction situØe immØdiatement apr?s l appel de la procØdure. Toutes les entŒtes des procØdures contiennent des parenth?ses, Øventuellement vides ou contenant une liste de dØclarations de variables, appelØe liste des param?tres qui comprend des param?tres d entrØe et de sortie. En fait, une procØdure peut modifier le contenu des variables passØes en param?tre (c est le cas du param?tre min de la procØdure Minimum).

Remarques :

-    Le fait que les procØdures op?rent sur des donnØes, explique que leurs noms correspondent bien souvent  des verbes. Il serait d ailleurs prØfØrable de renommer la procØdure Minimum par RechercherLeMinimum.

-    Par convention, une procØdure dØbute par une lettre majuscule (par exemple : Envoyer).

5.4       Les procédures Function 

Les procØdures Function partagent les mŒmes caractØristiques que les procØdures Sub si ce n’est que les procØdures Function retournent une valeur, appelØe valeur de retour. La plupart des procØdures fournies par Visual Basic sont de ce type, par exemple, la fonction VarType (Name) (retourne un entier indiquant le type de la variable Name de type Variant). 

Voici un exemple de procØdure Function qui multiplie deux valeurs rØelles et affiche le rØsultat dans un Label (voir la recopie d Øcran dans la figure qui suit) :

_________________________________   

‘ Ce programme permet de multiplier deux nombres

Option Explicit  ‘ Force les variables à être explicitement déclarées

Private Sub cmdMultiplier_Click()

Dim valeur1 As Single, valeur2 As Single

valeur1 = Val()     ‘ La fonction Val convertit une chaîne en un nombre valeur2 = Val()

lblMultiplication.Caption = "Le résultat de la multiplication est : " & _ Multiplication(valeur1, valeur2)

End Sub

Private Function Multiplication (x As Single, y As Single) As Single Multiplication = x*y

End Function

_________________________________

 

La valeur, retournØe par la fonction Multiplication, est placØe dans le nom de la fonction (on parle de pseudo-variable).

5.5       Appel par valeur, appel par référence 

Le passage des param?tres d une procØdure peut se faire par valeur (en anglais by value) ou par référence (en anglais by reference). Dans les deux exemples prØcØdents, chacun des arguments a ØtØ passØ par référence, ce qui est le mode de passage par dØfaut. Avec un tel mode de passage, le programme " appelant " donne la procØdure " appelØe " la possibilitØ d accéder directement aux donnØes de " l appelant " et donc de modifier ces donnØes. Quand un argument est passØ par valeur, une copie de la valeur de l argument est faite et passØe  la procØdure " appelØe ". Cette derni?re peut manipuler cette copie, mais ne peut pas manipuler la donnØe d origine de " l appelant ". Notons que ce mode de passage amoindrit les performances vis- -vis du temps d exØcution et de l espace mØmoire, dans le cas d un grand nombre de param?tres  passer.

L entŒte de la fonction suivante dØclare deux variables :

            Function Calcul (ByVal x As Long, y As Boolean) As Double

La fonction Calcul re oit x par valeur et y par référence,cette entŒte peut aussi s Øcrire :

Function Calcul (ByVal x As Long, ByRef y As Boolean) As Double

5.6       Exit Sub et Exit Function 

Le fait d exØcuter l instruction Exit Sub (respectivement Exit Function) dans une procØdure Sub (respectivement Function) provoque une sortie immØdiate de la procØdure. Le contr le est retournØ  " l appelant " et l instruction situØe immØdiatement en sØquence apr?s l appel est exØcutØe.

5.7       Durée de vie d’une variable 

Une variable poss?de diffØrents attributs : Un nom, un type, une taille et une valeur. A cela s ajoutent d autres attributs : Une durØe de vie (en anglais storage class), une portØe (en anglais scope).

L attribut durée de vie d une variable dØtermine la pØriode durant laquelle elle existe en mØmoire, certaines existent bri?vement, d autres sont rØguli?rement crØØes et dØtruites, d autres existent tout au long de la durØe d exØcution du programme.

Les variables locales (i.e., dØclarØes dans une procØdure ou une fonction) non statiques (aussi appelØes variables automatiques) sont dØfinies par dØfaut et sont crØØes quand la procØdure devient active. Ces variables existent (seulement) jusqu la fin d exØcution de la procØdure.

Le mot clØ Static est utilisØ pour dØclarer des variables locales  statiques. De telles variables sont toujours connues seulement dans la procØdure dans laquelle elles ont ØtØ dØclarØes (on dit qu elles ont la mŒme portØes), mais  la diffØrence des variables automatiques, les variables statiques conservent leurs valeurs (i.e., celles acquises lors de la derni?re sortie de la procØdure). Ces variables sont implicitement initialisØes  zØro lors du premier appel de la procØdure. Ce type de variables permet de ne pas dØclarer des variables globales lorsqu une seule procØdure en a besoin.

Exemple :  

Private Sub Exemple_Click ()

Static N As Integer ‘ N est une variable entière statique

                                Dim M As Integer     ‘ M est une variable entière non statique

N = N + 1

M = M + 1

            End Sub

Lors du premier appel de cette procØdure, les variables N et M sont Øgales  0, aussi lors de la premi?re sortie de cette procØdure, les variables N et M sont Øgales  1. 

Lors du second appel, la variable N est Øgale 1 (valeur acquise lors de la prØcØdente sortie) alors que la variable M est toujours Øgale  0. Aussi lors de la seconde sortie de cette procØdure, la variable N est Øgale  2 alors que la variable M est toujours Øgale  1.

5.8       Portée d’une variable, d’une procédure, d’une fonction  

L Øtendue d un identificateur (nom d une variable, ou nom d une procØdure dØfinie par le programmeur) est la rØgion dans laquelle l identificateur peut-Œtre rØfØrencØ. Par exemple, une variable dØclarØe en local dans une procØdure peut seulement Œtre rØfØrencØe dans cette procØdure. Les trois portØes d un identificateur sont la portØe locale (en anglais local scope), la portØe au niveau module (en anglais module scope) et la portØe au niveau public (en anglais public scope).

La portØe locale s applique  des variables dØclarØes dans le corps d une procØdure. Les variables locales peuvent Œtre rØfØrencØes  partir de l endroit oø elles ont ØtØ dØclarØes jusqu la sortie de la procØdure (ou de la fonction), i.e., End Sub (ou End Function).

La portØe au niveau module, aussi appelØe portØe au niveau privé (en anglais Private scope), s applique des variables dØclarØes dans la partie " dØclaration gØnØrale du module " via le mot clØ Dim. Ces variables peuvent seulement Œtre rØfØrencØes dans le module dans lequel elles ont ØtØ dØclarØes.

La portØe au niveau public fait rØfØrence  des variables dØclarØes en public dans un module. De telles variables sont accessibles pour tous les modules.

Remarque : Quand une variable est dØclarØe au niveau module et a le mŒme nom qu une variable dØclarØe en local, celle qui est dØclarØe au niveau module est " cachØe " tant que la variable dØclarØe en local est active. Une alternative  cette source d erreur consiste  ne pas utiliser des noms de variables dupliquØes.

5.9       Les constantes 

Visual Basic permet la crØation de variables dont la valeur ne peut pas changer durant l’exØcution d’un programme. Ces variables, particuli?res, sont appelØes des variables constantes et sont souvent utilisØes pour amØliorer la " lisibilitØ " d’un programme. La dØclaration d’une variable constante se fait  l’aide du mot clØ Const :

Syntaxe

[Public | Private] Const constname [As type] = expression

Private est utilisØ au niveau module pour dØclarer les constantes uniquement disponibles dans le module dans lequel la dØclaration est effectuØe. Ce mot clØ n’est pas autorisØ dans les procØdures.

Public est utilisØ au niveau module pour dØclarer des constantes disponibles pour toutes les procØdures de l’ensemble des modules. Ce mot clØ n’est pas autorisØ dans les procØdures.

Remarque : Utiliser le mot clØ Dim avec Const dans une dØclaration est une erreur de syntaxe.

A titre d’exemple, on peut donner les lignes suivantes :

            Const pi As Double = 3.14159         ' il est obligatoire d'assigner une valeur

            Const Deux_pi As Double = pi*2     Public Const RG = "Rouge"

En fait, de nombreuses constantes sont reconnues dans Visual Basic, elles sont gØnØralement prØfixØes par les lettres vb. Par exemple, dans le cadre d’une bo te de dialogue, la constante vbOK (renvoyØe par la fonction MsgBox) permet de dØtecter un appui (un clic) sur le bouton OK.

5.10     Paramètres optionnels 

Il est possible de crØer des procØdures qui acceptent un ou plusieurs paramètres optionnels. Ces param?tres sont spØcifiØs dans l entŒte de la procØdure via le mot clØ Optional. ConsidØrons, par exemple, la procØdure suivante :

            Private Sub Ajout (x As Integer, Optional y As Integer = 1)                          x = x + y          End Sub

L entŒte de cette procØdure indique que le second argument peut ne pas Œtre demandØ lors d un appel de la procØdure Ajout, auquel cas il sera Øgal  1. ConsidØrons les appels suivants :

Call Ajout

            Call Ajout (a)              Call Ajout (a, b)

Le premier appel gØn?re une erreur de syntaxe car un argument au minimum est rØclamØ. Le second appel est valide, l argument optionnel n est pas fourni. Au retour de la procØdure, la variable enti?re a est incrØmentØe par dØfaut de 1. Le troisi?me appel est aussi valide, la variable enti?re b est fournie en tant qu argument optionnel. Au retour de la procØdure, la variable enti?re a est incrØmentØe par dØfaut de b.

5.11     Fonctions mathématiques de Visual Basic 

Certaines fonctions de calcul mathØmatique sont disponibles :

Fonction

Description

Exemple

Abs (x)

Valeur absolue de x

Abs (-2) est Øgal  2, Abs (3) est Øgal  3

Atn (x)

Arc tangente (en radians) de x

Atn (1) est Øgal  pi/4

Cos (x)

Cosinus (en radians) de x

Cos (0) est Øgal  1

Exp (x)

Fonction exponentielle ex

Exp (1.0) est Øgal  2.71828

Int (x)

Retourne le plus grand entier infØrieur ou Øgal  x

Int (-5.3) est Øgal   6 Int (0.893) est Øgal  0

Int (76.45) est Øgal  76

Fix (x)

Partie enti?re de x

Fix (-5.3) est Øgal  5

Fix (0.893) est Øgal  0

Fix (76.45) est Øgal  76

Log (x)

Logarithme nØpØrien de x

Log (2.718282) est Øgal 1.0

Round (x, y)

Retourne une valeur approchØe de x avec y dØcimales (si y est omis, x est retournØ comme Øtant un entier)

Round (4.84) est Øgal  4

Round (5.73839, 3) est Øgal  5.738

Sgn (x)

Signe de x

Sgn (-19) est Øgal  1 Sgn (0) est Øgal  0

Sgn (3.4) est Øgal  1

Sin (x)

Sinus (en radians) de x

Sin (0) est Øgal  0

Sqr (x)

Racine carrØ de x

Sqr (9.0) est Øgal  3

Tan (x)

Tangente (en radians) de x

Tan (0) est Øgal  0

5.12     Module standard 

Un module standard (ou module code) n a pas d IUG (au contraire des modules feuilles, en anglais form modules), il contient uniquement du code. Les procØdures que le programmeur souhaite utiliser dans de nombreux projets (on parle de briques logicielles) sont souvent placØes dans des modules standards. Comme pour un module feuille, un module code admet une partie " dØclaration gØnØrale ".

Par dØfaut, les variables d un module et les procØdures ØvØnementielles sont privØes (Private) au module dans lesquelles elles ont ØtØ dØfinies : Une variable, ou une procØdure, privØe peut seulement Œtre utilisØe dans le module oø elle a ØtØ dØclarØe. Si le programmeur souhaite permettre  un autre module l utilisation d une variable, ou procØdure, le mot clØ Public doit Œtre utilisØ dans la dØclaration : Les variables, ou procØdures, publiques sont accessibles dans chacun des modules du projet.

Remarques :

-    Les modules standards sont tous placØs dans un classeur nommØ Modules, alors que les feuilles sont placØes dans un classeur nommØ Feuilles (cf. figure suivante). 

 

-    Les noms des fichiers de modules standards se terminent par .bas.

-    Visual Basic ne propose pas de module standard par dØfaut dans un projet, il faut l ajouter manuellement (voir le menu Projet | Ajouter un module).

-    Un projet peut avoir plusieurs modules codes (aussi bien que plusieurs modules feuilles).

A titre d exemple, le programme suivant contient un module feuille et un module code. Le fait de cliquer sur le bouton Ecrire de la feuille (voir la saisie d Øcran dans la figure qui suit) appelle la procØdure ModuleEcrire, dØclarØe en public et situØe dans un module standard.    

_______________   .frm _______________________

‘ Utilisation d’un module code

Option explicit

Private Sub cmdEcrire_Click ()

‘ La procédure ModuleEcrire est définie dans le module code () Call ModuleEcrire

End Sub

_______________   .bas _______________________

Option Explicit

Public Sub ModuleEcrire () frmFeuille.Print "ModuleEcrire"

End Sub

____________________________________________

 

6          LES TABLEAUX 

Un tableau peut se reprØsenter comme Øtant un groupe consØcutif (une sØrie) d emplacements mØmoires de mŒme nom et de mŒme type (voir § 4.4). La rØfØrence  un emplacement particulier, ou ØlØment dans le tableau, se fait  travers le nom du tableau et sa position (son index) dans le tableau. Le traitement des variables contenues dans un tableau peut alors se faire  l’aide de boucle.

Par exemple, soit un tableau, mono dimensionnel, nommØ Nombre contenant 6 ØlØments de type entiers :

55

22

15

1

89

56

Nombre (0)

Nombre (1)

Nombre (2) Nombre (3) Nombre (4)

Nombre (5)

Notons qu il existe deux catØgories de tableaux : Les tableaux statiques (en anglais, static arrays) dont le nombre maximum d ØlØments est fixØ, et les tableaux dynamiques (en anglais, dynamic arrays, aussi appelØ redimmable arrays) dont le nombre d ØlØments peut varier durant le dØroulement du programme. 

6.1       Leurs déclarations 

Les tableaux peuvent Œtre dØclarØs comme Public uniquement dans un module code. Les tableaux actifs au niveau d un module sont dØclarØs dans la partie " dØclarations gØnØrales " du module via le mot clØ Dim ou Private.Les tableaux actifs au niveau local sont dØclarØs dans une procØdure via le mot clØ Dim ou Static.

La dØclaration

                        Dim Nombre (5) As Integer

dØclare un tableau Nombre constituØ de six entiers. Les fonctions LBound (Nombre) et UBound (Nombre) retournent respectivement l indice le plus petit et l indice le plus grand du tableau, l indice Øtant de type Long. Par dØfaut, le plus petit indice d un tableau est Øgal  0. Le fait de spØcifier une valeur pour le plus grand indice d un tableau, dans notre exemple 5, indique que le tableau est statique. Par dØfaut, les six entiers du tableau sont Øgaux  0, la ligne

                        Nombre (0) = 55

permet de fixer la valeur 55  l ØlØment du tableau Nombre d indice 0.

La dØclaration

                        Dim Tab (-5 To 4) As String

dØclare un tableau Tab constituØ de 10 cha nes de caract?res, LBound (Tab) et UBound (Tab) sont respectivement Øgaux  5 et 4.

Les tableaux peuvent Œtre multi-dimensionnels, la dØclaration

                        Dim Tab3 (50 To 100, 8, 7 To 15)

dØclare un tableau Tab de dimension 3, LBound (Tab, 3) est Øgal  7, UBound (Tab, 1) est Øgal  100.

6.2       Les tableaux dynamiques 

Les tableaux dont la taille peut augmenter, ou diminuer, en cours d exØcution sont appelØs tableaux dynamiques. Aucune taille n est donnØe lors de la dØclaration d un tel tableau. Par exemple, la ligne

                        Dim TabDynamique () As Double

dØclare le tableau TabDynamique comme Øtant un tableau dynamique constituØ de rØels doubles. La taille d un tableau dynamique est spØcifiØe en cours d exØcution  l aide du mot clØ ReDim (notons que la dimension du tableau ne peut pas Œtre modifiØe). Par exemple, la ligne

                        ReDim TabDynamique (10)

alloue 11 ØlØments  TabDynamique. Le fait d exØcuter ReDim provoque la perte des valeurs contenues dans le tableau. Toutefois, les valeurs dØj dans le tableau peuvent Œtre conservØes en pla ant le mot clØ Preserve apr?s ReDim.

Le mot clØ Erase Tab permet, en cours d exØcution, de supprimer de la mØmoire le tableau dynamique Tab.

6.3       Passage de tableaux dans les procédures 

Pour passer tous les ØlØments d un tableau en param?tre  une procØdure, il suffit de spØcifier le nom du tableau suivi d’une paire de parenth?ses vide. Par exemple, si le tableau TemperatureMensuelle est dØclarØ comme suit :

                        Dim TemperatureMensuelle (12) As Integer

l’appel

                        Call ModifierTableau (TemperatureMensuelle ( ))

passe tous les ØlØments du tableau TemperatureMensuelle la procØdure ModifierTableau. Les tableaux sont automatiquement passØs par rØfØrence  l’appelØ peut donc modifier la valeur des ØlØments du tableau fourni par l’appelant.

Pour passer un ØlØment d’un tableau  une procØdure, utiliser l’ØlØment du tableau comme param?tre, par exemple :

            Call PasserUnElement (TemperatureMensuelle (4))

Pour une procØdure recevant un tableau, la liste des param?tres de la procØdure doit spØcifier le passage d’un tableau. Par exemple, l’entŒte de la procØdure ModifierTableau devra s’Øcrire comme suit :

            Private Sub ModifierTableau (a( ) As Integer)

ainsi, ModifierTableau s’attend  recevoir un tableau d’entier dans le param?tre a (la taille du tableau n’est pas spØcifiØe entre les parenth?ses).

7          LES CHAÎNES 

Chaque caract?re est reprØsentØ en interne par un nombre entier, compris entre 0 et 255 (par exemple, 65 reprØsente la lettre A). Cet ensemble de valeurs enti?res est appelØ l ensemble des caract?res American National Standards Institute (ANSI). Les 128 premiers caract?res ANSI (de 0  127) correspondent aux valeurs de l American Standard Code for Information Interchange (ASCII). Les valeurs ANSI de 128  255 reprØsentent un ensemble de caract?res spØciaux, d accents, de fractions, etc. Une cha ne est une sØrie de caract?res formant une entitØ. Une cha ne dans Visual Basic a un type de donnØe String. Deux types de cha nes sont possibles : Les cha nes de longueur variable (en anglais, variable-length strings), les cha nes de longueur fixe (en anglais, fixed-length strings). Par dØfaut, les variables String sont de longueur variable, exemple :

Dim ch As String

ch = "02 41 – abc"

la variable ch est dØclarØe de type String, elle contient la cha ne "02 41  abc". La cha ne (NomVariable) de longueur fixe (TailleChaîne) est dØclarØe comme suit :

Dim NomVariable As String * TailleChaîne

La fonction Len (pour length) est utilisØe pour dØterminer la longueur d’une cha ne, par exemple,  Len ("02 41 – abc") est Øgal  11.

7.1       Concaténation avec & (esperluette) et + 

ch1 = "Pro" ch2 = "gramme" ch3 = ch1 & ch2

ch4 = ch1 + ch2

ch3 et ch4 contiennent la cha ne "Programme". Les opØrateurs & et + sont Øquivalents dans le cas oø les opØrandes sont des cha nes. L’utilisation de l’opØration + entre des opØrandes de type diffØrent, par exemple, la ligne

 ch = "bonjour" + 22

provoque une erreur car Visual Basic tente de convertir la cha ne "bonjour" en un nombre, de mani?re l’additionner (+)  22. Pour cette raison, il est prØfØrable d’utiliser l’opØration & pour concatØner des cha nes.

7.2       Comparaison de chaînes 

Il est frØquent de devoir comparer deux cha nes. Pour cela, on dispose de la fonction StrComp et des opØrateurs <, <=, >, >=, =, <>. La comparaison entre deux cha nes est basØe sur les diffØrentes valeurs ANSI codant les cha nes.

La fonction StrComp (ch1, ch2) retourne 0 lorsque les cha nes ch1 et ch2 sont Øgales, -1 si la cha ne ch1 est infØrieure  ch2, 1 si la cha ne ch1 est supØrieure  ch2. A titre d’exemple, StrComp ("A", "B") est Øgal  1 car le code ANSI de la lettre A (= 65) est infØrieur  celui de la lettre B (= 66). Une option permet d’Œtre case-sensitive ou case-insensitive.

        •   L’opØrateur Like fournit un autre moyen de comparer deux cha nes.

7.3       Manipulation de caractères dans une chaîne 

Visual Basic fournit diffØrents moyens permettant la manipulation de caract?res dans une cha ne.

La fonction Mid$ (ch, pos, nb) retourne une sous-cha ne de la cha ne ch constituØe de nb caract?res  partir du caract?re indiquØ par la position pos (la position du premier caract?re est Øgale  1). Par exemple :

 sous_ch = Mid$ ("programme", 2, 3) ' sous_ch = "rog"

Cette fonction permet aussi de remplacer une portion de cha ne par une autre. Par exemple, les lignes

                        ch = "Bonjour monsieur"                 Mid$ (ch, 9, 1) = "M"

change le contenu de ch en "Bonjour Monsieur".

7.4       Left$, Right$, InStr, InStrRev, Split, Join  

La fonction Left$ (ch, nb) retourne une cha ne composØe de nb caract?res situØs dans la partie gauche de la cha ne ch, la fonction Right$ (ch, nb) fait de mŒme pour la partie droite de la cha ne. A titre d’exemple, considØrons les lignes suivantes

                            ch = "Bonjour madame"

                        ch1 = Left$ (ch, 7)                 ' ch1 = "Bonjour"     ch2 = Right$ (ch, 6)          ' ch2 = "madame"

La fonction InStr (pos, source, rech) retourne, si possible, un nombre entier reprØsentant la position dans la cha ne de base source de la cha ne cherchØe rech, cette recherche dØbutant  partir de la position pos. Si la cha ne rech n’est pas dØtectØe, la fonction InStr renvoie une valeur nulle. A titre d’exemple, considØrons les lignes suivantes

                            ch = "Bonjour madame"

 

 

                        i = InStr (1, ch, "on")

' i = 2

                            j = InStr (2, ch, "on")

' j = 2

                            k = InStr (3, ch, "on")

' k = 0

La fonction InStrRev a un mode de fonctionnement similaire  celui de InStr, si ce n’est que la recherche dØbute  partir de la fin de la cha ne (i.e., de droite  gauche dans la cha ne de base).

La fonction Split (expression, délimiteur) retourne dans un tableau (en fait un vecteur) des sous-cha nes de caract?res. L’extraction des sous-cha nes de la cha ne expression se fait au vue du délimiteur, par exemple :

Dim tableau() As String

tableau = Split ("ab" "c" "d1f", " ")

retourne les sous-cha nes "ab" dans tableau(0), "c" dans tableau(1) et "d1f" dans tableau(2).

La fonction Join (tableau source, délimiteur) est la fonction duale de Split. Elle retourne une cha ne joignant les sous-cha nes contenues dans le tableau (en fait un vecteur) tableau source, les sous-cha nes Øtant sØparØes par un délimiteur. Par exemple,

                        Dim ch As String

                        ch = Join (tableau, ".")

retourne la cha ne "ab.c.d1f" dans la variable ch.

7.5       LTrim$, RTrim$ et Trim$ 

Les fonctions LTrim$, RTrim$ et Trim$ (en anglais, le verbe trim signifie couper, tailler) tent les (Øventuels) espaces situØs respectivement  gauche,  droite,  la fois  gauche et  droite, d’une cha ne. A titre d’exemple, considØrons les lignes suivantes

            ch = "    Bonjour     "

 

            ch1 = LTrim$ (ch) 

' ch1 = "Bonjour     "

            ch2 = RTrim$ (ch) 

' ch2 = "    Bonjour"

            ch3 = Trim$ (ch)       

' ch3 = "Bonjour"

7.6       String$ et Space$ 

La fonction String$ (nb, ascii) retourne une cha ne de nb caract?res dont le code ASCII est spØcifiØ par ascii. A titre d’exemple, considØrons les lignes suivantes

            ch1 = String$ (4, "A")          ' ch1 = "AAAA"   ch1 = String$ (4, 66)             ' ch1 = "BBBB"

La fonction Space$(nb) retourne une cha ne composØe de nb caract?res d’espace.

7.7       Autres fonctions de traitement de chaînes 

La fonction Replace (source, ch_à_remplacer, ch_de_remplacement) retourne une cha ne dans laquelle la sous-cha ne ch_à_remplacer a ØtØ remplacØe plusieurs fois par la sous-cha ne ch_de_remplacement.

La fonction StrReverse (ch) retourne une cha ne contenant des caract?res dont l’ordre a ØtØ inversØ par rapport  la cha ne ch.

Les fonctions UCase$ (ch) et LCase$ (ch) convertissent tous les caract?res de la cha ne ch respectivement en majuscules (en anglais, upper-case letters) et minuscules (en anglais, lower-case letters). Les caract?res qui ne sont pas des lettres demeurent inchangØs.

7.8       Fonctions de conversion 

•     Asc et Chr$

La fonction Asc (ch) retourne un nombre entier correspondant au code ASCII du premier caract?re de la cha ne ch. RØciproquement, la fonction Chr$ (ascii) retourne le caract?re correspondant au code ASCII donnØ (nombre entier ascii).

•     IsNumeric, Val, Str$, Hex$ et Oct$

La fonction IsNumeric (ch) retourne True si la cha ne ch peut reprØsenter un nombre numØrique.

La fonction Val (ch) convertit la cha ne ch en une valeur numØrique (la lecture de la cha ne s’arrŒte au premier caract?re ne faisant apparemment pas partie d’un nombre). A titre d’exemple, considØrons les lignes suivantes

                            Dim ch1 As String, ch2 As String

Dim x As Integer, y As Double, z As Double ch1 = "  2.35 a" x = Val (ch1)           ' x = 2 y = Val (ch1)         ' y = 2.35

ch2 = "a12"

                                z = Val (ch2)              ' z = 0

La fonction Str$ (valeur) convertit une valeur numØrique en cha ne.

Il est possible de convertir des valeurs numØriques en cha ne sous une forme hexadØcimale (base 16), ou octale (base 8), via les fonctions Hex$ et Oct$ respectivement.

Visual Basic fournit plusieurs autres fonctions permettant de convertir une cha ne en un autre type de donnØe.

8        INTERFACE UTILISATEUR GRAPHIQUE : LES BASES 

Les Interfaces Utilisateurs Graphiques (IUG) sont construites  partir de contrôles. Un contrôle est un objet (un objet s’utilise  travers ses propriØtØs, ses mØthodes et ses ØvØnement associØs) avec lequel un utilisateur interagit via la souris, ou le clavier. Les contr les Visual Basic sont de deux types :

-       les contr les intrinsèques, aussi appelØs contr les standards, disponibles par dØfaut dans la barre de contr les de l’EDI. Une description rapide de ces contr les est donnØe au § 2.1.

-       les contr les ActiveX. Ces contr les sont mis  disposition dans la barre de contr les, en ouvrant le menu Projet | Composants, puis en cliquant l’onglet nommØ Contrôles et en cochant la case correspondant au contr le ActiveX  insØrer. A titre d’exemple, des contr les ActiveX sont disponibles dans le cadre des bases de donnØes, des rØseaux, sachant que certains des contr les sont spØcifiques aux diffØrentes versions (Learning, Professional, Enterprise) de Visual Basic.

Une description compl?te des contr les disponibles dans Visual Basic est accessible dans l’aide en ligne (taper sur la touche F1). DØcrivons ici quelques-uns des contr les les plus utilisØs,  travers une description de leurs propriØtØs, mØthodes et ØvØnements associØs. 

8.1       Le contrôle Label

Les contr les label (en fran ais, Øtiquette) servent  afficher du texte  l’Øcran, en mode crØation ou exØcution. Ce texte est non modifiable directement par l’utilisateur.

Ses propriétés

En dehors de la propriØtØ Name (par dØfaut, Label1, Label2, …) qui permet de diffØrencier les objets entre eux, la principale propriØtØ du contr le Label est Caption (notons que le texte par dØfaut correspond  celui mis par dØfaut dans la propriØtØ Name) qui permet l’affichage (si nØcessaire) d’un texte.

Comme pour un module feuille, les propriØtØs BackColor et ForeColor dØterminent respectivement la couleur du fond et celle du texte affichØ dans le contr le Label.

La propriØtØ Font permet de spØcifier la police utilisØe pour afficher le texte (nom, style (standard, italique, ), taille, ).

La propriØtØ Alignment permet au choix de cadrer le texte affichØ  droite,  gauche ou au centre.

La propriØtØ Enabled permet d’activer, ou non, le contr le lors de l’exØcution de l’application.

La propriØtØ Visible permet, par exemple en rØponse  un ØvØnement, de cacher (False), ou non (True), le contr le.

Ses méthodes

Nous retiendrons seulement la mØthode Move qui permet le dØplacement du Label.

Ses événements associés

Parmi les ØvØnements liØs  la souris, on peut retenir les ØvØnements : MouseDown, MouseUp, MouseMove, Click, DblClick.

Remarques :

-  Les ØvØnements MouseDown et MouseUp se produisent, dans l’ordre, lorsque l’utilisateur enfonce (MouseDown), ou rel che (MouseUp), un bouton de la souris.

-  L’ØvØnement MouseMove, gØnØrØ continuellement lorsque le pointeur de la souris se dØplace sur des objets. La gØnØration de cet ØvØnement s’intercale entre MouseDown et MouseUp.

-  L’ØvØnement Click se produit lorsque l’utilisateur clique un bouton de la souris puis le rel che sur un objet. Lorsque l’on effectue un clic, la sØquence d’ØvØnements gØnØrØs est, dans l’ordre, MouseDown, MouseUp, Click.

-  L’ØvØnement DblClick se produit lorsque l’utilisateur appuie sur, et rel che, un bouton de la souris deux fois de suite sur un objet. Lorsque l’on effectue un double clic, la sØquence d’ØvØnements gØnØrØs est, dans l’ordre, MouseDown, MouseUp, Click, DblClick, MouseUp.

8.2     Le contrôle TextBox 

Le contr le TextBox (en fran ais, zone de saisie) permet, via une zone  l’Øcran,  un utilisateur l’introduction, ou l’affichage, d’informations. Le tableau ci-dessous regroupe les principales propriØtØs, mØthodes et ØvØnement associØs  ces contr les.

 

Propriété, méthode, événement

Description

 

 

Propriété

 

Enabled

SpØcifie si l’utilisateur peut, ou non, agir sur le contr le.

 

MaxLength

SpØcifie le nombre maximal de caract?res pouvant Œtre entrØs (la valeur 0, mise par dØfaut, indique qu’il n’y a pas de limite).

 

MultiLine

Permet quand elle est True d’entrer du texte sur plusieurs lignes.

 

PasswordChar

SpØcifie le caract?re affichØ  la place des caract?res entrØs.

 

Text

SpØcifie le texte entrØ.

 

 

Méthode

 

SetFocus

Place le focus sur le contr le.

 

Evénement

 

Change

EvØnement appelØ  chaque fois que le contenu de la zone est modifiØ (par l’utilisateur ou par le programme).

 

Click, DblClick, MouseDown, MouseMove, MouseUp

EvØnements liØs  la souris.

 

GotFocus, LostFocus

EvØnements gØnØrØs lors de la rØception, resp. de la perte, du focus.

 

KeyDown, KeyPress, KeyUp

EvØnements liØs au clavier (gØnØrØs dans l’ordre : Touche pressØe, appuyØe, relachØe).

 

         

8.3     Le contrôle CommandButton

Les contr les CommandButton sont reprØsentØs par des boutons, appelØs aussi " boutons-poussoirs ", qu’un utilisateur peut cliquer pour exØcuter une action.

La propriØtØ Caption permet d’Øcrire un texte sur le bouton. La propriØtØ Enabled indique si le bouton est actif (True), ou non (False). Suite  un clic sur un bouton (actif), l’ØvØnement Click est appelØ.

8.4     Les contrôles ListBox, ComboBox 

Les listes permettent de visualiser une liste de diffØrents items (ØlØments). Pour rØaliser des listes, Visual Basic propose deux types de contr les : ListBox (liste) ou ComboBox (liste combinØe, ce contr le permet de combiner une liste avec une zone de saisie).

•   Le contrôle ListBox

Quand une liste (ListBox) contient plus d’items qu’elle ne peut en afficher, une barre de dØfilement (en anglais, scrollbar) verticale appara t automatiquement.

 

Propriété, méthode, événement

Description

 

 

Propriété

 

Columns

(entier) SpØcifie si le contr le a une barre de dØfilement horizontal, si oui, spØcifie le nombre de colonnes. Une valeur Øgale  0 indique qu’il n’y a pas de dØfilement horizontal, une valeur supØrieure  0 spØcifie le nombre de colonnes dans lesquelles les items sont listØs horizontalement.

 

Enabled

(boolØen) SpØcifie si l’utilisateur peut, ou non, agir sur le contr le.

 

List

(tableau de String) Contient les ØlØments de la liste, le plus petit indice du tableau est Øgal  0, le plus grand indice est Øgal  ListCount - 1.

 

ListCount

(entier) Contient le nombre d’ØlØments de la liste.

 

ListIndex

(entier de -1  ListCount - 1) (pour les listes  sØlection simple) Contient l’indice de l’ØlØment actuellement sØlectionnØ. La valeur - 1 signifie qu’aucun ØlØment n’est sØlectionnØ.

 

MultiSelect

(entier de 0  2) SpØcifie si l’utilisateur peut sØlectionner plus d’un item  la fois.

Une valeur Øgale  :

-  0 autorise la sØlection d’un seul ØlØment  la fois (sØlection simple),

-  1 autorise plusieurs choix, chaque clic sØlectionne/dØsØlectionne un item (sØlection multiple),

-  2 autorise un choix Øtendu d’items  possibilitØ d’utiliser les touches shift et contrôle (sØlection multiple Øtendu).

 

Selected

(tableau de boolØens) (pour les listes sØlection multiple) L’ØlØment d’indice i est actuellement sØlectionnØ si Selected (i) est True.

SelCount

(entier) (pour les listes             sØlection multiple) Indique le nombre d’ØlØments sØlectionnØs.

 

Sorted

(boolØen) Permet d’avoir une liste dont les ØlØments sont triØs par ordre alphabØtique.

 

Text

(String) SpØcifie l’ØlØment sØlectionnØ, correspond  List (ListIndex).

 

 

Méthode

 

AddItem

AddItem item [, index] permet d’ajouter (en fin de liste) l’ØlØment item dans la liste. Le param?tre optionnel index permet d’insØrer l’ØlØment item dans la liste  l’indice index.

 

Clear

Enl?ve tous les ØlØments de la liste.

 

RemoveItem

RemoveItem index permet d’enlever l’ØlØment d’indice index de la liste.

 

 

Evénement

 

Click

EvØnement activØ  chaque fois qu’un ØlØment de la liste est sØlectionnØ.

 

         

•   Le contrôle ComboBox

La liste combinØe permet l’affichage d’une liste ( sØlection simple) et d’une zone de saisie. Elle permet  l’utilisateur de sØlectionner un ØlØment dans une liste, ou d’entrer une donnØe dans une zone de saisie.

Il existe trois types de listes combinØes, dØfinis par la valeur (enti?re) de la propriØtØ Style :

-  0 (VbComboDropDown) (Valeur par dØfaut.) Liste déroulante modifiable. Comprend une zone de saisie avec,  c tØ, une fl?che dØroulante (drop down) permettant de faire appara tre une liste, dite dØroulante. L’utilisateur peut sØlectionner une option dans la liste, ou taper ce qui convient dans la zone de texte.

-  1(VbComboSimple) Liste modifiable simple. Comprend une zone de texte et une liste non dØroulante (toujours visible). L’utilisateur peut sØlectionner une option de la liste, ou taper ce qui convient dans la zone de texte. La taille d’une liste modifiable simple inclut les parties texte et liste. Par dØfaut, une liste modifiable simple est dimensionnØe de sorte que la liste ne s’affiche pas. Augmenter la valeur de la propriØtØ Height pour afficher une plus grande partie de la liste.

-  2(VbComboDrop-DownList) Liste déroulante (sans saisie possible). Ce type de liste permet seulement  l’utilisateur de sØlectionner une option dans la liste dØroulante (semblable  0 mais la saisie est interdite).

On retrouve des propriØtØs et mØthodes similaires celles des contr les TextBox.

8.5       Les contrôles Frame, CheckBox, OptionButton 

Les contr les Frame (en fran ais, cadre) permettent de regrouper (souvent de mani?re fonctionnelle) plusieurs contr les dans un cadre afin d’en faire un groupe identifiable. Un tel contr le est souvent couplØ aux cases  option. La propriØtØ Caption permet de donner un intitulØ au cadre, les propriØtØs Enabled et Visible permettent de rendre le cadre respectivement inactif (de mŒme pour les contr les qu’il contient), et non visible - cachØ - (de mŒme pour les contr les qu’il contient).

Les contr les CheckBox (en fran ais, case cocher) peuvent Œtre sØlectionnØs, ou non. Ils sont habituellement utilisØs pour exprimer des attributs optionnels, par exemple l’attribut Marié d’une personne. La propriØtØ Value permet de savoir si une case est dØsØlectionnØe - non cochØe - (0, vbUnChecked), ou sØlectionnØe (1, vbChecked), ou indisponible - la case est alors ombrØe - (2, vbGrayed) (cette valeur ne peut Œtre fixØe que par programmation).

L’ØvØnement Click est appelØ lorsqu’une case cocher est sØlectionnØe, ou dØsØlectionnØe.

Les contr les OptionButton (en fran ais, case option) fonctionnent sensiblement selon le mŒme principe, mais par groupe. Dans un mŒme groupe, seule une case  option peut Œtre sØlectionnØe  la fois, i.e., les cases  option d’un mŒme groupe sont exclusives les unes par rapport aux autres. Les cases  option forment un groupe lorsqu’elles sont dans le mŒme cadre.

La propriØtØ Value permet de savoir si une case  option est sØlectionnØe - pointØe - (True), ou dØsØlectionnØe (False).

L’ØvØnement Click est appelØ lorsqu’une case option est sØlectionnØe, ou dØsØlectionnØe.

8.6       Les menus 

Visual Basic fournit un moyen simple de crØer des menus via l’éditeur de menus (Menu Editor), voir le menu Outils | Créateur de menus. L’éditeur de menus est, en fait, une mani?re d’affecter les propriØtØs d’un menu. Une fois un menu crØØ, ses propriØtØs et ses ØvØnements associØs sont visibles dans les fenŒtres Propriétés et Code.

La bo te de dialogue de l’éditeur de menus contient les zones de saisies Caption et Name, pour indiquer respectivement le nom du menu visible par l’utilisateur (par exemple, pour entrer le menu Fichier, entrer

&Fichier), et le nom de la variable utilisØe par le programmeur (par exemple, mnuFichier). Il est bien sßr possible de crØer :

-  des menus dØroulants (listes dØroulantes d’options qui n’apparaissent qu’ la suite d’un clic sur un titre de menu) ;

-  des menus imbriquØs (cinq niveaux de retrait au maximum).

8.7       La fonction MsgBox 

La fonction MsgBox (bo te de message) permet d’afficher, de mani?re standard sous Windows, une bo te de dialogue fournissant un message  destination de l’utilisateur  propos de l’Øtat d’exØcution du programme. La bo te de message MsgBox peut, selon sa configuration, afficher un message (un texte), un ic ne de mŒme que des boutons (ces derniers permettant de fournir des informations au programme).

A titre d’exemple, le programme suivant permet - par un appui sur un bouton de commande - de faire appara tre une bo te de message (voir la figure qui suit). Selon la rØponse (appui sur bouton Yes ou No) de la bo te de message, le contenu de la variable en retour de la fonction MsgBox est affichØ dans la fenŒtre.

____________________   

Option Explicit

Private Sub CmdExemple_Click()

    Dim r As Integer

    r = MsgBox("Message", vbYesNo + vbInformation + vbApplicationModal, _

"Exemple")

    ' vbYesNo permet l'affichage des boutons Yes et No

    ' vbInformation permet l'affichage de l'icône information

    ' vbApplicationModal indique que la boîte de message est modale (i.e., l’utilisateur

    ' ne peut pas interagir sur une fenêtre tant que la boîte de message n’est pas fermée)

    ' r = 6 (vbYes) si le bouton Yes a été pressé

    ' r = 7 (vbNo) si le bouton No a été pressé

    Print r

End Sub

____________________

 

8.8       Le contrôle Timer 

Le contr le Timer (minuterie) pilote le syst?me d’horloge, il permet le dØclenchement de certaines actions  intervalles rØguliers. La propriØtØ Enabled permet de lancer, ou d’arrŒter, l’horloge, tandis que la propriØtØ Interval permet de dØfinir le nombre de millisecondes (compris entre 0 et 64 767 (~ 64,8 sec)) entre les ØvØnements de la minuterie.

Le seul ØvØnement disponible est Timer, il se produit lorsque l’intervalle de temps prØdØfini est ØcoulØ. Cet ØvØnement est donc pØriodique, il suffit de lui associer une procØdure pour que celle-ci soit dØclenchØe pØriodiquement. Notons que ce contr le n’est pas visible en mode exØcution.

9          BASE DE DONNÉES : ACCÈS 

L’utilisation de fichiers de type séquentiel est appropriØe dans le cas d’applications exploitant la plupart des informations contenues dans le fichier. L’emploi des fichiers à accès direct est plus adaptØ  des applications n utilisant qu’une faible partie des donnØes du fichier, et oø il est important de pouvoir localiser rapidement une donnØe. Visual Basic fournit de nombreuses manipulations sur de tels fichiers, qui, faute de temps, ne sont pas abordØes dans ce cours.

Le principal inconvØnient liØ  l’utilisation des fichiers (séquentiels ou à accès direct) vient de ce qu’ils permettent simplement un acc?s aux donnØes, sans possibilitØ de recherche plus efficace. Au contraire, les syst?mes de bases de donnØes vont organiser les donnØes de mani?re  faciliter la demande de requŒtes appropriØes  la recherche des donnØes souhaitØes.

Dans ce chapitre, nous abordons la gestion des bases de donnØes relationnelles. L’acc?s aux informations dans de telles bases, largement utilisØes, peut se faire dans l’environnement de Visual Basic via l’utilisation de requŒtes SQL (Structured Query Language, ce langage permet d’effectuer des requŒtes, i.e., de rechercher des informations satisfaisant un crit?re donnØ).

Les bases de donnØes relationnelles sont des reprØsentations logiques de donnØes qui permettent d’Øtablir des relations entre les donnØes, ceci sans se soucier de l’implantation physique des structures de donnØes.

Une base de donnØes relationnelle est composØe de tables (voir la figure suivante  titre d’exemple).


Table : EMPLOYES

Numéro Nom                 Département   Salaire   Localité

10235            H. Dupond 74                 10 250    Annecy

Un enregistrement               985           P. Pichon              62 9 823    Calais

Deux champs                       567               S. Vartan              49 15 234     Angers

12563            H. Lebrun             73                    7 852     ChambØry

                                                 Clés primaires                            Une colonne


Les lignes d’une table sont appelØes des enregistrements (en anglais, records), ou lignes (en anglais, rows). Dans l’exemple, la table EMPLOYES est constituØe de 4 enregistrements. Chaque colonne d’une table reprØsente un champ diffØrent. Dans l’exemple, la valeur du champ Numéro de chacun des enregistrements est appelØe la clé primaire, au sens oø elle permet de rØfØrencer les donnØes dans la table. Dans Visual Basic, une table est manipulØe comme un objet Recordset.

9.1       Introduction de l'ADO Data Control 6.0 et du DataGrid Control 6.0   

Une fois un contr le ADO Data Control mis en place (connectØ  une table d’une base de donnØes), il est possible de lier  ce contr le plusieurs contr les, dits dépendants, permettant l’affichage et la manipulation de donnØes, le tableau suivant liste quelques-uns de ces contr les.

Contrôle

Description

CheckBox

Peut Œtre rattachØ  un champ boolØen d’une table.

ComboBox

Peut Œtre liØ  une colonne d’une table.

DataCombo

Similaire  ComboBox, il permet de passer un champ donnØ  un autre contr le de donnØes.

DataGrid

Permet l’affichage et la manipulation d’une table, ou d’un rØsultat d’une requŒte.

DataList

Similaire au ListBox, il permet de passer un certain champ  un autre contr le de donnØes.

Hierarchical FlexGrid

Ce contr le est similaire au DataGrid, mais l’utilisateur peut seulement visualiser les donnØes  travers un FlexGrid.

Image

Affiche des images sous diffØrents formats.

ImageCombo

Similaire  ComboBox, il peut afficher des images dans une liste.

Label

Peut Œtre utilisØ pour afficher la valeur d’un champ d’une table.

Listbox

Peut Œtre liØ  une colonne d’une table.

MaskedEdit

Similaire  TextBox, il permet de contr ler le format de donnØes dans un champ.

Microsoft Chart

Permet la reprØsentation d’un tableau de donnØes sous forme d’un graphe.

MonthView

Affiche des dates dans un format appropriØ.

PictureBox

Une version plus ØlaborØe du contr le Image.

RichTextBox

Permet d’afficher, ou d’entrer, un texte formatØ.

TextBox

Permet d’afficher, ou d’entrer, un texte.

Ces contr les dépendants sont liØs au contr le ADO Data Control via les propriØtØs DataSource, DataField et Øventuellement DataFormat, afin de spØcifier le nom du contr le Data, un champ de la base de donnØes, et Øventuellement le format des donnØes.

Le contr le ADO Data Control est un moyen de contr ler l’acc?s  une base de donnØes, le contr le DataGrid affiche sous la forme d’une table, et permet la manipulation par un utilisateur, des donnØes demandØes  partir d’une base de donnØes.

Prenons comme exemple la feuille prØsentØe par la figure suivante. Sa construction se fait en utilisant les contr les ADO Data Control et DataGrid, elle ne nØcessite aucune programmation pour Øtablir la connexion avec, par exemple, la table Authors de la base de donnØes (accessible dans le rØpertoire \Microsoft Visual Studio\VB98). Notons qu’il existe trois autres tables : Publishers, Title Author et Titles (utiliser le logiciel Access pour visualiser ).

 

Le contr le ADO Data Control permet de connecter l’application  une base de donnØes, et rend possible la visualisation et la manipulation des donnØes par diffØrents contr les. Le contr le DataGrid permet un acc?s aisØ  un enregistrement.

Il est nØcessaire d’ajouter ces contr les dans la barre de contrôles (ces contr les ne sont pas intrinsèques). Pour cela, sØlectionner Composants…  partir du menu Projet afin d’afficher la bo te de dialogue Composants. Apr?s avoir glissØ ces deux contr les ( savoir Microsoft ADO Data Control 6.0 (OLEDB) et Microsoft Data Grid Control 6.0 (OLEDB), sur une feuille, il est possible de visualiser leurs propriØtØs. Celles qui sont relatives au contr le ADO Data Control sont, notamment, accessibles via un clic  droite sur le contr le, suivi d’une sØlection de Propriétés du contrôle ADODC, ce qui permet l’affichage d’une bo te de dialogue, intitulØe Pages de propriétés.

Les Øtapes suivantes permettent de crØer une connexion  la base de donnØes (cette procØdure se ram?ne crØer une source de données OLE DB) :

1.    Dans le cadre Source de la connexion, sØlectionner l’option Utiliser une chaîne de connexion et cliquer sur le bouton Créer pour afficher la bo te de dialogue Data Link Properties (une cha ne de connexion comprend, notamment, le fournisseur de la base de données, la localisation et le nom de la base de donnØes). est une base de donnØes de Microsoft Access.

2.    Dans l’onglet Provider, sØlectionner Microsoft Jet 3.51 OLE DB Provider.

3.    Dans l’onglet Connection, on introduit, dans le champ Select or enter a database name, le rØpertoire et le nom de la base de donnØes.

4.    Cliquer sur le bouton Test Connection afin de dØterminer si la connexion est Øtablie.

5.    Dans l’onglet RecordSource de la bo te de dialogue Pages de propriétés, sØlectionner, dans le champ Type de commande, 2 – adCmdTable pour spØcifier qu’une table dans la base de donnØes va Œtre la source des donnØes. SØlectionner Authors, dans le champ Nom de procédure stockée ou de table, pour spØcifier que les donnØes seront retrouvØes  partir de la table Authors dans la base de donnØes.

Une fois la chaîne de connexion spØcifiØe, il reste, avant de pouvoir exØcuter l’application,  fixer les valeurs des propriØtØs comme indiquØes dans le tableau suivant :

Contrôle

Propriété

Valeur

Adodc1

Caption

Table Authors de .

DataGrid1

DataSource

SØlectionner Adodc1.

AllowUpdate

SØlectionner False pour empŒcher une modification par l’utilisateur.

A titre d’essai, on pourra mettre :

-   une valeur True la propriØtØ AllowUpDate de DataGrid1 pour permettre une modification de la base de donnØes (au prØalable, penser  effectuer une copie du fichier modifiable  loisir, ce qui sous-entend de changer le contenu du champ Select or enter a database name),

-   un nom de table diffØrent dans la propriØtØ RecordSource pour permettre l’affichage de cette table.

9.2       Survol du langage SQL    

A titre d’exemple, nous allons considØrer la base de donnØes . Elle regroupe quatre tables, intitulØes Authors, Publishers, Title Author et Titles.

La table Authors regroupe trois colonnes contenant, pour chaque auteur, dans le champ :

Au_ID : Son numØro (unique) d’identification ID, ce numØro est la clØ primaire pour cette table,

Author : Son nom,

Year Born : Son annØe de naissance.

La table Publishers regroupe dix colonnes contenant, pour chaque Øditeur, dans le champ :

PubID : Son numØro (unique) d’identification ID,ce numØro est la clØ primaire pour cette table, - Name : Son nom,

Company Name : Son nom Øtendu,

Address : Le nom de sa rue,

City : Sa ville,

State : Son Øtat,

Zip : Son code postal,

Telephone : Son numØro de tØlØphone,

Fax : Son numØro de fax,

Comments : D’Øventuels commentaires.

La table Title Author regroupe deux colonnes contenant dans le champ :

ISBN : Le numØro ISBN d’un ouvrage,

Au_ID : Le numØro ID de l’auteur, ou d’un auteur, de cet ouvrage.

Cette table permet de lier les ouvrages  leurs auteurs (notons qu’un ouvrage peut Œtre Øcrit par plusieurs auteurs, et qu’un auteur peut Øcrire plusieurs ouvrages).

La table Titles regroupe huit colonnes contenant, pour chaque livre, dans le champ : - Title : Son titre,

Year Published : Son annØe de parution,

ISBN : Son numØro ISBN, ce numØro est la clØ primaire pour cette table,

PubID : Son numØro d’identification ID, ce numØro doit correspondre avec un numØro ID dans la table Publishers,

Description : Son prix,

Notes : D’Øventuelles notes,

Subject : Des mots-clØs sur le contenu du livre,

Comments : Une description du livre.

La figure suivante montre les relations entre ces tables. Le champ indiquØ en gras dans chaque table est la clØ primaire de la table.

 

Le langage SQL permet la dØfinition et l’extraction de donnØes  partir de bases de donnØes relationnelles. Dans le cadre de ce cours, nous ferons rØfØrence au langage SQL qu’aux travers des instructions listØes dans le tableau suivant :

 

Mot-clé SQL

Description

 

SELECT

SØlectionne (retrouve) des champs  partir d’une, ou plusieurs tables.

 

FROM

Pour indiquer les tables contenant les champs (associØ  SELECT).

 

WHERE

Crit?re de sØlection pour dØterminer les enregistrements  retrouver.

 

ORDER BY

Crit?re pour mettre en ordre les enregistrements.

INNER JOIN … ON

Permet de lier (fusionner) des tables entre elles.

 

         

•   Instructions SELECT, FROM

Le format de base d’une requŒte SELECT est :

                        SELECT * FROM TableName

L’astØrisque (*) indique que tous les champs de la table TableName sont sØlectionnØs. Par exemple, la sØlection de tous les champs de la table Authors utilise la requŒte :

                        SELECT * FROM Authors

Pour sØlectionner seulement les colonnes Au_ID et Author, on utilise la requŒte :

                        SELECT Au_ID, Author FROM Authors

•   Instruction WHERE

Le langage SQL permet la sØlection d’enregistrements satisfaisant un crit?re dit de sélection en utilisant le l’instruction optionnelle WHERE. Le format de base d’une requŒte SELECT avec un crit?re de sØlection est :

                        SELECT * FROM TableName WHERE critère

Par exemple, la sØlection des champs de la table Authors pour lesquels l’annØe de naissance (Year Born) de l’auteur est supØrieure, ou Øgale,  1950, se fait  travers la requŒte :

                        SELECT * FROM Authors WHERE [Year Born] >= 1950

La requŒte :

                        SELECT * FROM Authors WHERE Author Like 'a_r%'

permet de localiser les champs de la table Authors pour lesquels le nom de l’auteur (Author) commence avec la lettre a, laquelle est suivie d’un caract?re quelconque (spØcifiØ par _), lequel est suivi de la lettre r, laquelle est suivie d’un nombre quelconque de caract?res (spØcifiØ par %).

•    Instruction ORDER BY

Le rØsultat d’une requŒte peut Œtre visualisØ selon l’ordre alphabØtique, ou dans le sens inverse, en utilisant l’instruction optionnelle ORDER BY.

Par exemple, pour obtenir l’affichage des champs de la table Authors dans l’ordre alphabØtique des noms d’auteurs (Author), on utilise la requŒte :

                        SELECT * FROM Authors ORDER BY Author ASC

ASC (pour ASCending) spØcifie l’ordre alphabØtique (croissant), DESC (pour DESCending) spØcifie l’ordre alphabØtique inverse.

Notons que les instructions prØcØdentes peuvent se combiner pour ne former qu’une requŒte. Par exemple, pour localiser les enregistrements de tous les auteurs dont le nom commence par la lettre a, et ceci par ordre alphabØtique, on utilise la requŒte :

                        SELECT *

FROM Authors

                        WHERE Author Like 'a%'                          ORDER BY Author ASC

Une requŒte dans Visual Basic consiste en une (longue) cha ne.

•    Instruction INNER JOIN … ON

Il est souvent nØcessaire de fusionner des donnØes issues de plusieurs tables, ceci est possible en utilisant le mot-clØ INNER JOIN dans l’instruction FROM d’une requŒte SELECT.

INNER JOIN rØunit les enregistrements appartenant  deux, ou plusieurs, tables en testant les valeurs assorties (en accord) dans un champ qui est commun aux tables considØrØes.

Le format de base est :

                        SELECT * FROM Table1 INNER JOIN Table2 ON Table1.field = Table2.field

La partie " ON Table1.field = Table2.field " spØcifie les champs considØrØs dans les tables qui devront Œtre comparØs afin de dØterminer les enregistrements retenus. Par exemple, pour fusionner le champ

Author de la table Authors avec le champ ISBN de la table Title Author, dans un ordre alphabØtique par Author, de mani?re  disposer du, ou des, numØro(s) ISBN du, ou des, livre(s) Øcrit(s) par chacun des auteurs (cf. figure suivante), on utilise la requŒte :

                        SELECT Author, ISBN

                        FROM Authors INNER JOIN [Title Author]

                        ON Authors.Au_ID = [Title Author].Au_ID

                        ORDER BY Author ASC

 

On peut se reprØsenter la fusion effectuØe dans l’exemple prØcØdent, ainsi :

1.   On commence par le premier enregistrement de la table Authors.

2.   On cherche le champ Au_ID.

3.   On va dans la table Title Author pour trouver le, ou les, enregistrement(s) dont le champ Au_ID correspond  celui trouvØ dans l’Øtape 2.

4.   On consid?re l’enregistrement suivant dans la table Authors, puis on repasse  l’Øtape 2.

Remarque : La base de donnØes contient une requŒte prØdØfinie, intitulØe All Titles, qui permet, pour chaque ouvrage, l’affichage de son titre, son numØro ISBN, l’auteur (nom, prØnom), son annØe de parution, et le nom de l’Øditeur, via la requŒte (visible sous Access) suivante :

 

Notons que la requŒte produit, s’il y a lieu, un enregistrement pour chacun des auteurs d’un mŒme ouvrage.

9.3       Description de l'ADO Data Control 6.0 et du DataGrid Control 6.0   

Le tableau suivant dØcrit quelques propriØtØs, mØthodes et ØvØnements associØs au contr le ADO Data Control 6.0.

Propriété, méthode, événement

Description

Propriété

ConnectionString

SpØcifie une cha ne contenant des param?tres permettant de se connecter  la base de donnØes.

UserName

SpØcifie le nom de l’utilisateur lors d’une connexion  la base de donnØes.

Password

SpØcifie le mot de passe lors d’une connexion  la base de donnØes.

RecordSource

SpØcifie une cha ne contenant une requŒte, ou un nom de table (utilisØ pour extraire des donnØes).

CommandType

SpØcifie le type de commande utilisØe dans le RecordSource (adCmdTable pour une table, adCmdText pour une requŒte).

LockType

SpØcifie la fa on de bloquer les enregistrements pour empŒcher des utilisateurs de modifier des donnØes en mŒme temps.

Mode

SpØcifie les droits de connexion (lecture seule, Øcriture seule, lire/Øcrire, etc.).

MaxRecords

SpØcifie le nombre maximum d’enregistrements  retourner dans un objet Recordset.

ConnectionTimeout

SpØcifie le temps d’attente d’une connexion avant de gØnØrer une erreur.

Méthode

Refresh

Rafra chit les donnØes dans un objet Recordset  la suite d’un changement d’une propriØtØ dans le contr le ADO Data Control.

Evénement

EndOfRecordset

DØclenchØ lors d’une tentative d’acc?s apr?s le dernier enregistrement du Recordset.

WillChangeField

AppelØ avant qu’une opØration change la valeur d’un, ou plusieurs, champ(s).

FieldChangeComplete

AppelØ apr?s le changement de la valeur d’un, ou plusieurs, champ(s).

WillChangeRecord

AppelØ avant qu’une opØration change la valeur d’un, ou plusieurs, enregistrement(s).

RecordChangeComplete

AppelØ apr?s le changement de la valeur d’un, ou plusieurs, enregistrement(s).

WillChangeRecordset

AppelØ avant qu’une opØration change l’objet Recordset.

RecordsetChangeComplete

AppelØ apr?s un changement de l’objet Recordset.

WillMove

AppelØ avant une opØration changeant la position courante dans le Recordset.

MoveComplete

AppelØ apr?s un changement de la position courante dans le Recordset.

Une particularitØ fondamentale du contr le ADO Data Control est de pouvoir exØcuter des requŒtes SQL en cours d’exØcution via la propriØtØ RecordSource, ce qui permet un changement dynamique des donnØes manipulØes par ce contr le. A titre d’exemple, on va crØer un programme permettant l’exØcution de requŒtes SQL, introduites via un contr le TextBox par l’utilisateur, et visualisØes  l’aide d’un contr le DataGrid (cf. la saisie d Øcran dans la figure suivante).

 

Ce programme est listØ ci-dessous.

___________________________

' Demande de requêtes sur la base de données

' à travers le contrôle ADO Data Control

Option Explicit

Private Sub Form_Load()

' affichage du texte de la requête mise par défaut txtRequê = Adodc1.RecordSource Adodc1.Caption = Adodc1.RecordSource

End Sub

Private Sub cmdRequête_Click()

On Error Resume Next ’ l’exØcution reprend  l’instruction qui suit immØdiatement la derni?re instruction

’ ayant appelØe la procØdure contenant la routine de gestion d’erreur

      cmdRequête.Enabled = False                ’ dØsactivation (temporaire) du bouton

Adodc1.RecordSource = txtRequê

Call Adodc1.Refresh       ’ soumission de la requŒte  la base de donnØes, i.e., rafra chissement du Recordset; ’  l’ach?vement de la requŒte, les rØsultats sont automatiquement affichØs dans le ’ contr le DataGrid

Adodc1.Caption = Adodc1.RecordSource

End Sub

Private Sub Adodc1_MoveComplete( _               ’ signification des param?tres en annexe E

ByVal adReason As ADODB.EventReasonEnum, _

ByVal pError As ADODB.Error, _

adStatus As ADODB.EventStatusEnum, _ ByVal pRecordset As ADODB.Recordset)

cmdRequête.Enabled = True  ’ rØactivation du bouton pour permettre une nouvelle requŒte End Sub

___________________________

Les propriØtØs, fixØes lors de la phase de crØation de l’application, sont donnØes dans le tableau qui suit.

Contrôle

Propriété

Valeur

Adodc1

ConnectionString

SpØcifie la cha ne de connexion.

RecordSource

Cliquer le bouton de cette propriØtØ. SØlectionner 1 - adCmdText dans le champ CommandType, et introduire "SELECT * FROM Authors" dans le champ CommandText (SQL).

DataGrid1

DataSource

Adodc1

cmdRequête

Caption

RequŒte dØfinie par l’utilisateur.

txtRequête

Multiline

True

ScrollBars

2 - Vertical

Relativement au contr le DataGrid :

1.   La propriØtØ AllowAddNew mise  True ( False par dØfaut) permet d’utiliser la derni?re ligne du contr le DataGrid pour entrer un nouvel enregistrement.

2.   Si la propriØtØ AllowDelete est  True (mise  False par dØfaut), l’utilisateur peut dØtruire un enregistrement en cliquant le rectangle gris situØ  gauche de la ligne pour sØlectionner la ligne dans la table, et en appuyant sur la touche Suppr du clavier.

3.   La propriØtØ AllowUpdate mise  True ( False par dØfaut) permet  l’utilisateur de modifier les

donnØes.

9.4       L'objet Recordset    

Recordset est en fait un objet sur lequel s’appuie un contr le Data pour manipuler les enregistrements d’une base de donnØes.

•    L’objet Fields permet de manipuler des colonnes de donnØes dans un Recordset. Par exemple,

                        [Data control].Recordset.Fields ("Nom_d_un_champ")

retourne un objet Fields reprØsentant la valeur dans l’enregistrement courant de la colonne

Nom_d_un_champ.

Il existe d’autres propriØtØs de l’objet Fields, notamment, Attributes, Size, Type et Value.

La propriØtØ Bookmark d’un Recordset peut Œtre utilisØe pour pointer vers l’enregistrement courant. Pour cela, il suffit de dØclarer une variable de type Variant et de lui assigner la valeur de Bookmark. Par exemple, en supposant que Localisation_bookmark est de type Variant, l’instruction

                        Localisation_bookmark = [Data control].Recordset.Bookmark

mØmorise l’emplacement de l’enregistrement courant.

Les propriØtØs BOF et EOF permettent de savoir si on se trouve au dØbut, respectivement  la fin, du jeu d’enregistrements, i.e., avant le premier enregistrement, respectivement apr?s le dernier enregistrement.

• Un objet Recordset poss?de cinq mØthodes Move qui permettent de se dØplacer au sein d’un jeu d’enregistrements,  savoir :  

Méthode

Description

MoveFirst

Permet de se positionner sur le premier enregistrement.

MoveLast

Permet de se positionner sur le dernier enregistrement.

MoveNext

Permet de se positionner sur l’enregistrement suivant.

MovePrevious

Permet de se positionner sur l’enregistrement prØcØdent.

Move n

Permet de se dØplacer de n enregistrements (vers l’avant ou l’arri?re, selon le signe de n).

Les quatre premi?res mØthodes se rapportent aux quatre boutons dessinØs sur le contr le Data (voir la figure qui suit).

 

Illustration : A titre d’exercice, rØaliser un programme dont le comportement correspond            .

10       MULTIPLE DOCUMENT INTERFACE    

Dans les chapitres prØcØdents, ont ØtØ dØveloppØes des applications dites Single Document Interface (SDI). Quand une application SDI telle que Notepad s’exØcute, seul un document  la fois est affichØ (Notepad est un Øditeur de texte tr?s simple permettant l’Ødition d’un seul document (en fait un fichier text)  la fois).

Au contraire, une application telle que Word permet l’Ødition de plusieurs documents en mŒme temps, chacun de ces documents ayant sa propre fenŒtre. Word est un exemple d’application dite Multiple Document Interface (MDI), i.e., une application dans laquelle plusieurs documents peuvent Œtre ouverts en mŒme temps. Notons qu’un document n’est pas nØcessairement un fichier texte (text), cela peut-Œtre un fichier image (bitmap), un fichier compressØ, etc.

Chaque fenŒtre contenue dans une application MDI est appelØe fenŒtre fille (en anglais : child), alors que la fenŒtre de l’application - qui est unique - est appelØe fenŒtre mère (on parle aussi de fenŒtre parente, ou conteneur). Une fenŒtre fille se comporte comme n’importe quelle fenŒtre, exceptØ qu’elle ne peut que rester l’intØrieur de la fenŒtre mère (ce qui augmente la cohØrence de l’application). Notons qu’une fenŒtre mère peut contenir des fenŒtres filles ayant chacune une fonctionnalitØ propre, par exemple, une fenŒtre fille peut permettre l’Ødition d’une image, alors qu’une autre va permettre d’Øditer un texte.

Une fenŒtre MDI fille est reprØsentØe dans Visual Basic avec une feuille MDI (en anglais : MDI form). A partir d’un projet de type EXE Standard, Visual Basic crØe automatiquement une feuille Form1, l’ajout au projet d’une feuille MDI mère, nommØe par dØfaut MDIForm1, se fait en sØlection Projet | Ajouter une feuille MDI (notons qu’un projet ne peut contenir qu’une seule feuille MDI mère).

La crØation d’une application MDI sous-entend l’utilisation de plusieurs feuilles (au minimum une feuille mère et une feuille fille). En fait, une feuille fille est une feuille standard (telle que Form1) pour laquelle la propriØtØ MDIChild est mise - en mode crØation -  True (l’ajout de feuille supplØmentaire se fait en sØlectionnant Projet | Ajouter une feuille).

Au contraire des feuilles standards, une feuille MDI mère peut seulement contenir des contr les :

 - disposant d’une propriØtØ Align, c’est le cas des contr les PictureBox (notons que rien n’empŒche  ces derniers de contenir des contr les n’ayant pas la propriØtØ Align, par exemple, des CheckBox, des

ComboBox). La propriØtØ Align dØcrit oø un contr le est localisØ (au sommet,  gauche, etc.) ;  - ou, non visibles en mode exØcution, par exemple un contr le Timer (contr le minuterie).

Comme pour les feuilles standards, les feuilles mères, ou filles, peuvent contenir des menus (la crØation d’un menu est facilitØe par l’emploi de la bo te de dialogue Créateur de menus, accessible  partir du menu Outils. Le menu de la feuille mère est affichØ seulement si la fenŒtre fille active (i.e., ayant le focus) ne comporte pas de menu. Si la fenŒtre fille active a un menu, il appara tra dans la fenŒtre mère, au dØtriment du menu de la fenŒtre mère.

Notons que le fait d’agrandir au maximum (clic sur le bouton Agrandir) une fenŒtre fille fait que son Caption est automatiquement combinØ avec le Caption de la fenŒtre mère.

Lorsqu’un programme contient plusieurs feuilles, on utilise la bo te de dialogue Projets | Propriétés du projet pour spØcifier un objet de démarrage. Cet objet est souvent la feuille MDI mère dans le cas d’une application MDI. Ainsi en mode exØcution, la feuille mère est automatiquement chargØe en premier et affichØe, cette feuille pouvant ensuite gØrer les feuilles filles.

Pour certaines applications, il est parfois difficile d’identifier la feuille active au dØpart. Aussi, Visual Basic fournit une procØdure, intitulØe Main (procØdure placØe dans un module standard (i.e., dans un fichier .bas) dont l’entŒte est : Private Sub Main ()), qui, une fois positionnØe via la bo te de dialogue Projets | Propriétés du projet pourra Œtre l’objet de démarrage.  

Il est souvent utile de permettre la crØation dynamique de feuilles. En utilisant des variables objets, il est possible de crØer plusieurs copies, ou instances, d’une mŒme feuille, chaque nouvelle instance possØdant les mŒmes propriØtØs, mØthodes et ØvØnements associØs. Par exemple, la procØdure ØvØnementielle suivante permet l’affichage d’une feuille qui est une copie de la feuille Form1.

            Private Sub mnuFNouveau_Click ()

                                Dim NouvelleFeuille As Form                    ' voir annexe F

                        Set NouvelleFeuille = New Form1

                       

            End Sub

Notons que la variable objet NouvelleFeuille, de type Form,est locale  la procØdure mnuFNouveau. Mais, mŒme si cette variable n’existe plus en dehors de la procØdure, la feuille crØØe continue d’exister. Par contre, elle ne peut plus Œtre rØfØrencØe par le nom NouvelleFeuille. Une solution consiste  utiliser le mot clØ Me, ce mot clØ permet de rØfØrencer une feuille, pour autant qu’elle soit active (ayant le focus). Il est aussi possible d’accØder  une feuille active en utilisant la propriØtØ ActiveForm. Notons que si un objet MDIForm est actif, cette propriØtØ spØcifie la feuille MDI fille active.      

11        RÉSEAUX, INTERNET ET WEB 

Les applications rØseaux, dØcrites ici, utilisent une communication basØe sur un mod?le d’interaction client-serveur. L’application qui Øtablit le contact (de mani?re active) s’appelle le client, alors que celle qui attend (passivement) un contact s’appelle le serveur.

Dans le cas oø la connexion, rØclamØe par le client, est acceptØe (par le serveur), alors le client et le serveur communiquent via des sockets. Ainsi, la gestion de rØseaux par une application est semblable  celle de transferts de donnØes dans un fichier  un programme peut lire  partir d’un socket, ou Øcrire sur un socket, aussi simplement que s’il s’agissait de lire, ou d’Øcrire, dans un fichier.

Deux formes de communication sont supportØes par les protocoles de transport : Avec ou sans connexion. Dans le premier cas, deux applications doivent Øtablir une connexion avant de pouvoir s’en servir pour transmettre des donnØes. A titre d’exemple, TCP (Transmission Control Protocol) fournit aux applications une interface orientØe connexion : Une application doit d’abord demander  TCP d’ouvrir une connexion avec une autre application, ensuite les deux applications peuvent s’Øchanger des donnØes. A la fin de la communication, la connexion doit Œtre close. Cette communication est similaire  celle d’une conversation tØlØphonique.

L’autre choix consiste en une interface sans connexion qui permet  une application d’envoyer  tout moment un message n’importe quelle destination. Dans chacun de ses messages, l’application Ømettrice doit en spØcifier la destination. A titre d’exemple, UDP (User Datagram Protocol) fournit un transport sans connexion. Cette communication est similaire  des envois de lettres par la poste.             

Le protocole UDP ne garantit pas une bonne rØception des paquets : Des paquets peuvent se perdre, se dupliquer, ou arriver hors dØlai, ce qui nØcessite l’utilisation de programmes supplØmentaires pour traiter ces probl?mes.

Visual Basic fournit plusieurs contr les permettant le dØveloppement d’applications orientØes rØseaux. Le tableau qui suit dØcrit les trois principaux contr les, dØtaillØs par la suite.

Contrôle

Description

WebBrowser

Permet aux applications de disposer d’un navigateur Web, de visualiser des documents et de transfØrer des fichiers. Ce contr le permet des dØveloppements semblables  Internet Explorer.

Internet Transfert

Permet aux applications d’utiliser les protocoles HTTP (HyperText Transfer Protocol) ou FTP (File Transfer Protocol).

Winsock

Permet la programmation d’applications client-serveur  travers UDP ou TCP.

11.1     Le contrôle WebBrowser    

Internet utilise plusieurs protocoles. Le protocole HTTP, omniprØsent  travers le Web, utilise des URLs (Universal Resource Locators) comme rØfØrences externes pour localiser des ressources sur Internet. Visual Basic permet la manipulation d’URL travers le contr le WebBrowser. Ce contr le, non intrinsèque, est accessible  travers le composant Microsoft Internet Controls.

A titre d’exemple, on propose le programme suivant qui correspond  une version rudimentaire d un navigateur Web. En fait, il s agit d un simple interprØteur HTML pour l affichage des documents.

______________________________      

' Utilisation du contrôle WebBrowser pour faire un navigateur Web (élémentaire) Option Explicit

Private Sub Form_Load()

   ' Affiche la page par défaut (home page) lors de l'enregistrement de la feuille    Call WebBrowser1.GoHome

End Sub

Private Sub cmdGo_Click()

   ' Aller à l'URL spécifiée dans (si est non vide !!)

   On Error Resume Next

   If <> "" Then

      Call WebBrowser1.Navigate()

   End If

End Sub

Private Sub cmdBack_Click()

   ' Aller à la page précédente contenue dans la liste Historique

   On Error Resume Next

   Call WebBrowser1.GoBack

End Sub

Private Sub cmdForward_Click()

   ' Aller à la page suivante contenue dans la liste Historique

   On Error Resume Next

   Call WebBrowser1.GoForward

End Sub

Private Sub cmdHome_Click()

   ' Aller à la page par défaut (home page)

   On Error Resume Next

   Call WebBrowser1.GoHome

End Sub

Private Sub Form_Resize()

   ' Dimensionnements de txtURL et WebBrowser1

   On Error Resume Next

   WebBrowser1.Width = ScaleWidth -     WebBrowser1.Height = ScaleHeight -     txtURL.Width = ScaleWidth -

End Sub

Private Sub WebBrowser1_DocumentComplete( _

      ByVal pDisp As Object, URL As Variant)

   ' Affichage de l'URL dans une fois le transfert de la page terminée    = URL

End Sub

______________________________

La figure qui suit est une recopie d Øcran du navigateur Web.

 

Les valeurs des propriØtØs de la page et des contr les constituant l’application sont indiquØes dans le tableau suivant :

Contrôle

Propriété

Valeur

frmWebBrowser

Caption

Exemple de navigateur Web

WindowState

2  Maximized (permet un agrandissement maximal)

lblURL

Caption

URL :

txtURL

Text

(vide)

cmdGo

Caption

Aller  l’URL

cmdBack

Caption

PrØcØdente

cmdForward

Caption

Suivante

cmdHome

Caption

DØmarrage

WebBrowser1

Valeurs par dØfaut

Remarques :

-  La mØthode GoHome de WebBrowser1, appelØe dans la procØdure Form_Load, permet le chargement de la page par dØfaut (cette page correspond  celle par dØfaut dans Internet Explorer, spØcifiØe dans Internet Explorer via le cadre Page de démarrage de la bo te de dialogue Outils | Options Internet ).

-  L’affichage de l’URL, effectuØ dans la procØdure ØvØnementielle WebBrowser1_DocumentComplete une fois la page affichØe, peut Œtre diffØrent de l URL introduite par l’utilisateur (quelquefois un serveur Web redirige les URLs vers d’autres emplacements).

-  LiØs au contr le WebBrowser, il existe d’autres propriØtØs, mØthodes et ØvØnements, tels que :

            pour les propriØtØs : Busy, LocationName, LocationURL, Offline,              pour les mØthodes : GoSearch, Refresh, Stop,       pour les ØvØnements : DownloadBegin, DownloadComplete, ProgessChange.

11.2     Le contrôle Internet Transfer     

Le contr le Internet Transfer op?re  un niveau plus bas que celui du contr le WebBrowser, il supporte deux des protocoles les plus connus : HTTP (HyperText Transfer Protocol) et FTP (File Transfer Protocol).

A la diffØrence du contr le WebBrowser qui permet l’affichage d’une page Web, le contr le Internet Transfer fournit uniquement le document HTML (accessible par son URL), ceci pour, par exemple, parser (en fran ais, effectuer une analyse grammaticale) le texte en vue d’une dØtection spØcifique. Le protocole FTP permet le transfert de fichier entre ordinateurs via Internet. Le contr le Internet Transfer permet un transfert synchrone (le programme attend la fin du transfert) ou asynchrone (l’exØcution du programme se poursuit et un ØvØnement se produit pour indiquer au programme la fin du transfert).

Ce contr le, non intrinsèque, est accessible travers le composant Microsoft Internet Transfer Control

6.0.

        •    Réalisation d’un client HTTP à travers la méthode OpenURL

Dans le programme suivant, l’utilisateur introduit l adresse URL d un serveur HTTP. Le fait de cliquer sur le bouton Aller à l'URL provoque l’affichage du document, au format HTML, spØcifiØ par l URL (cf. la saisie d Øcran dans la figure suivante).

______________________________   

' Utilisation du contrôle Internet Transfer pour afficher le contenu d'un fichier

' à travers une connexion HTTP

Option Explicit

Private Sub cmdGo_Click()

   ' Aller à l'URL spécifiée dans (si est non vide !!)

   On Error Resume Next    If <> "" Then       = "Recherche du fichier "       = Inet1.OpenURL()

   End If

End Sub

Private Sub Form_Resize()

   ' Dimensionnements de txtURL et txtOutput

   On Error Resume Next    txtOutput.Width = ScaleWidth -     txtOutput.Height = ScaleHeight -     txtURL.Width = ScaleWidth -

End Sub

______________________________

 

Les propriØtØs des contr les sont dØcrites dans le tableau qui suit.

Contrôle

Propriété

Valeur

frmHTTP

Caption

Utilisation du protocole HTTP

lblURL

Caption

URL

txtURL

Text

(vide)

cmdGo

Caption

Aller  l’URL

txtOutput

Multiline

True

ScrollBars

3  Both

Inet1

Valeurs par dØfaut

Remarques :

-  L’instruction = Inet1.OpenURL() utilise la mØthode OpenURL du contr le Internet Transfer pour transfØrer le document spØcifiØ par l’URL. Le transfert se fait de mani?re synchrone, en effet le programme attend tant que le transfert n’est pas terminØ.

-  En fait, pour afficher un document HTML, il serait prØfØrable d utiliser,  la place d un contr le TextBox, un contr le RichTextBox, ceci pour permettre de prendre en compte une Ødition sous UNIX.

Conseil : Lors de l utilisation de la mØthode OpenURL, ou de la mØthode Execute (dØcrite par la suite), il n’est pas nØcessaire de dØfinir la propriØtØ Protocol. En effet, le contr le Internet Transfer active automatiquement le protocole appropriØ, tel qu’il est dØterminØ par la partie protocole de l’URL.

        •    Réalisation d’un client FTP à travers la méthode Execute

Dans le programme suivant, on permet  l’utilisateur d’introduire des commandes FTP (Øcrites en MAJUSCULE). Au prØalable, l’utilisateur introduit l’adresse URL du serveur FTP, le nom de l’utilisateur (anonymous permet un acc?s anonyme, minimal  des fichiers) et un mot de passe (lors d’un acc?s anonyme, utilisØ guest ou son adresse de courrier Ølectronique). Le fait de cliquer sur le bouton Exécution de la commande FTP provoque l’exØcution de la commande FTP. La figure qui suit est une recopie d Øcran de l application.

Relativement  la commande GET, l’instruction suivante :

                        GET   C:\temp\

permet d’obtenir la copie du fichier distant , situØ dans le rØpertoire rep1. Le contenu du fichier est placØ dans le fichier local ayant pour nom , situØ dans le rØpertoire (bien sßr existant) C:\temp.   

Les propriØtØs, associØes aux diffØrents contr les, sont dØcrites dans le tableau qui suit.

______________________________       

' Transfert d'un fichier texte via FTP

Option Explicit

Dim command_get As Boolean

Dim fichier As String

Private Sub cmdGo_Click()

   =

   Inet1.UserName =     Inet1.Password =     = _

      & vbCrLf & "COMMANDE FTP : " & & vbNewLine    If InStr(1, UCase$(), "GET") <> 0 Then

                   command_get = True            ‘ Commande FTP relative à GET

        Dim fin As Integer

        fin = InStrRev(, " ")

        fichier = Mid$(, fin + 1, Len() - fin)         ' Debug.Print fichier

   Else

                   command_get = False           ‘ Commande FTP non relative à GET

   End If

   Call Inet1.Execute(, )

End Sub

Private Sub Inet1_StateChanged(ByVal State As Integer)    Select Case State       Case icResolvingHost          = & "Recherche adresse IP de l'ordinateur hôte" & vbCrLf       Case icHostResolved          = & "Adresse IP de l'ordinateur hôte trouvée" & vbCrLf

      Case icConnecting          = _

& "En cours de connexion" & vbCrLf

      Case icConnected          = _

& "Connexion établie" & vbCrLf       Case icRequesting

         = & "Envoie d'une demande" & vbCrLf       Case icRequestSent

         = & "Demande effectivement envoyée" & vbCrLf

      Case icReceivingResponse

         = _

& "Réception d'une réponse" & vbCrLf

      Case icResponseReceived

         = _

& "Réception effective d'une réponse" & vbCrLf

      Case icDisconnecting

         = _

& "En cours de déconnexion" & vbCrLf

      Case icDisconnected          = _

& "Déconnexion effective avec l'ordinateur hôte" & vbCrLf       Case icError

         = & "Erreur : " & vbCrLf & _

         "Code : " & Inet1.ResponseCode & vbCrLf & Inet1.ResponseInfo

      Case icResponseCompleted          Dim data As Variant

         = & _

"Exécution de la demande terminée, toutes les données ont été reçues" & vbCrLf

         If command_get = False Then

            ' Extraction de données

            ' (utiliser icByteArray, plutôt que icString, lors de la

            '  réception d’un fichier binaire)             data = Inet1.GetChunk(1024, icString)             Do While LenB(data) > 0

= & vbCrLf & data & vbCrLf

                ' Extraction de données

                data = Inet1.GetChunk(1024, icString)             Loop

= & vbCrLf & data & vbCrLf

         Else

            ' Ecriture de données dans un fichier   (voir annexe G pour plus de détails)

            ' Ouverture du fichier : Open Nom_du_fichier For Mode As Identificateur

            Open fichier For Binary Access Write As #1  ‘ identificateur = 1

            ' Extraction de données

            data = Inet1.GetChunk(1024, icString)

            Do While LenB(data) > 0

                ' Ecriture : Put #identificateur, numéro_d’enregistrement, variable                 Put #1, , data

                ' Extraction de données                 data = Inet1.GetChunk(1024, icString)

            Loop

            Put #1, , data

            Close #1      ' Fermeture du fichier

         End If End Select

   txtLog.SelStart = Len()

End Sub

______________________________

 

Contrôle

Propriété

Valeur

frmFTP

Caption

Protocole FTP

lblSite

Caption

Site FTP

txtSite

Text

(vide)

lblUserName

Caption

UserName

txtUserName

Text

anonymous

lblPassword

Caption

Password

txtPassword

Text

(vide)

PasswordChar

*     (permet la crØation d un champ de mot de passe)

txtCommand

Caption

(vide)

cmdGo

Caption

ExØcution de la commande FTP

txtLog

Multiline

True

Inet1

Protocol

2 - icFTP

Remarques :

-   Contrairement la mØthode OpenURL, la mØthode Execute fonctionne selon un mode asynchrone, en effet l’exØcution du programme peut se poursuivre durant le service demandØ au serveur.

-   L’application est automatiquement prØvenue d’une rØponse de la part du serveur via la procØdure ØvØnementielle Inet1_StateChanged. La structure Select Case se base sur des constantes de la forme icState pour indiquer l’Øtat courant (State) du contr le. Ces changements d’Øtat sont indiquØs dans le contr le TextBox intitulØ txtLog.

-   L’Øtat icResponseCompleted indique que la requŒte faite aupr?s du serveur est terminØe, il s’ensuit une phase de sauvegarde dans un fichier. L’instruction

                        data = Inet1.GetChunk(1024, icString)

(en fran ais chunk signifie gros morceau) permet de rØcupØrer des donnØes dans un segment de taille 1024. La constante icString permet de rØcupØrer une cha ne de caract?res, alors que la constante icByteArray permettrait de rØcupØrer les donnØes sous forme d’un tableau d’octets (utilisØ dans le cas de fichiers binaires).

        •    Rappels de quelques commandes FTP

Commande

Description

CD file1

Change le dossier en cours par celui spØcifiØ dans file1.

CDUP

Retour au dossier parent. quivaut  "CD..".

CLOSE

Ferme la connexion FTP en cours.

DELETE file1

Supprime le fichier spØcifiØ dans file1.

DIR file1

Dossier. Recherche le dossier spØcifiØ dans file1. Les caract?res gØnØriques sont autorisØs mais l’h te distant dicte la syntaxe. Si l’argument file1 est omis, la liste compl?te du dossier de travail en cours est renvoyØe. 

Utiliser la mØthode GetChunk pour renvoyer la liste du dossier. 

GET file1 file2

RØcup?re le fichier distant spØcifiØ dans file1 et crØe le nouveau fichier local spØcifiØ dans file2.

LS file1

Liste. Recherche le dossier spØcifiØ dans file1. Les caract?res gØnØriques sont autorisØs mais l’h te distant dicte la syntaxe. Utiliser la mØthode GetChunk pour renvoyer les fichiers du dossier.

MKDIR file1

CrØe le dossier spØcifiØ dans file1.

PUT file1 file2

Copie un fichier local spØcifiØ dans file1 vers l’h te distant spØcifiØ dans file2.

PWD

Impression du dossier de travail. Renvoie le nom du dossier en cours. Utiliser la mØthode GetChunk pour renvoyer les donnØes.

QUIT

Termine la connexion en cours pour l’utilisateur.

RECV file1 file2

RØcup?re le fichier distant spØcifiØ dans file1 et crØe le nouveau fichier local spØcifiØ dans file2. quivaut  GET.

RENAME file1 file2

Donne au fichier distant spØcifiØ dans file1 le nouveau nom spØcifiØ dans file2.

RMDIR file1

Supprime le dossier distant spØcifiØ dans file1.

SEND file1 file2

Copie d’un fichier local spØcifiØ dans file1, vers l’h te distant spØcifiØ dans file2. quivaut  PUT.

SIZE file1

Renvoie la taille du dossier spØcifiØ dans file1.

Remarque : Certaines des commandes listØes ci-dessus ne sont pas autorisØes si l’utilisateur ne poss?de pas les droits correspondants sur le serveur h te. Par exemple, souvent, les sites FTP anonymes n’autorisent pas la suppression de fichiers ou de dossiers.

11.3     Le contrôle Winsock     

Le contr le Winsock permet  des applications client-serveur de communiquer via les protocoles TCP ou UDP. Nous n’utiliserons dans cette section que le protocole TCP.

        •    Construction d'un serveur TCP élémentaire

Plusieurs Øtapes sont  effectuer pour construire un serveur :

-   L’Øtape 1 consiste  ajouter un contr le Winsock  la feuille. Ce contr le, non intrinsèque, est accessible  travers le composant Microsoft Winsock Control 6.0.

-   On spØcifie dans l’Øtape 2 le numØro de port, utilisØ lors de connexions avec des clients, travers la propriØtØ LocalPort du contr le Winsock. Chaque client fera une requŒte au serveur via ce port.

-   L’Øtape 3 permet au serveur d’attendre une demande de connexion par un client  travers la mØthode Listen du contr le Winsock. Le serveur est informØ d une demande de connexion par un client  travers l’exØcution de la procØdure ØvØnementielle ConnectionRequest.

-   L’Øtape 4 consiste accepter la connexion entrante  travers la mØthode Accept du contr le Winsock. Une fois cette mØthode appelØe, des donnØes peuvent Œtre transmises entre le serveur et le client. Avant d’accepter la connexion, vØrifier que l’Øtat (State) du contr le Winsock correspond  sckClosed. Dans le cas contraire, il s’agit d’appeler la mØthode Close pour fermer la prØcØdente connexion. Si la connexion entrante est refusØe, l’homologue (client) re oit l’ØvØnement Close.

-   L’Øtape 5 est relative  la phase de communication entre le serveur et le client.

La procØdure ØvØnementielle DataArrival du contr le Winsock est exØcutØe lorsque des donnØes parviennent au serveur. L’instruction tcpServer.GetData (message) place les donnØes dans la cha ne de caract?res message (2 arguments optionnels permettent de spØcifier le type de donnØes re ues et la longueur maximale autorisØe des donnØes).

Afin d’envoyer des donnØes au client, on utilise la mØthode SendData du contr le Winsock. Par exemple, l instruction tcpServer.SendData (message) permet de transmettre les donnØes contenues dans message.

-   L’Øtape 6 se produit lorsque la transmission des donnØes est terminØe. Le fait que le client ferme la connexion provoque l’exØcution de la procØdure ØvØnementielle Close du contr le Winsock. La connexion serveur devra Œtre fermØe via l’instruction tcpServer.Close.

Un contr le Winsock doit Œtre attribuØ  chaque connexion avec un client. Le fait de pouvoir disposer dans Visual Basic de tableau de contr les permet la crØation de serveurs capables de gØrer simultanØment plusieurs connexions, ceci sans crØer a priori un ensemble suffisant de contr les Winsock.

        •    Construction d'un client TCP élémentaire

Plusieurs Øtapes sont  effectuer pour construire un client :

-   L’Øtape 1 consiste  ajouter un contr le Winsock  la feuille (accessible  travers le composant Microsoft Winsock Control 6.0).

-   Dans l’Øtape 2, le contr le Winsock c tØ client doit pouvoir localiser :

-   l’ordinateur distant sur lequel un contr le envoie, ou re oit, des donnØes. Vous pouvez fournir soit un nom d’h te, par exemple "", soit une adresse IP sous forme de cha ne ponctuØe, telle que "127.0.1.1". Ce nom est placØ dans la propriØtØ RemoteHost du contr le Winsock ;

-   le numØro de port distant auquel la connexion doit Œtre faite. Ce numØro est placØ dans la propriØtØ RemotePort du contr le Winsock.

-   Dans l’Øtape 3, la connexion au serveur est demandØe via un appel de la mØthode Connect du contr le Winsock. En cas de succ?s, la procØdure ØvØnementielle Connect du contr le Winsock s’exØcute ; en cas d’erreur, la procØdure ØvØnementielle Error du contr le Winsock s’exØcute.

-   L’Øtape 4 est relative  la phase de communication entre le serveur et le client.

Comme du c tØ serveur, la procØdure ØvØnementielle DataArrival du contr le Winsock est exØcutØe lorsque des donnØes parviennent au client. L’instruction tcpClient.GetData (message) place les donnØes dans message.

Des donnØes sont envoyØes au serveur en utilisant la mØthode SendData du contr le Winsock. Par exemple, l instruction tcpClient.SendData (message) envoie au serveur des donnØes contenues dans message.

-   L’Øtape 5 se produit lorsque la transmission des donnØes est terminØe. Le fait que le serveur ferme la connexion provoque l’exØcution de la procØdure ØvØnementielle Close du contr le Winsock. La connexion client devra Œtre fermØe via l’instruction tcpClient.Close.

        •    Exemple d'interaction client-serveur avec le contrôle Winsock

L’application client-serveur, considØrØe ici, utilise le protocole TCP. Dans cette application, l’utilisateur c tØ client et l’utilisateur c tØ serveur communiquent entre eux  travers des contr les TextBox. Notons que si le client ferme la connexion, le serveur attend une autre connexion.

La figure qui suit est une recopie d’Øcran de l’application proposØe.

 

Le programme qui suit correspond au serveur TCP ; les propriØtØs associØes aux diffØrents contr les sont dØcrites dans le tableau qui suit.

______________________________    

' Serveur élémentaire basé sur le protocole TCP

Option Explicit

Private Sub Form_Load()

   ' Rend le bouton cmdSend non actif jusqu'à

   ' l'établissement d'une connexion    cmdSend.Enabled = False    ' Positionne le port local tcpServer.LocalPort = 5000

   ' Attente d'une demande de connexion

   Call tcpServer.Listen

End Sub

Private Sub Form_Resize()

   On Error Resume Next

   Call (ScaleWidth - cmdSend.Width, 0)

   Call (0, 0, ScaleWidth - cmdSend.Width)

   Call (0, txtSend.Height, ScaleWidth, _

ScaleHeight - txtSend.Height)

End Sub

Private Sub Form_Terminate()

   ' Fermeture (si ce n'est pas déjà fait) de la connexion

   ' côté serveur (il s'ensuit du côté client un appel

   ' automatique de la procédure événementielle Close)

   Call tcpServer.Close

End Sub

Private Sub tcpServer_ConnectionRequest( _

      ByVal requestID As Long)

   ' S'assurer que la précédente connexion côté serveur

   ' a été fermée, ceci avant d'accepter une nouvelle connexion

   If tcpServer.State <> sckClosed Then

      Call tcpServer.Close

   End If

   ' Rend le bouton cmdSend actif du fait de    ' l'établissement d'une connexion cmdSend.Enabled = True

   ' Connexion acceptée du côté du serveur

   Call tcpServer.Accept(requestID)

   ' Affichage de l'adresse IP et du numéro de port du client    = _

      "Connection à partir de l'adresse IP client : " & _       tcpServer.RemoteHostIP & vbCrLf & _

      "Port client #: " & tcpServer.RemotePort & vbCrLf & vbCrLf

End Sub

Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)

   Dim message As String

   ' Réception des données envoyées par le client    Call tcpServer.GetData(message) = _

      & message & vbCrLf & vbCrLf    txtOutput.SelStart = Len()    '(la propriété SelStart renvoie ou définit le point

   ' de départ du texte sélectionné, ou indique la position

   ' du point d'insertion si aucun texte n'est sélectionné)

End Sub

Private Sub tcpServer_Close()

   ' Le client a fermé la connexion

   ' Rend le bouton cmdSend non actif du fait de

   ' la fermeture de la connexion    cmdSend.Enabled = False

   ' Fermeture de la connexion côté serveur (il s'ensuit

   ' du côté du client un appel automatique à la procédure

   ' événementielle Close)    Call tcpServer.Close

   = & _

"Connexion fermée côté client." & vbCrLf & vbCrLf txtOutput.SelStart = Len()    ' Attente d'une nouvelle demande de connexion

   Call tcpServer.Listen

End Sub

Private Sub tcpServer_Error(ByVal Number As Integer, _

      Description As String, ByVal Scode As Long, _

      ByVal Source As String, ByVal HelpFile As String, _

      ByVal HelpContext As Long, CancelDisplay As Boolean)

   Dim result As Integer

   result = MsgBox(Source & " : " & Description, _       vbOKOnly, "Erreur TCP/IP")

   End

End Sub

Private Sub cmdSend_Click()

   ' Envoie de données vers le client

   Call tcpServer.SendData("SERVEUR >>> " & ) = & _

      "SERVEUR >>> " & & vbCrLf & vbCrLf = ""

txtOutput.SelStart = Len()

End Sub

______________________________

Contôle

Propriété

Valeur

frmTCPServer

Caption

Serveur TCP

tcpServer

Protocol

0  sckTCPProtocol (par dØfaut)

txtSend

Text

(vide)

txtOutput

Multiline

True

cmdSend

Caption

Envoie de texte

Le programme qui suit correspond au client TCP ; les propriØtØs associØes aux diffØrents contr les sont dØcrites dans le tableau qui suit.

______________________________       

' Client élémentaire basé sur le protocole TCP

Option Explicit

Private Sub Form_Load()

   ' Rend le bouton cmdSend non actif jusqu'à    ' l'établissement d'une connexion cmdSend.Enabled = False    ' Positionne l'adresse IP du serveur tcpClient.RemoteHost = _

InputBox("Entrer l'adresse IP du serveur", _

         "Adresse IP", "localhost")    If tcpClient.RemoteHost = "" Then       tcpClient.RemoteHost = "localhost"    End If tcpClient.RemotePort = 5000  ' Numéro de port du serveur    ' Demande de connexion au serveur :

   '     connexion établie --> événement tcpClient_Connect

   '     erreur --> événement tcpClient_Error

   Call tcpClient.Connect

End Sub

Private Sub Form_Terminate()

   ' Fermeture (si ce n'est pas déjà fait) de la connexion côté

   ' client (il s'ensuit du côté serveur un appel automatique

   ' de la procédure événementielle Close)

   Call tcpClient.Close

End Sub

Private Sub Form_Resize()

   On Error Resume Next

   Call (ScaleWidth - cmdSend.Width, 0)

   Call (0, 0, ScaleWidth - cmdSend.Width)

   Call (0, txtSend.Height, ScaleWidth, _

ScaleHeight - txtSend.Height)

End Sub

Private Sub tcpClient_Connect()

   ' Affichage d'un message (numéros IP et port du client) signalant

   ' l'établissement d'une connexion    cmdSend.Enabled = True

   = "Connecté à l'adresse IP : " & _       tcpClient.RemoteHostIP & vbCrLf & "Port serveur #: " & _ tcpClient.RemotePort & vbCrLf & vbCrLf

End Sub

Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)

   Dim message As String

   ' Réception des données envoyées par le serveur

   Call tcpClient.GetData(message)

   = & message & vbCrLf & vbCrLf

   txtOutput.SelStart = Len()

End Sub

Private Sub tcpClient_Close()

   ' Le serveur a fermé la connexion

   ' Rend le bouton cmdSend non actif jusqu'à

   ' l'établissement d'une connexion    cmdSend.Enabled = False

   ' Fermeture de la connexion côté client (il s'ensuit du côté

   ' serveur un appel automatique de la procédure événementielle Close)

   Call tcpClient.Close    = _

      & "Connexion fermée côté serveur." & vbCrLf

txtOutput.SelStart = Len()

End Sub

Private Sub tcpClient_Error(ByVal Number As Integer, _

      Description As String, ByVal Scode As Long, _

      ByVal Source As String, ByVal HelpFile As String, _

      ByVal HelpContext As Long, CancelDisplay As Boolean)

   Dim result As Integer

   result = MsgBox(Source & ": " & Description, _

      vbOKOnly, "Erreur TCP/IP")

   End

End Sub

Private Sub cmdSend_Click()

   ' Envoie de données vers le serveur

   Call tcpClient.SendData("CLIENT >>> " & ) = & _

      "CLIENT >>> " & & vbCrLf & vbCrLf

txtOutput.SelStart = Len()

   = ""

End Sub

______________________________

Contrôle

Propriété

Valeur

frmTCPClient

Caption

Client TCP

tcpClient

Protocol

0  sckTCPProtocol (par dØfaut)

txtSend

Text

(vide)

txtOutput

Multiline

True

cmdSend

Caption

Envoie de texte

LiØs au contr le Winsock, il existe d’autres propriØtØs, mØthodes et ØvØnements, tels que :  pour les propriØtØs : BytesReceived, LocalHostName, LocalHostIP,          pour les mØthodes : PeekData,            pour les ØvØnements : SendComplete, SendProgress.    

A titre d exercice, Øtudier l application multi-utilisateurs, intitulØe Serveur et situØe dans le rØpertoire \partage\M2AI Visual Basic\TP Reseau\Serveur TCP. Adapter ce serveur  l application client TCP prØcØdente.

12        PROGRAMMATION ORIENTÉE-OBJET 

La programmation en Visual Basic est dite orientée objet. Cette mØthode de programmation, assez naturelle, consiste  dØcomposer une application en un ensemble (fini) d objets ; ces objets interagissant afin de concourir  la rØalisation de l application. A titre d exemples, tous les composants de Visual Basic, tels que les feuilles, les contr les, sont des objets.  

Les objets (en anglais, objects) encapsulent, la fois, les donnØes (attributs dØcrivant l objet) et les mØthodes (actions, routines permettant de manipuler l objet) ; les donnØes et les mØthodes Øtant intimement liØes entre-elles. Notons que la programmation orientée objet donne autant d importance aux donnØes qu aux actions rattachØes  ces donnØes, alors que la programmation procédurale donnera -  travers la rØalisation de procØdures - plus d importance aux actions qu aux donnØes proprement dites.

Notons que la notion d objet s’int?gre pleinement dans le cadre de la programmation ØvØnementielle : Le fait qu’un objet puisse provoquer un ØvØnement va permettre de signaler aux autres objets que quelque chose est survenu.

La programmation orientée objet (POO) repose sur la notion de classe : C est  partir d une classe qu un objet est instancié, i.e., crØØ. Chaque classe contient des donnØes, et l ensemble des mØthodes permettant leurs manipulations. A titre d exemple, chaque ic ne de contr le reprØsente une classe. Quand un contr le TextBox est placØ sur une feuille, un objet de la classe TextBox (reprØsentØe par son ic ne) est instanciØ (crØØ), vers lequel votre programme peut envoyer des messages. Par analogie, un moule  gaufre (ou le plan d une voiture) peut Œtre considØrØ comme une classe, sachant qu une gaufre (ou qu une voiture) peut Œtre considØrØ comme une instances de cette classe.

Les objets ont la propriØtØ de cacher l’information - en effet, ils communiquent entre-eux sans conna tre en dØtail leurs fonctionnements internes -, ce qui facilite la rØalisation de logiciels. En effet, un programmeur pourra manipuler un objet "uniquement"  travers la connaissance de ses diffØrents comportements, sans Œtre concernØ par la mani?re dont ces comportements sont exØcutØs (codØs) : Il est question d abstraction de données (en anglais, data abstraction). Par analogie, il est tout  fait possible de conduire une voiture sans pour autant conna tre le dØtail de son mØcanisme.

A titre d exemple, considØrons une pile d assiettes. Une assiette est toujours placØe au sommet (en anglais, push) de la pile ; de mŒme, c’est toujours du sommet qu’elle en est tØe (en anglais, pop). Ainsi, la derni?re assiette placØe sur la pile sera toujours la premi?re tØe : Un tel fonctionnement s assimile  une structure de donnØes, appelØe pile LIFO (Last-In, First-Out). Par exemple, si les assiettes numØro 1, 2, 3 sont respectivement placØes (push) sur la pile, les 3 prochaines opØrations consistant  ter (pop) les assiettes de la pile retourneront respectivement les assiettes numØro 3, 2 et 1. Un client de la classe pile (client : portion de programme utilisant la classe) n aura pas besoin de conna tre la mani?re dont a ØtØ rØalisØe cette classe, mais seulement son fonctionnement "dernier entré, premier sorti"travers les opØrations push et pop.

En outre, une classe peut Œtre remplacØe par une autre version, sans affecter le reste de l application, pour autant que l interface publique de la classe soit inchangØe. L interface d une classe combine ses propriØtØs, mØthodes et ØvØnements, i.e., tout ce qu il est utile de savoir pour utiliser pleinement la classe.  

La programmation orientée objet requiert trois concepts clØs  l encapsulation, l héritage et le polymorphisme. A la diffØrence des langages C++ et Java, Visual Basic ne permet pas d utiliser la notion d héritage, cependant, il fournit une alternative  travers l utilisation des interfaces et une technique appelØe délégation.

12.1     Les modules de classe     

La crØation de classes se fait via le mØcanisme des modules de classe. Un module de classe contient uniquement du code, il ne peut pas contenir d IUG. Comme les modules feuilles et standards, les modules de classes contiennent une partie déclaration générale ; seulement deux ØvØnements leurs sont associØs : Initialize (ØvØnement dØclenchØ lorsqu’une instance de la classe est crØØe) et Terminate (ØvØnement dØclenchØ avant la destruction d’une instance de la classe).

Pour ajouter un module de classe  un projet, sØlectionner Add Class Module  partir du menu Project : Il en rØsulte la bo te de dialogue suivante, qui permet d ouvrir un module de classe, intitulØ (par dØfaut) Class1, et modifiable via la propriØtØ Name.

Remarque : Notons qu’il est possible d’ajouter un module de classe dØj existant (extension .cls) dans un projet en cliquant sur l’onglet Existing de la prØcØdente bo te de dialogue, ce qui permet de retrouver la classe dØsirØe.   

Le mot-clØ New est utilisØ pour crØer un objet. Par exemple, l instruction

Dim  heure  As  New CTemps

permet de crØer un objet heure comme une nouvelle instance de la classe CTemps (en fait, Visual Basic ne crØe l objet qu au moment correspondant au premier acc?s  une propriØtØ, ou la premi?re fois qu une mØthode est appelØe). Une fois l objet crØØ, il est possible de l utiliser - via son interface (publique) - en lui assignant ses propriØtØs et en invoquant ses mØthodes.

Le programme qui suit contient une (premi?re) dØfinition de la classe CTemps. Cette classe contient 3 variables entières (IntegermHeure, mMinute et mSeconde, appelØes variables d'instance de classe. Chacune de ces 3 variables est dØclarØe Private, ce qui la rend accessible uniquement  travers les mØthodes de la classe. En principe, les variables d'instance sont dØclarØes Private et les mØthodes sont dØclarØes Public.

La classe CTemps a une interface publique composØe de 3 mØthodes Public :

-   Fixer_heure r?gle l’heure  partir de 3 entiers, chaque entier Øtant prØalablement vØrifiØ ;

-   Mettre_sous_forme_universelle retourne une cha ne de caract?res donnant l’heure au format universel, i.e., sous la forme : hh:mm:ss (par exemple : 02:24:35, ou 17:14:45) ;

-   Mettre_sous_forme_standard retourne une cha ne de caract?res donnant l’heure au format standard,

i.e., sous la forme : hh:mm:ss AM (ou PM) (par exemple : 2:24:35 AM, ou 5:14:45 PM).

La procØdure Form_Load, du programme Øcrit pour tester la classe, dØclare une variable locale de la classe CTemps appelØe t. Le module Form peut utiliser la classe CTemps car la classe fait partie du projet.

L’objet t est instanciØ, i.e., crØØ, via l’instruction

Dim  t  As  New CTemps

Lorsque l’objet t est instanciØ, chacune des 3 variables d’instance (privØes) est initialisØe  0.

Les mØthodes Mettre_sous_forme_standard, Mettre_sous_forme_universelle de l’objet sont appelØes de mani?re  afficher l’heure sous une forme standard, respectivement universelle.

La mØthode Fixer_heure permet de rØgler l’heure, une vØrification des donnØes introduites est faite au prØalable. Une valeur non valide est remplacØe par 0 : C’est le cas - dans le programme de test de la classe

- de la variable mSeconde lors du deuxi?me appel de la mØthode Fixer_heure.

___________ module de classe ___________________

' Définition de la classe CTemps

Option Explicit

Private mHeure As Integer

Private mMinute As Integer

Private mSeconde As Integer

Public Sub Fixer_heure(ByVal h As Integer, ByVal m As Integer, _

ByVal s As Integer)    mHeure = IIf((h >= 0 And h < 24), h, 0)    mMinute = IIf((m >= 0 And m < 60), m, 0)

   mSeconde = IIf((s >= 0 And s < 60), s, 0)

End Sub

Public Function Mettre_sous_forme_universelle() As String

Mettre_sous_forme_universelle = Format$(mHeure, "00") & ":" & _

Format$(mMinute, "00") & ":" & _ Format$(mSeconde, "00")

End Function

Public Function Mettre_sous_forme_standard() As String

   Dim h As Integer

                        ' IIf(expr, true part, false part)

   h = IIf((mHeure = 12 Or mHeure = 0), 12, mHeure Mod 12)

Mettre_sous_forme_standard = h & ":" & _

                                                         Format$(mMinute, "00") & ":" & _

Format$(mSeconde, "00") & " " & _

IIf(mHeure < 12, "AM", "PM")

   ' Format$(expr, format) renvoie une valeur de type Variant (String) contenant ' une expression formatée selon l'expression de mise en forme indiquée dans format.

End Function

___________ programme de test de la classe CTemps ___________________

' Programme permettant de tester la classe CTemps

Option Explicit

Private Sub Form_Load()    Dim t As New Ctemps               ' frmCTempsTest : nom de la feuille    Print "Heure standard initiale : " & t.Mettre_sous_forme_standard()

   Print "Heure universelle initiale : " & t.Mettre_sous_forme_universelle()

   Print

   Call t.Fixer_heure(17, 28, 46)

   Print "Heure standard après appel de Fixer_heure(17, 28, 46) : " & _ t.Mettre_sous_forme_standard()

   Print "Heure universelle correspondante : " & t.Mettre_sous_forme_universelle()

   Print

   Call t.Fixer_heure(5, 44, 99)

   Print "Heure standard après appel de Fixer_heure(5, 44, 99) : " & _ t.Mettre_sous_forme_standard()

   Print "Heure universelle correspondante : " & t.Mettre_sous_forme_universelle() End Sub

12.2     Accès aux membres d'une classe : Public, Private     

Les mots-clØs Public ou Private permettent de spØcifier l’acc?s des membres d’une classe (variables d’instance, ou mØthodes). Une variable d’instance, ou une mØthode, ayant un acc?s public est accessible par chacun des modules du projet. Au contraire, une variable d’instance privée peut seulement Œtre manipulØe  travers les mØthodes de la classe. Les mØthodes privées, appelØes aussi mØthodes utilitaires, peuvent seulement Œtre utilisØes par d’autres mØthodes de la classe. Par dØfaut, les procØdures Property, Sub ou Function sont publiques, alors que les variables d’instance sont privées.

Par exemple, considØrons le programme suivant pour tester la classe CTemps,prØcØdemment dØfinie (cf. § 12.1) :

___________ programme de test de la classe CTemps ___________________

Option Explicit

Private Sub Form_Load()    Dim t As New CTemps    t.mHeure = 8

   Print t.Mettre_sous_forme_standard()

End Sub

Un tel programme dØclenche une erreur de compilation. En effet, la variable d’instance mHeure de l’objet t Øtant privée, elle n’est pas accessible en dehors de la classe CTemps.

En fait, l’acc?s  des donnØes privées est rendu possible  travers des mØthodes particuli?res de la classe, appelØes propriétés (notion introduite au § 3.1). Pour permettre la lecture d’une donnØe privée en dehors de son module de classe, il est possible de dØclarer - dans le module de classe - une mØthode get. De mŒme, pour permettre la modification d’une donnØe privée en dehors de son module de classe, il est possible de dØclarer - dans le module de classe - une mØthode let. Ces acc?s semblent transgresser la notion de donnØes privées d’une classe. Toutefois, une mØthode let a la possibilitØ de vØrifier la cohØrence d’une donnØe, de mŒme, une mØthode get permet une "visualisation" diffØrente, Øventuellement partielle, d’une donnØe "brute". Ces mØthodes particuli?res dans Visual Basic sont appelØes Property Let, Property Set et Property Get. Par exemple, la mØthode permettant de modifier la variable d’instance privée nommØe mVar pourrait s’appeler Property Let Var, la mØthode permettant de lire cette variable pourrait s’appeler Property Get Var.

Exemple :

Relativement  la classe CTemps, la portion de programme suivante dØfinit une propriØtØ Heure permettant de stocker l’heure de 0  23 :

Private mHeure As Integer

Public Property Let Heure(ByVal hr As Integer)           ' -- > modification    mHeure = IIf((hr >= 0 And hr < 24), hr, 0)

End Property

Supposons l’objet réveil de la classe CTemps dØfini, considØrons l’instruction suivante :

réveil.Heure = -6

En rØponse  cette instruction, la procØdure Property Let va rejeter cette valeur, non valide, et positionner mHeure   0.

A prØsent, considØrons la procØdure Property Get Heure suivante :

Public Property Get Heure() As Integer ' -- > visualisation    Heure = mHeure

End Property

L’instruction suivante permet de stocker la valeur de la variable Heure de l’objet réveil dans la variable Valeur_heure_alarme (supposØe enti?re et dØfinie) :

Valeur_heure_alarme = réveil.Heure

Emploi de la procédure Property Set :            

Supposons dØfinie une classe CEmployé qui contient un objet mDate_anniversaire de la classe CDate1. La procØdure Property Let ne permet pas d’assigner une valeur  un objet (en l’occurrence mDate_anniversaire). Il faut utiliser,  la place, la procØdure Property Set comme dans les procØdures Property suivantes :

Public Property Set Date_anniversaire(ByVal ani As CDate1)

   Set mDate_anniversaire = ani

End Property

Public Property Get Date_anniversaire() As CDate1

   Set Date_anniversaire = mDate_anniversaire

End Property

Remarque : L’instruction Exit Property provoque la sortie immØdiate d’une procØdure Property (Property Get, Property Let ou Property Set).

Le programme qui suit contient une dØfinition accrue de la classe CTemps (dØfinie prØcØdemment, cf. § 12.1). Cette nouvelle classe, appelØe CTemps1, inclut les procØdures Property Let et Property Get pour les variables d’instance mHeure, mMinute et mSeconde.

Les propriØtØs Property Let vont permettre le contr le et l’assignation des variables d’instance. La validation des variables mHeure, mMinute et mSeconde est implØmentØe dans des mØthodes privées (i.e.,  usage interne  la classe), appelØes respectivement  Valider_heure, Valider_minute et Valider_seconde. Dans cet exemple, chaque procØdure Property Get retourne la valeur de la variable d’instance souhaitØe.

___________ module de classe ___________________

' Définition de la classe CTemps1

' Cette classe étend la classe CTemps en fournissant des procédures

' Property pour les propriétés Heure, Minute et Seconde

Option Explicit

' On définit 3 variables d’instances privées (mHeure, mMinute, mSeconde)

Private mHeure As Integer

Private mMinute As Integer

Private mSeconde As Integer

' On définit 3 méthodes publiques (Fixer_Heure, Mettre_sous_forme_universelle,

' Mettre_sous_forme_standard)

Public Sub Fixer_heure(ByVal h As Integer, ByVal m As Integer, _

ByVal s As Integer)

   mHeure = Valider_heure(h)    mMinute = Valider_minute(m)    mSeconde = Valider_seconde(s)

End Sub

Public Function Mettre_sous_forme_universelle() As String

Mettre_sous_forme_universelle = Format$(mHeure, "00") & ":" & _

Format$(mMinute, "00") & ":" & _                                                              Format$(mSeconde, "00")

End Function

Public Function Mettre_sous_forme_standard() As String    Dim h As Integer

   h = IIf((mHeure = 12 Or mHeure = 0), 12, mHeure Mod 12)

Mettre_sous_forme_standard = h & ":" & _

Format$(mMinute, "00") & ":" & _

Format$(mSeconde, "00") & " " & _

IIf(mHeure < 12, "AM", "PM")

End Function

' On définit 3 propriétés(Heure, Minute, Seconde)

Public Property Get Heure() As Integer

   Heure = mHeure

End Property

Public Property Let Heure(ByVal h As Integer)    mHeure = Valider_heure(h)

End Property

Public Property Get Minute() As Integer

   Minute = mMinute

End Property

Public Property Let Minute(ByVal m As Integer)    mMinute = Valider_minute(m)

End Property

Public Property Get Seconde() As Integer

   Seconde = mSeconde

End Property

Public Property Let Seconde(ByVal s As Integer)    mSeconde = Valider_seconde(s)

End Property

' On définit 3 méthodes privées (Valider_heure, Valider_minute, Valider_seconde)

Private Function Valider_heure(ByVal h As Integer) As Integer

   Valider_heure = IIf((h >= 0 And h < 24), h, 0)

End Function

Private Function Valider_minute(ByVal m As Integer) As Integer

   Valider_minute = IIf((m >= 0 And m < 60), m, 0)

End Function

Private Function Valider_seconde(ByVal s As Integer) As Integer

   Valider_seconde = IIf((s >= 0 And s < 60), s, 0)

End Function

___________ programme de test de la classe CTemps1 ___________________

' Programme permettant de tester la classe CTemps1

Option Explicit

Private mTemps As New CTemps1

Private Sub Form_Load()

   Call mTemps.Fixer_heure(, , _

)

   Call Reactualiser_affichage

End Sub

Private Sub cmdEntrer_Click()    mTemps.Heure =     mTemps.Minute =     mTemps.Seconde =

   Call Reactualiser_affichage

End Sub

Private Sub cmdAjouter_Click()

   mTemps.Seconde = (mTemps.Seconde + 1) Mod 60    If mTemps.Seconde = 0 Then

      mTemps.Minute = (mTemps.Minute + 1) Mod 60       If mTemps.Minute = 0 Then

mTemps.Heure = (mTemps.Heure + 1) Mod 24

      End If

   End If

   Call Reactualiser_affichage

End Sub

Private Sub Reactualiser_affichage()

lblAffichage.Caption = Space$(12) & "Standard : " & _                                           mTemps.Mettre_sous_forme_standard() & _

"    Universelle: " & _

mTemps.Mettre_sous_forme_universelle()

End Sub

N.B. : Penser  mettre 0 dans les propriØtØs Text des contr les TextBox txtHeure, txtMinute, txtSeconde.

Le programme de test de la classe CTemps1 permet, via le bouton de commande "Entrer" et les contr les TextBox, de fixer des valeurs aux variables mHeure, mMinute et mSeconde. L’utilisateur peut aussi incrØmenter d’une seconde l’heure courante en appuyant sur le bouton de commande "Ajouter 1 seconde". Apr?s chacune de ces opØrations, l’heure courante est affichØe.

12.3     Composition : Objets en tant que variables d'instance d'autres classes     

La composition, appelØe aussi agrégation, consiste  former de nouvelles classes incluant en tant que membres des objets d’autres classes existantes. Afin de comprendre cette notion, dØfinissons ce qu’est une référence dans Visual Basic : Une référence est un nom qui se rØf?re  un objet, ou non (i.e., Nothing). Soit par exemple :

Dim t1 As New CTemps1 Dim t2 As CTemps1

Du fait du mot-clØ New, la rØfØrence t1 se rØf?re  un objet de la classe CTemps1 ; le programmeur peut appeler ses mØthodes et accØder  ses propriØtØs. Ceci n’est pas le cas de la rØfØrence t2, qui se rØf?re  Nothing, tant que New n’est pas utilisØ ; l’instruction

Set t2 = New CTemps1

permet  t2 de se rØfØrer  une nouvelle instance (objet) de la classe CTemps1.

A titre d’exemple, considØrons le programme qui suit oø sont dØfinies les classes CEmployé et CDate1. La classe CEmployé contient les variables d’instance mPrénom, mNom, mDate_naissance et mDate_embauche. Les membres mDate_naissance et mDate_embauche utilisent des objets de la classe CDate1, cette derni?re contient les variables d’instance mJour, mMois et mAnnée.

Le programme de test instancie 2 objets CEmployé, les initialise et affiche leurs variables d’instance.

___________ module de la classe ________________       

' Définition de la classe CDate1

Option Explicit

' On définit 3 variables d’instances privées (mJour, mMois, mAnnée)

Private mJour As Integer

Private mMois As Integer

Private mAnnée As Integer

Private Sub Class_Initialize()    mJour = 1    mMois = 1    mAnnée = 1900

End Sub

' On définit 3 propriétés(Jour, Mois, Année)

Public Property Get Jour() As Integer

   Jour = mJour

End Property

Public Property Let Jour(ByVal jr As Integer)    mJour = Valider_jour(jr)

End Property

Public Property Get Mois() As Integer

   Mois = mMois

End Property

Public Property Let Mois(ByVal ms As Integer)    mMois = Valider_mois(ms)

End Property

Public Property Get Année() As Integer

   Année = mAnnée

End Property

Public Property Let Année(ByVal an As Integer)    mAnnée = an   ' Pourrait aussi être validée

End Property

' On définit 2 méthodes publiques (Afficher, Fixer_Date)

Public Function Afficher() As String

   Afficher = mJour & "/" & mMois & "/" & mAnnée

End Function

Public Sub Fixer_date(ByVal jr As Integer, ByVal ms As Integer, _

ByVal an As Integer)

   mMois = Valider_mois(ms)    mAnnée = an    mJour = Valider_jour(jr)

End Sub

' On définit 2 méthodes privées (Valider_jour, Valider_mois)

Private Function Valider_jour(ByVal jr As Integer) As Integer

   Dim Jours_par_mois()

   Jours_par_mois = Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)    If jr > 0 And jr <= Jours_par_mois(mMois) Then

      Valider_jour = jr

      Exit Function

   End If

   If mMois = 2 And jr = 29 And (mAnnée Mod 400 = 0 Or mAnnée Mod 4 = 0 And _

mAnnée Mod 100 <> 0) Then

      Valider_jour = jr

      Exit Function

   End If

   ' Une entrée non valide est remplacée par la valeur 1

   Valider_jour = 1

End Function

Private Function Valider_mois(ByVal ms As Integer) As Integer

   Valider_mois = IIf((ms > 0 And ms <= 12), ms, 1)

End Function

___________ module de la classe CEmployé.cls ___________________

' Définition de la classe CEmployé

Option Explicit

' On définit 4 variables d’instances privées (mPrénom, mNom, mDate_naissance,

' mDate_embauche)

Private mPrénom As String

Private mNom As String

Private mDate_naissance As CDate1

Private mDate_embauche As CDate1

Private Sub Class_Initialize()

   Set mDate_naissance = New CDate1

   Set mDate_embauche = New CDate1

End Sub

' On définit 1 méthodes publique (Afficher)

Public Function Afficher() As String

   Afficher = mPrénom & " " & mNom & _

", Embauche : " & mDate_embauche.Afficher() & _

", Naissance : " & mDate_naissance.Afficher()

End Function

' On définit 4 propriétés(Prénom, Nom, Date_naissance, Date_embauche)

Public Property Get Prénom() As String

   Prénom = mPrénom

End Property

Public Property Let Prénom(ByVal pn As String)    mPrénom = pn

End Property

Public Property Get Nom() As String

   Nom = mNom

End Property

Public Property Let Nom(ByVal nm As String)    mNom = nm

End Property

Public Property Get Date_naissance () As CDate1

   Set Date_naissance = mDate_naissance

End Property

Public Property Set Date_naissance (ByVal ani As CDate1)

   Set mDate_naissance = ani

End Property

Public Property Get Date_embauche() As CDate1

   Set Date_embauche = mDate_embauche

End Property

Public Property Set Date_embauche(ByVal emb As CDate1)

   Set mDate_embauche = emb

End Property

Private Sub Class_Terminate()

   Set mDate_naissance = Nothing         ' Libération mémoire de l'objet

   Set mDate_embauche = Nothing             ' Libération mémoire de l'objet

End Sub

___________ programme de test ___________________

' Programme de test des classes CDate et CEmployé

Option Explicit

Private Sub Form_Load()

   Dim employé1 As New CEmployé

   Dim employé2 As New CEmployé

   With employé1

      .Prénom = "Lionel"

      .Nom = "Terray"

      Call .Date_naissance.Fixer_date(1, 1, 1921)

      Call .Date_embauche.Fixer_date(2, 17, 1942)

   End With

   employé2.Prénom = "Gaston"

   employé2.Nom = "Rébuffat"

   Print employé1.Afficher()

   Print employé2.Afficher()

End Sub

Relativement à la classe CDate1 :

La procØdure ØvØnementielle Class_Initialize fixe une valeur (non nulle) par dØfaut aux 3 variables d’instance entières de la classe,  savoir mJour = 1, mMois = 1 et mAnnée = 1900. Cet ØvØnement est dØclenchØ (uniquement) lorsqu’une instance de la classe est crØØe.

La classe Cdate1 permet, via des procØdures Property Get et Property Let, l’acc?s aux 3 variables d’instance (privées). Property Let Jour et Property Let Mois appellent chacune une mØthode privée (respectivement Valider_jour et Valider_mois) afin d’assurer la cohØrence des variables d’instance mJour et mMois (par choix, la variable d’instance mAnnée n’est pas vØrifiØe).

Deux mØthodes sont associØes  cette classe. La mØthode Afficher retourne une cha ne de caract?res reprØsentant la date. La mØthode Fixer_date permet  l’utilisateur de fixer le jour, le mois et l’annØe (une autre possibilitØ consisterait  utiliser les propriétés Jour, Mois et Année). Notons que cette mØthode assure aussi la cohØrence des variables d’instance mJour et mMois,  travers les mØthodes privées Valider_Jour et Valider_mois.

Relativement à la classe CEmployé :

Quatre variables d’instance privées sont associØes  cette classe : mPrénom, mNom, mDate_naissance et mDate_embauche. Notons que mDate_naissance et mDate_embauche se rØfØrent  des objets de la classe CDate1, il en rØsulte une relation de composition. Chacun de ces objets est construit, via New, dans la procØdure ØvØnementielle Class_Initialize.

La classe CEmployé permet, via des procØdures Property Get, Property Let et Property Set, l’acc?s aux 4 variables d’instance (privées) de la classe. Quand Property Get, ou Property Set, est appelØe pour un objet CDate1, on note l’emploi du mot-clØ Set dans le corps de la procØdure Property.

La mØthode Afficher, associØe  la classe CEmployé, affiche le prØnom, le nom, la date d’embauche et la date de naissance de l’employØ.

La procØdure ØvØnementielle Class_Terminate permet de "nettoyer" un objet avant sa destruction. 

Relativement au programme de test :

Deux objets de la classe CEmployé sont crØØs (employé1 et employé2) dans la procØdure ØvØnementielle

Form_Load.

Relativement  employé1, les propriétés Prénom et Nom sont fixØes, les dates d’embauche et de naissance sont fixØes  travers la mØthode Fixer_date. En effet, l’appel de la procØdure Property Date_naissance Get retourne un objet de la classe CDate1, partir duquel on peut appeler la mØthode Fixer_date. Seules sont fixØes les propriØtØs Prénom et Nom pour employé2. Aussi les dates d’embauche et de naissance sont mises par dØfaut via la procØdure ØvØnementielle Class_Initialize de la clase CDate1.

12.4     Evénements et classes    

Il est possible de dØclarer des ØvØnements au sein d’une classe. Le fait de provoquer un ØvØnement permet  un objet de signaler aux autres objets que quelque chose est survenu. Le mot-clØ RaiseEvent est utilisØ pour provoquer un ØvØnement.

Un ØvØnement est dØclarØ, via le mot-clØ Event, de type Public dans la partie déclaration générale : Les param?tres associØs  Event permettent l’Ømission, ou la rØception, de donnØes avec le programme.

A titre d’exemple, est dØfinie dans la figure suivante une classe appelØe CEvénement, laquelle peut dØclencher un ØvØnement.

___________ module de la classe CEvé __________________

' Définition de la classe pouvant déclencher un événement

Option Explicit

' On définit 1 variable d’instance privée (mNombre)

Private mNombre As Long

' On définit 1 événement(NomEvénement)

Public Event NomEvénement(s As String, n As Long)

' On définit 1 méthodes publique (ProvoqueEvénement)

Public Sub ProvoqueEvénement()    mNombre = mNombre + 1

   ' Déclencher l'événement NomEvénement

   RaiseEvent NomEvénement("Evénement numéro : ", mNombre) End Sub

___________ programme de test ___________________

' Programme de test de la classe CEvénement

Option Explicit

Private WithEvents mEvt As CEvénement

' mEvt est 1 objet de la classe CEvénement dans laquelle sont associés des événements

Private Sub Form_Initialize()

   Set mEvt = New CEvénement

End Sub

Private Sub Form_Load()    Dim x As Integer

        ' frmTest : nom de la feuille

   For x = 1 To 5

      ' Appel de la méthode ProvoqueEvénement de l’objet mEvt

      Call mEvt.ProvoqueEvénement

   Next x

End Sub

Private Sub mEvt_NomEvénement(s As String, n As Long)

   Print s & " #" & n

End Sub

Private Sub Form_Terminate()

   Set mEvt = Nothing

End Sub

Relativement  la classe CEvénement, la ligne de code

Public Event NomEvénement(s As String, n As Long)

dØclare un ØvØnement, appelØ NomEvénement, lequel comprend un param?tre de type String et un param?tre de type Long. Cette classe dØfinit Øgalement une méthode, appelØe ProvoqueEvénement, qui ;

-  incrØmente de 1 la variable d’instance appelØe mNombre (de type Long),

-  puis, dØclenche l’ØvØnement, appelØ NomEvénement, via la ligne de code

RaiseEvent NomEvénement("Evénement numéro : ", mNombre)

La cha ne de caract?res "EvØnement numØro : " et la valeur de mNombre sont les 2 param?tres de NomEvénement. Retenons que la mØthode appelØe ProvoqueEvénement doit Œtre exØcutØe afin de dØclencher l’ØvØnement appelØ NomEvénement.

Relativement au programme de test, la ligne de code

Private WithEvents mEvt As CEvénement

crØe une rØfØrence, appelØe mEvt,  un objet de la classe CEvénement. Le mot-clØ WithEvents indique que des ØvØnements sont associØs  la classe.

La ligne de code

Call mEvt.ProvoqueEvénement

dØclenche l’ØvØnement appelØ NomEvénement. La procØdure ØvØnementielle mEvt_NomEvénement permet alors la prise en compte de l’ØvØnement NomEvénement. Dans le cas prØsent, on se contente d’afficher les param?tres s et n, associØs  cette procØdure.

ANNEXES __________________________________________________________________________

•   ANNEXE A (Code de compilation)    

Les programmes Visual Basic sont, par dØfaut, compilØs dans un code intermØdiaire, appelØ p-code. Lors de l’exØcution, les instructions p-code sont interprØtØes en code machine par un moteur d'exécution (fichier prØsent dans le rØpertoire WINDOWS\SYSTEM). Les versions Professional et Enterprise de Visual Basic permettent la compilation directement en code machine, il en rØsulte, souvent, une augmentation de la vitesse d’exØcution des programmes, mais aussi de leurs tailles en mØmoire. Pour passer d’une compilation en p-code une compilation en code machine, ouvrer le menu Projet | Propriétés de projet, cliquer l’onglet nommØ Compilation et sØlectionner la case  options Compiler en code natif.

•   ANNEXE B (Types de projet)       

Type

Description

EXE Standard

Programme Windows ordinaire, fichier exØcutable.

EXE ActiveX

Fonction d automatisation fondØe sur les modules de classe ; fichier ActiveX exØcutable.

DLL ActiveX

Fonction d automatisation fondØe sur les modules de classe ; fichier ActiveX non exØcutable.

Contr le ActiveX

Contr le destinØ  la bo te  outils, ou  l utilisation d Internet (fichier OCX).

Assistant CrØation d Applications

Assistant de crØation de fichier EXE Standard.

Add-In

Extension de l environnement Visual Basic.

DLL Document ActiveX

Document Visual Basic destinØ  l affichage, par exemple dans Internet Explorer.

EXE Document ActiveX

Document ActiveX destinØ  l affichage, par exemple dans Internet Explorer.

•   ANNEXE C (Éléments clés de Windows : Fenêtres, événements et messages) 

ConsidØrons qu’une fenŒtre est simplement une zone rectangulaire dotØe de ses propres limites. Sans doute, connaissez-vous dØj plusieurs types de fenŒtres : Une fenŒtre Explorateur dans Windows, une fenŒtre de document dans un programme de traitement de texte, ou encore une bo te de dialogue. S’il s’agit l des exemples les plus courants, il existe bien d’autres types de fenŒtres. Un bouton de commande est une fenŒtre. Les ic nes, les zones de texte, les boutons d’option et les barres de menus constituent tous des fenŒtres.

Le syst?me d’exploitation Microsoft Windows g?re ces nombreuses fenŒtres en affectant  chacune d’elles un numØro d’identification unique (descripteur de fenŒtre ou hWnd). Le syst?me surveille en permanence chacune de ces fenŒtres de fa on  dØceler le moindre ØvØnement ou signe d’activitØ. Les ØvØnements peuvent Œtre engendrØs par des actions de l’utilisateur (notamment, lorsque celui-ci clique un bouton de la souris ou appuie sur une touche), par un contr le programmØ, voire mŒme par des actions d’une autre fenŒtre.

Chaque fois qu’un ØvØnement survient, un message est envoyØ au syst?me d’exploitation. Celui-ci traite le message et le diffuse aux autres fenŒtres. Chacune d’elles peut alors exØcuter l’action appropriØe de la mani?re prØvue pour ce type de message (notamment, se redessiner si elle n’est plus recouverte par une autre fenŒtre).

Comme vous pouvez l’imaginer, il n’est pas simple de faire face  toutes les combinaisons possibles de fenŒtres, d’ØvØnements et de messages. Heureusement, Visual Basic vous Øpargne la gestion de tous les messages de bas niveau. La plupart de ceux-ci sont automatiquement gØrØs par Visual Basic tandis que d’autres sont mis  disposition sous forme de procØdures Event afin de vous faciliter la t che. Vous pouvez aussi Øcrire rapidement des applications puissantes sans vous prØoccuper de dØtails inutiles.

•     ANNEXE D (Description du modèle événementiel)

Dans les applications traditionnelles ou " procØdurales ", c’est l’application elle-mŒme, et non un ØvØnement, qui contr le les parties du code qui sont exØcutØes, ainsi que leur ordre d’exØcution. Celle-ci commence  la premi?re ligne de code et suit un chemin dØfini dans l’application, appelant les procØdures au fur et  mesure des besoins.

Dans une application ØvØnementielle, le code ne suit pas un chemin prØdØterminØ. DiffØrentes sections du code sont exØcutØes en rØaction aux ØvØnements. Ceux-ci peuvent Œtre dØclenchØs par des actions de l’utilisateur, par des messages provenant du syst?me ou d’autres applications, voire mŒme par l’application proprement dite. L’ordre de ces ØvØnements dØtermine l’ordre d’exØcution du code. Le chemin parcouru dans le code de l’application est donc diffØrent  chaque exØcution du programme.

Comme il est impossible de prØvoir l’ordre des ØvØnements, votre code doit Ømettre certaines hypoth?ses quant  " l’Øtat du syst?me " au moment de son exØcution. Lorsque vous Ølaborez des hypoth?ses (par exemple quand vous supposez qu’un champ de saisie doit contenir une valeur avant l’exØcution de la procØdure chargØe de traiter cette valeur), vous devez structurer votre application de telle sorte que cette hypoth?se soit toujours vØrifiØe (par exemple en dØsactivant le bouton de commande qui dØmarre la procØdure aussi longtemps que le champ de saisie ne contient pas une valeur).

Votre code peut Øgalement dØclencher des ØvØnements pendant l’exØcution. Par exemple, la modification par programmation du contenu d’une zone de texte dØclenche l’ØvØnement Change qui lui est associØ et donc l’exØcution du code Øventuellement contenu dans cet ØvØnement. Si vous avez estimØ que cet ØvØnement ne serait dØclenchØ que par dialogue avec l’utilisateur, vous risquez d’Œtre confrontØ  des rØsultats inattendus. C’est pour cette raison qu’il est important de bien comprendre le mod?le ØvØnementiel et de le garder toujours  l’esprit tout au long de la phase de crØation d’une application.

•     ANNEXE E (Description (notamment) des paramètres de MoveComplete)

Méthodes WillMove et MoveComplete

La mØthode WillMove est appelØe avant que l’opØration en attente change la position actuelle dans le Jeu d'enregistrements. La mØthode MoveComplete est appelØe après modification de la position actuelle dans le Recordset.

Syntaxe

WillMove adReason, adStatus, pRecordset MoveComplete adReason, pError, adStatus, pRecordset

Paramètres

adReason Une valeur EventReasonEnum. SpØcifie le motif de cet ØvØnement. Il peut prendre comme valeur adRsnMoveFirst, adRsnMoveLast, adRsnMoveNext, adRsnMovePrevious, adRsnMove ou adRsnRequery.

pError Un objet Error. Il dØcrit l’erreur survenue pour autant que la valeur de adStatus soit adStatusErrorsOccurred ; dans le cas contraire, il n’est pas dØfini. adStatus Une valeur d’Øtat EventStatusEnum.

Lors de l’appel de WillMove, ce param?tre est dØfini  adStatusOK si l’opØration qui a provoquØ l’ØvØnement a rØussi. Il est dØfini  adStatusCantDeny si cette mØthode ne peut demander l’annulation de l’opØration en attente.

Lors de l’appel de MoveComplete, ce param?tre est dØfini  adStatusOK si l’opØration qui a provoquØ l’ØvØnement a rØussi, ou  adStatusErrorsOccurred si l’opØration a ØchouØ.

Avant le renvoi d’une valeur de la mØthode WillMove, dØfinisser ce param?tre  adStatusCancel pour demander l’annulation de l’opØration en attente. Avant le renvoi d’une valeur de la mØthode MoveComplete, dØfinisser ce param?tre  adStatusUnwantedEvent pour empŒcher des notifications ultØrieures. pRecordset Un objet Recordset. Le Recordset pour lequel cet ØvØnement s’est produit.

Remarque : Un ØvØnement WillMove, ou MoveComplete, peut survenir  la suite des opØrations Recordset suivantes : Open, Move, MoveFirst, MoveLast, MoveNext, MovePrevious, Bookmark, AddNew, Delete, Requery et Resync.

•   ANNEXE F (Les types de variables objet)   

Les variables objet, comme toute autre variable, peuvent se dØclarer explicitement en spØcifiant le type. Par exemple, pour dØclarer une variable objet, nommØe txtContrôle, comme zone de texte, on Øcrit :

                        Dim txtContrôle As TextBox

Il correspond un type pour chaque contr le (objet) standard,  savoir :

CheckBox

ComboBox

CommandButton

Data

DirListBox

DriveListBox

FileListBox

Form

Frame

Grid

HscrollBar

Image

Label

Line

ListBox

MDIForm

Menu

OptionButton

OLE

PictureBox

Shape

TextBox

Timer

VscrollBar

Des types existent Øgalement pour les contr les non intrinsèques.

En fait, Visual Basic rappelle le type d’un contr le dans la zone de liste modifiable en haut de la fenŒtre de propriØtØs.

•   ANNEXE G (Traitement de fichiers avec d'anciennes instructions et fonctions d'E/S de fichiers)    

Depuis la premi?re version de Visual Basic, les fichiers ont ØtØ traitØs  l’aide de l’instruction Open et d’autres instructions et fonctions associØes (dont la liste est prØsentØe ci-dessous). Ces mØcanismes deviendront Øventuellement pØrimØs en faveur du mod?le d’objet FSO (File System Object), mais ils sont enti?rement pris en charge dans Visual Basic 6.0.

Bien que vous puissiez crØer votre application de sorte qu’elle utilise des fichiers de base de donnØes, il n’est pas nØcessaire de prØvoir l’acc?s direct aux fichiers dans votre application. Le contr le Data et les contr les dØpendants vous permettent de lire et d’Øcrire des donnØes dans une base de donnØes, ce qui est beaucoup plus simple que de recourir aux techniques d’acc?s direct aux fichiers.

Toutefois, il se peut que vous deviez parfois lire et Øcrire dans des fichiers autres que des bases de donnØes. Vous devez alors traiter directement les fichiers en crØant, manipulant et stockant du texte et d’autres donnØes.

Types d'accès aux fichiers

Pris isolØment, un fichier n’est autre qu’une suite d’octets connexes enregistrØs sur un disque. Lorsque votre application acc?de  un fichier, elle doit imaginer ce que reprØsente ces octets (des caract?res, des enregistrements de donnØes, des entiers, des cha nes, etc.).

Le type d’acc?s aux fichiers varie selon le type de donnØes contenues dans le fichier. Dans Visual Basic, il existe trois types d’acc?s aux fichiers :

•   Séquentiel : Pour la lecture et l’Øcriture de fichiers texte dans des blocs continus.

•   Aléatoire : Pour la lecture et l’Øcriture de fichiers texte ou binaires structurØs sous la forme d’enregistrements de longueur fixe. • Binaire : Pour la lecture et l’enregistrement de fichiers possØdant une structure arbitraire.

L’accès séquentiel a ØtØ con u pour les fichiers texte sans mise en forme. Chaque caract?re du fichier est censØ reprØsenter un caract?re de texte ou une sØquence de mise en forme du texte, par exemple un caract?re de nouvelle ligne (NL). Les donnØes sont stockØes sous forme de caract?res ANSI.

Un fichier ouvert dans le cadre d un accès aléatoire est censØ Œtre constituØ d’un ensemble d’enregistrements de mŒme longueur. Gr ce aux types dØfinis par l’utilisateur, vous pouvez crØer des enregistrements constituØs de nombreux champs pouvant mŒme possØder chacun un type de donnØes diffØrent. Les donnØes sont stockØes sous forme d’informations binaires.

L’accès binaire vous permet de stocker des donnØes dans un ordre quelconque au sein de fichiers. Ce mode d’acc?s est semblable  l’acc?s alØatoire, mais s’en diffØrencie par le fait qu’il n’y a aucune estimation du type de donnØes ou de la longueur des enregistrements. Toutefois, vous devez conna tre avec prØcision la mani?re dont les donnØes ont ØtØ Øcrites dans le fichier si vous souhaitez les extraire correctement.

Pour plus d'informations sur les types d’acc?s aux fichiers, reportez-vous dans MSDN aux sections "

Utilisation de l'accès séquentiel aux fichiers ", " Utilisation de l'accès aléatoire aux fichiers " et " Utilisation de l'accès binaire aux fichiers ".

Fonctions et instructions d'accès aux fichiers

Les fonctions suivantes sont utilisØes avec les trois types d’acc?s aux fichiers.

Dir

FileLen

LOF

EOF

FreeFile

Seek

FileCopy

GetAttr

SetAttr

FileDateTime

Loc

Le tableau suivant Ønum?re toutes les instructions et fonctions d’acc?s aux fichiers disponibles pour chacun des trois types d’acc?s direct aux fichiers.

 

Instruction et fonction

 

Accès séquentiel

 

Accès aléatoire

 

Accès binaire

 

Close

X

 

X

 

X

 

 

Get

 

X

 

X

 

 

Input( )

X

 

 

X

 

 

Input #

X

 

 

 

 

Line Input #

X

 

 

 

 

Open

X

 

X

 

X

 

 

Print #

X

 

 

 

Put

X

X

 

Type End Type

X

 

Write #

X

 

                       


oxymoron : Figure de style qui rØunit deux mots en apparence condratictoires (silence Øloquent).

[2] Une base de données est une collection de donnØes. Un système de base de données regroupe les donnØes, le matØriel sur lequel les donnØes rØsident, le logiciel (appelØ moteur de base de données) qui contr le le stockage - l’extraction - de donnØes, et les utilisateurs.

Requête se traduit par query en anglais.

[4] Object Linking and Embedding (OLE) est une technologie - sur laquelle s’appuient les technologies ActiveX - qui permet d’associer des applications entre elles. Par exemple, il est possible d’insØrer une feuille Excel dans un document Word, cecisans avoir explicitement ouvert le logiciel Excel. OLE permet notamment  une application de contr ler d’autres applications (cette fonction s’appelle Automation).

Un socket est dØfini par un couple adresse IP  numØro de port.

Un navigateur est un programme interactif qui permet de visualiser des informations issues du Web.

Les URLs permettent aux navigateurs d’extraire le protocole utilisØ pour accØder  l’ØlØment, le nom de l’ordinateur qui hØberge l’ØlØment, et le nom de ce dernier. Par exemple, le fait qu’une URL commence par http:// indique au navigateur un acc?s  l’ØlØment  l’aide du protocole HTTP.   

La plupart des documents Web sont Øcrits en langage HTML (HyperText Markup Language), en plus du texte, un document contient des balises qui en dØfinissent la structure et le formatage.    

Ces notions seront ØtudiØes en dØtail dans d’autres enseignements de la formation.

Cette notion explique la raison pour laquelle les variables d’instance sont prØfixØes par la lettre m.


131