Vous êtes sur la page 1sur 28

Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 1

























Les contrles

ActiveX


NB : ce fascicule fait partie dun travail de diplme sur le sujet Technologie ActiveX &
Visual Basic 6 , paru en dcembre 2001 pour lobtention du diplme dIngnieur logiciel
lEIVD (Suisse).
Les autres fascicules sont disponibles ladresse http://activex.developpez.com. La
reproduction - sous nimporte quelle forme que ce soit - est libre de droits. Veuillez
tout de mme en informer lauteur.
Critiques, remarques, questions ? frederic@youplaboum.ch.











Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 2

1 - Caractristiques


Dun point de vue gnral, un contrle ActiveX a les caractristiques suivantes :

- Il peut raliser les mmes choses quun serveur DLL in-process.

- Il peut tre contenu dans un conteneur. Cela signifie que le contrle possde sa
propre interface utilisateur contenue dans la fentre dune application, dans une
feuille de Visual Basic, ou dans une page Web. Le contrle est capable dinteragir
avec lapplication qui le contient de plusieurs manires.

- Il supporte les caractristiques de programmation en cours de conception, savoir :

- supporter les pages de proprits,

- tre habilit conserver des valeurs de proprits rgles en cours de
conception une localisation spcifie par le conteneur,

- tre habilit interagir avec les proprits du conteneur si il y en a un.

En dautres termes, schmatiquement :

Un contrle ActiveX = un composant de code + une interface utilisateur + les
caractristiques de son conteneur.


1.1 Avantages des contrles ActiveX :


De bonnes performances. Lexcution se fait in-process .
Les contrles sont compatibles avec de multiples conteneurs, telles les
applications Microsoft Office ou les navigateurs Internet.
Le dveloppement des contrles est simplifi dans lenvironnement de Visual
Basic.

1.2 Inconvnients des contrles AcrtiveX :


Les contrles sont bien plus rapides que les ActiveX EXE, mais de loin pas aussi
rapides que les DLL.
La cration dun contrle de qualit peut savrer plus complexe quon ne le
pensait au dpart.
Les contrles augmentent la complexit du dploiement dune application.
Lenregistrement, la vrification de version, ainsi que la vrification des
composants sont requis pour une distribution sre du produit.


Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 3

2 - Limitations des contrles ActiveX

Les contrles ActiveX crs avec Visual Basic sexcutent sous les plates-formes Windows
95, 98, et 2000, NT 3.51 (SP 5 et plus), et NT 4.0. Voyons ce que cela signifie au niveau
du choix de cette technologie.

Les contrles ActiveX seront appropris si :

On dsire dvelopper une application sexcutant sur les plates-formes nonces,
grce Visual Basic ou tout autre conteneur (ou encore une application VBA)
qui peut supporter des contrles ActiveX.

On dsire crer un site Web orient vers les utilisateurs de ces plates-formes, en
admettant que ceux qui ne le font pas seront lss au niveau des fonctionnalits
du site.

On dsire crer un site Web pour un intranet dune socit utilisant les
technologies Microsoft.

Par contre, les contrles ActiveX ne seront pas appropris si :

Notre application doit supporter un mode dexcution 16-bits.

Nous dsirons crer un site Web multi-plates-formes, incluant Apple, UNIX, et
Windows NT (en dessous de la version 3.51 avec SP 5). Dans ce cas l, il vaut
bien mieux songer dvelopper sous JAVA.



3- Une cacophonie d'objets.


Un grand nombre dobjets est utilis durant le processus de conception et dexcution
dun contrle ActiveX, nous allons parcourir les principaux, savoir :

votre objet Control
lobjet UserControl
lobjet Ambient
lobjet Extender
les objets constitutifs du contrle (Constituent objects)

Nous allons crer un contrle simple, ce qui nous permettra de suivre le processus
dutilisation de ces diffrents objets. Ce contrle sera un contrle priv qui sera inclus
dans une application EXE standard. On ne pourra donc pas compiler de fichier .OCX
public
1
(cest dailleurs la seule diffrence entre un contrle public et un contrle priv).

Crons un projet standard EXE, et ajoutons-y un contrle utilisateur. Changeons le nom
du projet en PrjCtl, et celui du contrle UserControl1 en MonControle.


1
Lorsque le projet a t compil, les contrles privs ne peuvent pas tre utiliss par d'autres applications. Ils
ne peuvent tre utiliss qu' l'intrieur du projet dans lequel ils ont t compils.
Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 4
Dans la fentre du code de MonControle, saisissons le code suivant :

Dim m_MaProp As String

Public Property Get MaProp() As String
MaProp = m_MaProp
End Property

Public Property Let MaProp(vValeur As String)
m_MaProp = vValeur
End Property

Et changeons le nom de la feuille du projet en MaFeuille ; ce sera la feuille quon
utilisera pour tester le contrle.

Si on regarde dans la bote outils, on dcouvre un icne gris associ notre
contrle.

Lorsque nous fermons la fentre du contrle, cet icne nest plus gris. Crons donc une
instance de notre contrle sur la feuille MaFeuille. Le nom de cet instance est dtermin
par le nom que nous avions donn au contrle, soit MonControle1.

Voyons les proprits de cette instance : MaProp figure dans la
liste, ainsi quune quantit dautres proprits. Celles-ci sont
nommes proprits tendues (extender properties), car elle
sont implmentes dans un objet externe fourni par le
conteneur (dans notre cas, Visual Basic).



Sans fermer la fentre de conception de la feuille,
ouvrons le fentre de conception du contrle, et
observons la feuille : lemplacement du contrle sur
celle-ci est couvert de lignes diagonales indiquant que le
contrle nest pas disponible.



Saisissons le code vnementiel suivant dans la fentre du code du contrle :

Event Click()
Private Sub UserControl_Click()
RaiseEvent Click
End Sub

Fermons la fentre de code ainsi que la fentre de conception du contrle, et ajoutons
dans le code de la feuille :

Private Sub MonControle1_Click()
MsgBox "MonControle a t cliqu !"
End Sub



Excutons maintenant le projet, en vrifiant que la feuille
MaFeuille est la feuille de dmarrage. Cliquons sur la zone o le
contrle a t plac (sur la feuille MaFeuille), une bote de
dialogue apparat, telle que celle de la figure ci-contre.
Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 5

Stoppons le projet et ramenons la fentre de conception du contrle au premier plan.
Ajoutons maintenant un bouton au contrle :

Event ClicBouton()
Private Sub MonBouton_Click()
RaiseEvent ClicBouton
End Sub

Ainsi que le code suivant dans la feuille MaFeuille :

Private Sub MonControle1_ClicBouton()
MsgBox "MonBouton a t cliqu !"
End Sub

Excutons le projet, et cliquons aussi bien sur la zone du contrle que sur le bouton. Du
point de vue du programmeur, on reoit alors deux vnements Click grs par deux
interfaces vnementielles COM, une depuis lobjet UserControl, et lautre depuis le
bouton, qui est un contrle constitutif.

Ajoutons une tiquette au contrle ainsi que le code suivant dans lvnement
UserControl_Paint() :

Private Sub UserControl_Paint()
If Ambient.UserMode Then
Lbl1.Caption = "Le container est en mode excution !"
Else
Lbl1.Caption = "Le container est en mode conception!"
End If
End Sub

Fermons le concepteur et voyons la feuille en mode
conception.








Excutons le projet et voyons nouveau la feuille.





Ceci illustre bien le comportement adaptatif dun contrle ActiveX en mode de conception
ou en mode dexcution. Il utilise pour cela lobjet Ambient, qui contient des informations
propos de lenvironnement du conteneur.

Voyons maintenant les cinq types dobjets que nous avons utilis (quelques-uns sans le
savoir).

Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 6
3.1 L'objet Control


La seule partie du contrle que lon implmente en tant quauteur du contrle est lobjet
contrle lui-mme, dans notre cas, lobjet MonControle. Cet objet a deux buts : il dfinit
les mthodes publiques, proprits et vnements disponibles ceux qui utilisent le
contrle, et il dfinit le comportement du contrle.
En plus des mthodes et proprits que lon implmente, nous avons accs aux
proprits des objets UserControl, Extender, Ambient et de tous les contrles
constitutifs que lon ajoute notre contrle.



3.2 L'objet UserControl


Du point de vue du programmeur, lobjet UserControl est un sous-objet de notre
contrle. On accde aux mthodes de lobjet UserControl en utilisant la syntaxe
UserControl.method(). Lobjet UserControl peut lever des vnements dans notre
objet Control auquel on peut rpondre dans le code de celui-ci
2
.

Du point de vue dune application Visual Basic, lobjet Control est en quelque sorte un
sous-objet de lobjet UserControl. Ceci parce que Visual Basic sait comment placer et
grer lobjet UserControl sur un conteneur. Visual Basic - avec Windows - dirige la
souris et les entres du clavier vers lobjet UserControl, qui envoie ainsi les vnements
vers le code du contrle.

Lobjet UserControl est responsable de la cration de la fentre du contrle, des
activations/dsactivations des lments du contrle (focus), et tout ce qui concerne les
interactions de linterface utilisateur. Toutes ces activits sont ensuite exposes lobjet
Control au travers des vnements et des proprits.

Lobjet UserControl est lobjet par dfaut du contrle. Pour bien le saisir, voyons un
exemple concret : admettons que lon travaille avec la proprit Caption dune feuille.
Admettons maintenant que nous dfinissons une nouvelle proprit nomme Caption sur
cette mme feuille, cette nouvelle proprit va cacher la proprit Caption par dfaut
fournie par la feuille : les variables dfinies localement cachent les variables de mme
nom dfinies globalement. Tout comme les proprits et mthodes locales cachent leur
homologues dfinies globalement. Mais il est toujours possible daccder la variable
globale Caption, en la prfixant explicitement : Form.Caption.




2
Notez que les vnements ne sont pas levs dans les instances du contrle que les dveloppeurs creront par
la suite, partir du contrle. Si vous dsirez exposer aux dveloppeurs un vnement tel que
UserControl_Click, vous devrez dfinir un nouvel vnement dans votre objet Control et lever lvnement
vous-mme.
Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 7
3.3 L'objet Ambient


Cet objet est utilis pour obtenir des informations du conteneur. Les proprits de cet
objet permettent de dterminer quelles sont les possibilits offertes par le conteneur et
adapter en consquence le contrle pour les utiliser. Par exemple, nous avons utilis la
proprit UserMode, qui permettait de dterminer si le conteneur tait en mode de
conception ou dexcution (Ambient.UserMode). Un autre exemple est la proprit
BackColor, qui permet dobtenir la couleur de fond du conteneur. Ceci peut tre utile
dans le cas o on dsire obtenir depuis un contrle cette couleur de fond (afin de
lajuster par exemple). Lobjet UserControl fournit lvnement AmbientChanged, qui
permet ainsi dtre inform lorsque la proprit BackColor est modifie.

Les conteneurs peuvent dfinir leurs propres proprits ambiantes et ne sont pas forcs
de les implmenter (y compris les proprits des conteneurs visibles dans lexplorateur
dobjets de Visual Basic ainsi que ceux de la documentation de VB). Pour faciliter la vie
du programmeur, lobjet Ambient dtecte les proprits du conteneur manquantes et
retourne simplement la valeur par dfaut de la proprit. Cela signifie-t-il donc quun
conteneur nest pas oblig dimplmenter une proprit de base telle que UserMode ? H
non. Si elle nest pas implmente, comment le contrle peut-il alors se rendre compte si
il se trouve en mode de conception ou pas ? Il ne le peut pas. Certains conteneurs de
toute faon ne distinguent pas de diffrence entre le mode de conception et le mode
dexcution. Ceux-ci nont pas besoin dexposer la proprit UserMode, auquel cas lobjet
Ambient retournera par dfaut la valeur true.



3.4 L'objet Extender


Il existe des proprits associes aux contrles qui nont absolument rien voir avec le
fonctionnement de ceux-ci. Par exemple, chaque contrle dans Visual Basic possde une
proprit Name : celle-ci est gre par le conteneur. Dautres proprits qui tombent dans
le mme panier sont les proprits Visible, Left, ou Right.
Lorsquun dveloppeur utilise notre contrle, le conteneur ajoute automatiquement ces
proprits linterface de notre contrle afin que le dveloppeur puisse y accder. Ce
sont elles, les proprits Extender. Le dveloppeur est incapable de faire la diffrence
entre les proprits fournies par le conteneur et celles fournies par le contrle. Par
contre, lauteur du contrle si. De plus, pas besoin dimplmenter les proprits
Extender (en fait, on ne peut pas le faire). Mais il est possible daccder aux proprits
Extender fournies par le conteneur en utilisant lobjet Extender.

Comme il nest pas possible de connatre les proprits dun conteneur lavance, laccs
celles-ci se fait toujours avec par liaison tardive.



Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 8
3.5 Les objets constitutifs d'un contrle


Dune certaine manire, ce sont les objets les plus faciles manipuler. Ils fonctionnent
exactement de la mme manire quun contrle plac sur une feuille, et sont placs sur
un contrle comme un contrle lest sur une feuille. On y accde de la mme manire, et
les vnements sont levs de manire identique. Mais attention : il faut se souvenir que
les dveloppeurs qui utiliseront notre contrle nauront pas accs aux proprits,
mthodes et vnements de ces contrles constitutifs, moins que nous ne les
exposions explicitement.



3.6 Rsum des objets d'un contrle ActiveX


La figure suivante rsume le modle objet du contrle ActiveX que nous avons ralis
prcdemment. Le module de gauche reprsente le contrle, incluant lobjet
UserControl et les contrles constitutifs, et celui de droite indique les objets en relation
avec le conteneur.
























MonBouton
MonEtiquette
UserControl
MonControle

Ambient

Extender

Code de MaFeuille
MaFeuille
Relation inter-objets dans un contrle ActiveX
Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 9

4 vnements cls de l'objet UserControl
(cycle de vie)

La signification des vnements cls dans la vie d'un objet UserControl est la suivante :
Vous crez une instance dun contrle en double-cliquant sur la bote outils ou
en ouvrant une feuille sur laquelle une instance du contrle a t pralablement
place. Les contrles constitutifs (si il y en a) sont crs. Lobjet UserControl est
cr, les contrles constitutifs y sont situs.
L'vnement Initialize se produit chaque fois qu'une instance de votre
contrle est cre ou recre. C'est toujours le premier vnement de la vie d'une
instance de contrle.
L'vnement InitProperties se produit seulement lors de la premire apparition
d'une instance de contrle, lorsqu'une instance du contrle est place sur une
feuille. Dans cet vnement, vous dfinissez les valeurs initiales des proprits du
contrle.
L'vnement ReadProperties se produit lors de la cration de la deuxime
instance du contrle, et lors de chacune des nouvelles crations suivantes. Dans
cet vnement, vous rcuprez les valeurs de proprits de l'instance du contrle
dans la copie mmoire du fichier .frm appartenant la feuille sur laquelle le
contrle a t plac.
L'vnement Resize se produit chaque fois qu'une instance d'un contrle est
recre, et chaque fois qu'elle est redimensionne soit en mode conception, par
le dveloppeur d'une feuille, soit dans le code, au moment de l'excution. Si votre
objet UserControl contient des contrles constitutifs, vous les organisez dans la
procdure relative cet vnement, ce qui dfinit l'apparence de votre contrle.
L'vnement Paint se produit chaque fois que le conteneur demande au
contrle de se dessiner lui-mme. Cela peut intervenir tout moment, mme
avant la rception par le contrle de son vnement Show (par exemple, si une
feuille cache s'imprime). Pour les contrles personnaliss, l'vnement Paint se
produit lorsque vous dessinez l'apparence de votre contrle. S'il n'y a aucun
contrle constitutif, l'objet UserControl se dessine lui-mme.
Vous lancez lexcution (F5). Visual Basic ferme la feuille.
L'vnement WriteProperties se produit lorsqu'une instance-cration de
votre contrle est dtruite, ds lors qu'au moins l'une des valeurs de proprits a
chang. Dans cet vnement, vous sauvegardez toutes les valeurs de proprits
dfinies par un dveloppeur pour l'instance du contrle. Les valeurs sont crites
dans la copie mmoire du fichier .frm.
L'vnement Terminate se produit lorsque le contrle est sur le point d'tre
dtruit. L'objet UserControl et ses contrles constitutifs sont dtruits.

Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 10

5 - Exemple de contrle ActiveX


5.1 Introduction


Lauteur voulait crer un programme permettant denvoyer des mails ultra-rapidement
depuis le bureau Windows. Cest chose faite avec Mail Now !, une sorte dOutlook acclr.
Lide tait de limiter la quantit dinformations saisir au strict minimum, soit une
adresse de serveur SMTP, une adresse mail dmetteur, une autre de destinataire, le
sujet du mail et le corps. Ces paramtres sont les paramtres minimaux de SMTP,
comme nous le verrons plus loin. Le contrle MailNow.ocx utilise un contrle constitutif
fourni par Microsoft dans VB, Winsock, et il est test dans un projet qui charge
lapplication dans le systray (la partie de droite de la barre des tches), afin de pouvoir y
accder en tout temps.



5.2 Incursion dans l'univers des tlcommunications.


Le contrle que nous allons dvelopper ncessite de comprendre certains mcanismes de
tlcommunications. Nous allons donc quitter momentanment lunivers microsoftien de
COM, et se pencher sur les protocoles TCP et SMTP.

Utilisation du contrle Winsock

Le contrle Winsock - qui na pas dinterface visible lexcution - permet daccder
facilement aux services de rseau TCP (Transfer Control Protocol) et UDP (User
Datagram Protocol). Il suffit, sans avoir connatre tous les dtails des connexions, de
dfinir les proprits et dinvoquer les mthodes du contrle pour assurer la connexion
vers une machine distante et pouvoir changer des donnes dans lune ou lautre des
directions.

Lapplication que nous crerons ncessitant une connexion, nous utiliserons le protocole
TCP, dont nous allons parler maintenant.
TCP tablit et de maintient une connexion vers un ordinateur distant, permettant ainsi
aux deux ordinateurs dchanger des donnes. Pour crer une application cliente, nous
devons connatre le nom de lordinateur serveur (ou son adresse IP, proprit
RemoteHost), ainsi que le port (proprit RemotePort) sur lequel il sera lcoute ,
puis invoquer la mthode connect. Nous ne nous occuperons pas de lapplication serveur,
notre application se limitant envoyer des mails.
Une fois la connexion ralise, chacun des ordinateurs peut envoyer (mthode SendData)
et recevoir (mthode GetData, qui suit lvnement DataArrival) des donnes.

Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 11
Introduction SMTP (Simple Mail Transfer Protocol)

TCP est un protocole de niveau 4 dans le modle OSI, cest--dire quil prend en charge
le transport de linformation en grant le flux de donnes entre 2 machines. La couche
applicative quand elle soccupe des dtails de communications dune application
particulire. Plusieurs implmentations de TCP/IP regroupent les applications suivantes :

- Telnet pour la prise de contrle distance
- FTP (File Transfer Protocol), le protocole de transfert de fichiers
- SNMP (Simple Network Management Protocol), permettant ladministration de
rseaux
- SMTP (Simple Mail Transfer Protocol), pour le courrier lectronique.

Cest sur cette dernire que nous nous attarderons.

La figure suivante montre un schma dchange par e-mail utilisant TCP/IP.



Il existe une multitude dimplmentations dagent dutilisateur (MH, Elm, ou encore Mush
sous Unix pour les plus connus). Lchange de courrier sous TCP est effectu par un
agent de transfert de message (MTA), le plus rpandu sous Unix tant Sendmail. Nous
nentrerons pas plus dans les dtails de MTA, nanmoins citons louvrage TCP/IP,
rgles et protocoles , de W.R. Stevens (voir bibliographie), pour une explication
complte du sujet.


Il y a un petit nombre de commandes que le client peut envoyer au serveur : moins
dune douzaine (en comparaison, FTP a plus de 40 commandes). Nous allons dcrire par
un exemple (fictif), effectu depuis une station Unix, lesquelles seront utilises dans
notre programme pour montrer ce qui se passe lorsquon envoie du courrier. Les
caractres en gras sont ceux saisis par lauteur, le reste tant gnr.

// nous invoquons lagent utilisateur
mail v rstevens@noao.edu
// ceci est affich par lagent
To : rstevens@noao.edu
// on nous demande ensuite le sujet
Subject : test
// lagent ajoute une ligne blanche entre les enttes et le corps

// le corps de notre message, termine par un point signifiant la fin du msg
a dimanche pour notre partie de golf.
.
// affichage de lagent utilisateur
utilisateur un
terminal
utilisateur un
terminal
metteur
rcepteur
agent
utilisateur
agent
utilisateur
file dattente de
courrier mettre
botes aux lettres
utilisateur
MTA
MTA
Connexion TCP
client
serveur
Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 12
Sending letter . . . rstevens@noao.edu . . .

// laffichage qui suit (et jusquau bout) est la sortie du MTA (Sendmail
dans notre cas)

Connecting to mailhost via ether . . .
Trying 140.253.1.34 . . . connected.

// le client effectue une ouverture active du port TCP 25. Quand cest
fait, le client attend un message de bienvenue (code de rponse 220) du
serveur. Cette rponse du serveur doit commencer avec le nom entirement
qualifi et conforme du domaine de la machine serveur noao.edu

220 noao.edu Sendmail 4.1/SAG-Noao.G89 ready at Mon, 20 Oct 01 15:34:22 MST

// le client sidentifie avec la commande HELO, dont largument est le nom
totalement qualifi du nom de domaine de la machine cliente

>>> HELO sun.tuc.noao.edu.
250 noao.edu Hello sun.tuc.noao.edu., pleased to meet you

// identification de lexpediteur du mail
>>> MAIL From :<rstevens@sun.tuc.noao.edu>
250 <rstevens@sun.tuc.noao.edu> . . . Sender OK

// identification du destinataire
>>> RCPT TO : <rstevens@noao.edu> . . . Recipient OK

// envoi des donnes
>>> DATA
354 Enter mail, end with . on a line by itself

>>>.
250 Mail accepted

>>> QUIT
221 noao.edu delivering mail

rstevens@noao.edu . . . Sent
sent.


Comme on le constate, seules 5 commandes sont excutes : dans lordre, HELO, MAIL
FROM, RCPT TO, DATA, et QUIT.

Revenons du ct de Microsoft pour concevoir notre contrle.

Nota Bene
Autant avertir le lecteur tout de suite : lauteur du contrle Mail Now ! a ralis deux
versions. La premire fonctionnait (plus ou moins bien) jusqu ce quune nouvelle
installation sur le serveur de mail de lEIVD (mail relay) ne vienne mettre son grain de
sel. Une deuxime version, allge, a du tre trouve en urgence. Celle-ci ne gre pas
les exceptions aussi bien que la prcdente (les codes derreurs retourns par le serveur
SMTP sont simplement retourns lutilisateur), mais elle a le mrite de fonctionner.
Cest donc cette deuxime version dont nous parlerons dans ce rapport (les sources de la
premire version tout comme ceux de la seconde sont fournis en annexe ainsi que sur le
CD Rom).
Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 13

5.3 Conception du contrle


Maintenant que nous avons vu comment fonctionnait le protocole SMTP, nous allons
lutiliser dans notre contrle.

Notre contrle, nomm MailNow, permettra denvoyer des mails partir dune interface
simplifie lextrme. Les seuls paramtres dont nous avons besoin sont ladresse du
serveur SMTP, ladresse email de lmetteur et celle du rcepteur.
Commenons donc par dfinir linterface graphique du contrle. Aprs avoir slectionn
Contrle ActiveX dans la fentre de nouveau projet, nous allons remplir lobjet
UserControl1 avec les mmes objets que sur la figure suivante.









Ajoutons le contrle Winsock (que nous aurons obtenu depuis Projet Composants.)
nimporte o sur UserControl.

Label nomm lblSMTP
TextBox nomm txtSMTP
Label nomm lblEmetteur
TextBox nomm txtEmetteur
Label nomm lblRecepteur
TextBox nomm txtRecepteur
Label nomm lblSujet
TextBox nomm txtSujet
Label nomm lblMail
TextBox nomm txtMail
Label nomm lblStatus
CommandButton nomm cmdMailnow
CommandButton nomm CmdSite
CommandButton nomm CmdNew
Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 14
Apposons le code suivant sur le bouton CmdNew, de telle manire quun clic sur le bouton
efface les champs adresse du destinataire , sujet , et mail . Ainsi, un utilisateur
dsirant envoyer plusieurs mails naura pas effacer lui-mme ces champs.

' bouton nouveau mail
Private Sub CmdNew_Click()
TxtRecepteur = ""
TxtSujet = ""
TxtMail = ""
End Sub

Crons un type numrant tous les messages possibles lors de la communication entre le
serveur SMTP et le client :

Private Enum SMTP_State
MAIL_CONNECT
MAIL_HELO
MAIL_FROM
MAIL_RCPTTO
MAIL_DATA
MAIL_DOT
MAIL_QUIT
End Enum

Private m_State As SMTP_State

La partie importante du code se place dans lvnement Winsock1_DataArrival, qui est
lev une fois la connexion ralise. Voyons comment cette connexion seffectue :

' bouton envoyer mail
Private Sub CmdMailnow_Click()
Winsock1.Connect Trim$(txtSMTP), 25
m_State = MAIL_CONNECT
End Sub

Un clic sur le bouton Mail Now ! excute la connexion au serveur SMTP (txtSMTP). Puis
lvnement DataArrival est lev. Les donnes (code de rponse 3 chiffres) sont alors
extraites du tampon et passent par un test if qui va - selon ces valeurs - ragir de
manire adquate.

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim strServerResponse As String
Dim strResponseCode As String
Dim strDataToSend As String

'Sortir les donnes du tampon de la socket
Winsock1.GetData strServerResponse
Debug.Print strServerResponse

'Reception du code de reponse du serveur
strResponseCode = Left(strServerResponse, 3)
'
'traitements a effectuer en fonction du code
'de reponse envoye par le serveur
If strResponseCode = "250" Or _
strResponseCode = "220" Or _
strResponseCode = "354" Then

Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 15
Select Case m_State

ICI SELON LE CODE A 3 CHIFFRES RECU !

End Select
Else
'En cas de reponse du serveur ne figurant
'pas dans la liste requise, la connexion
'est fermee, et l'utilisateur recoit le
'code d'erreur
Winsock1.Close

If Not m_State = MAIL_QUIT Then
MsgBox "SMTP Error: " & strServerResponse, _
vbInformation, "SMTP Error"
Else
' affichage d'envoi
lblStatus.Caption = "Votre mail est envoy !"
lblStatus.Refresh
End If

End If

End Sub

Ainsi, voyons comment est gre la connexion (nous allons uniquement dtailler
MAIL_CONNECT, soit le premier cas rencontr par le contrle : la connexion au serveur
3
) :

Select Case m_State
Case MAIL_CONNECT

lblStatus.Caption = "Connexion..." ' affichage de l'etat
lblStatus.Refresh
'changement de l'etat de la session
m_State = MAIL_HELO
'suppression des espaces blancs
strDataToSend = Trim$(TxtEmetteur)
'extraction de l'adresse email
strDataToSend = Left$(strDataToSend, _
InStr(1, strDataToSend, "@") - 1)
'envoi de la commande HELO au serveur
Winsock1.SendData "HELO " & strDataToSend & vbCrLf
Debug.Print "HELO " & strDataToSend
' affichage de connexion effectuee
lblStatus.Caption = "Connect !"
lblStatus.Refresh


Les affichages dans le Debug sont ici pour garder une trace dans la fentre dexcution
des actions effectues par le programme. Rappelons quil nest pas possible de dboguer
notre projet tant donn quil utilise le contrle Winsock, et quune socket ne peut tre
stoppe en excution
4
.

Ajoutons le code du bouton CmdSite. Celui-ci permettra douvrir une fentre Internet
Explorer (IE dans ce cas tant le conteneur du contrle) en spcifiant lurl dun site (en
loccurrence celui de lauteur) :

3
Se rfrer aux annexes codes source pour le code complet.
4
Cest un petit dtail qui a fait perdre pas mal de temps lauteur.

Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 16

' bouton permettant de se dplacer sur le site web de l'auteur
Private Sub CmdSite_Click()
Hyperlink.NavigateTo Target:="http://www.chez.com/fcomte"
End Sub

Une fois le code termin, notre contrle est prt. Ajoutons un projet standard EXE
(nomm PrjSMTP) afin de tester le contrle, et crons une instance de celui-ci en le
dposant sur la feuille de PrjSMTP.

..

6 - Les pages de proprits



6.1 Introduction


Les pages de proprits vous offrent une alternative la fentre Proprits pour afficher
les proprits des contrles ActiveX. Vous pouvez regrouper sur une page plusieurs
proprits en relation les unes avec les autres, ou utiliser une page pour doter une
proprit trop complexe pour la fentre Proprits dune interface ayant laspect dune
bote de dialogue.

Visual Basic fournit 3 pages de proprits standards : StandardFont, StandardColor, et
StandardPicture. Si vous dclarez des proprits de type Font, OLE_COLOR ou Picture,
la fentre Proprits de Visual Basic associera automatiquement ces proprits la page
de proprits standard approprie. La figure suivante montre un exemple de page de
proprits - qui comporte deux onglets - fournie par Visual Basic. Chaque onglet de la
page de proprit reprsente un objet PropertyPage. Cette page permet de choisir une
couleur en droulant un menu. Lavantage est que le choix de cette couleur seffectue
rapidement, sans avoir ouvrir une nouvelle fentre qui prendrait de la place. Mais aussi
de pouvoir saisir plus facilement des informations relatives au contrle que si cela devait
tre fait dans la fentre de proprits. Dans certains cas, le seul moyen dentrer une
valeur pour une proprit est dutiliser une page de proprits
5
. Mais nous verrons que ce
ne sont pas les seuls buts des pages de proprits.

















5
Ouvrez donc la page de proprits du contrle Coolbar (disponible depuis larticle Composant du menu Projet,
sous le nom Microsoft Windows Common Controls-3 6.0) pour constater le nombre de proprits disponibles.
Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 17
Une page de proprits peut galement tre ouverte, comme une feuille (bien que sa
conception ressemble celle dune feuille, nous verrons que son fonctionnement en est
trs loign). Cest le cas de la page de proprits du contrle Winsock, comme le
montre la figure suivante.



Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 18
Les pages de proprits souvrent en cliquant sur le bouton



Lors de la conception dune telle fentre, lobjet PropertyPage naffiche pas donglet. Il
naffiche pas non plus les boutons OK, Annuler, et Appliquer (lorsquils existent, ce qui
nest pas le cas dans notre exemple). Ceux-ci sont fournis automatiquement par la bote
de dialogue Pages de proprits, et ne font partie daucun objet individuel PropertyPage.
La bote de dialogue Pages de proprits utilise comme texte pour longlet la proprit
Caption de lobjet PropertyPage.

Nous allons maintenant voir comment fonctionnent les pages de proprits, en crer une,
la connecter un contrle, puis utiliser celles qui sont fournies par Visual Basic.



6.2 Fonctionnement des pages de proprits


Nous avons dj averti le lecteur que le fonctionnement dune page de proprits tait
diffrent de celui dune feuille. Par exemple, quand la bote de dialogue Pages de proprits
cre une instance dune page de proprits, lvnement Initialize est le premier que
reoit lobjet PropertyPage - exactement comme avec une feuille. Toutefois,
contrairement une feuille, lobjet PropertyPage ne reoit pas dvnement Load.
Lvnement cl pour lobjet PropertyPage est lvnement SelectionChanged.

Les trois actions essentielles que doit excuter lobjet PropertyPage sont :

Dans lvnement SelectionChanged, obtenir les valeurs de proprits diter.

Dfinir la proprit Changed de lobjet PropertyPage chaque fois que lutilisateur
dite une valeur de proprit.

Dans lvnement ApplyChanges, recopier sur le contrle (ou les contrles)
slectionn(s) les valeurs des proprits dites.
Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 19

Voyons ces actions les unes aprs les autres.

Lvnement SelectionChanged

Cet vnement se produit quand la page de proprits est affiche et quand un
changement se produit dans la liste des contrles slectionns
6
.

Vous devez toujours traiter cet vnement comme si votre page de proprits tait
charge pour la premire fois. Comme vous le verrez, un changement de slection
apporte un changement fondamental de ltat de la page de proprits.

Programmation de lvnement SelectionChanged pour un contrle unique

La chose la plus importante que vous aurez faire dans lvnement SelectionChanged
est de dfinir les valeurs des contrles qui affichent les valeurs de proprits pour
dition. Considrez par exemple la page Gnral pour un contrle nomm Velociraptor :






















Supposez que la proprit Age du contrle Velociraptor utilise linstruction Enum Publique
suivante :

Public Enum DinoAge
vvPetit
vvJeune
vvAdult
End Enum


6
Par exemple, aprs avoir slectionn une instance de votre contrle et avoir ouvert la bote de dialogue Pages
de proprits, un dveloppeur pourrait sapercevoir quil aurait d changer les proprits de deux instances de
votre contrle. En cliquant sur la seconde instance tout en maintenant la touche Ctrl enfonce, il peut ajouter
une seconde instance la liste des contrles slectionns. Chacune de vos pages de proprits recevrait alors
un vnement SelectionChanged.
Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 20
Lvnement SelectionChanged de la page de proprits pourrait ressembler ceci :

Private Sub PropertyPage_SelectionChanged()
place la valeur de la proprit DinoName pour le premier
contrle slectionn dans la zone de texte txtDinoName
pour affichage et dition.
TxtDinoName = SelectedControls(0).DinoName
utilise la valeur de la proprit Age du premier contrle
slectionn pour slectionner loption approprie dans le
cadre doptions Age.
optAge(SelectedControls(0).Age).Value = True
Le code ci-dessus rsulte du fait que les lments de linstruction
Enum DinoAge ont les valeurs 0, 1, et 2.
End Sub


La collection SelectedControls

La collection SelectedControls contient tous les contrles qui se trouvent slectionns
dans le conteneur sur lequel travaille le dveloppeur. La collection peut contenir plusieurs
instances de votre contrle. Si votre page de proprits est partage par plus dun
contrle dans votre composant, alors la collection peut contenir plusieurs types de
contrles
7
.

Pour le moment, ignorez la possibilit que de multiples contrles puissent tre
slectionns. Ce que fait le code montr ci-dessus dans lvnement SelectionChanged
consiste prendre la valeur de chaque proprit du premier contrle de la collection et
lassigner au contrle appropri sur la page de proprits.
Dans le cas dun unique contrle slectionn, toutes les valeurs des proprits du
contrle se trouvent places dans des champs o lutilisateur peut les diter.

Diffrentes manires dditer des proprits

Au lieu de montrer les valeurs de la proprit Age comme un ensemble doptions, vous
pouvez utiliser une liste droulante faisant apparatre les lments de lopration. Cette
liste prend moins de place que les options (avantage qui grandit avec le nombre de
valeurs possibles), et elle fait apparatre les noms des constantes qui seraient utilises
dans le code. Le fragment de code suivant vous montre comment vous pouvez tablir
une telle liste.


Private Sub PropertyPage_SelectionChanged()
TxtDinoName = SelectedControls(0).DinoName
cre une liste droulante contenant les valeurs et les noms des
lments Enum pour la proprit Age, et slectionne celle
qui correspond la valeur courante de la proprit Age.
cboAge.AddItem vvPetit & - vvPetit
cboAge.AddItem vvJeune & - vvJeune
cboAge.AddItem vvAdulte & - vvAdulte
lindex de chaque lment Enum dans la liste droulante est
identique la valeur de llment
End Sub

7
Vous navez pas vous inquiter du fait que la collection contienne dautres contrles que le vtre (par
exemple des contrles TextBox) car la bote de dialogue Pages de proprits naffiche que les pages qui sont
utilises par tous les contrles se trouvant slectionns.
Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 21

Puisque vous pouvez choisir nimporte quelle reprsentation modifiable qui ait un sens
pour une proprit, gardez lesprit que plus une proprit prend de place, plus il vous
faudra donglets. La minimisation du nombre donglets rend la page de proprits de
votre contrle plus facile utiliser. Pour la plupart des numrations, cest une liste
droulante qui fera lusage le plus efficace de lespace disponible.

Programmation de lvnement SelectionChanged pour des contrles multiples

Pour dterminer si de multiples contrles se trouvent slectionns, vous pouvez tester la
proprit Count de la collection SelectedControls en vrifiant si elle est suprieure 1.

Pour traiter de multiples instances de contrles slectionnes, il est utile de diviser en
deux groupes les proprits de votre contrle :

Les proprits qui peuvent recevoir sensiblement la mme valeur pour de
multiples contrles. Par exemple, il est trs pratique de pouvoir donner la mme
valeur la proprit BackColor de plusieurs contrles Label.

Les proprits auxquelles il ny aurait pas de sens donner la mme valeur pour
de multiples contrles. Par exemple, il nest pas particulirement utile de donner
la mme valeur plusieurs contrles Label pour la proprit Caption. Cela
pourrait mme tre embarrassant pour lutilisateur si cela se produisait.

Lune des approches que vous pourriez adopter pour votre vnement
SelectionChanged consiste dsactiver les champs pour les proprits de la seconde
catgorie, chaque fois que des contrles multiples sont slectionns
8
.

Activation du bouton Appliquer en affectant la valeur True la page de proprit Changed

Pour dire Visual Basic que lutilisateur a dit une proprit ou plus sur la page de
proprits, vous devez donner la valeur True la proprit Changed de lobjet
PropertyPage. Comme il nexiste aucun moyen de savoir quelle proprit un utilisateur
pourrait dcider de changer, vous devez faire de mme pour chaque proprit affiche
par page.

Par exemple, pour notifier lobjet PropertyPage des changements dans les proprits
DinoName ou Age de lexemple Velociraptor, vous utiliserez le code suivant :

Private Sub txtDinoName_Changed()
Changed = True
End

Private Sub cboAge_Changed()
Changed = True
End Sub

Notez que ceci revient exactement au mme que dcrire PropertyPage.Changed =
True
9
.


8
Si vous avez des contrles multiples dans votre projet et que deux dentre eux partagent une mme page de
proprits, assurez-vous de fournir une rcupration derreurs pour le code qui lit les valeurs de proprits. Si
le premier contrle slectionn ninclut pas toutes les proprits apparaissant sur la page, une erreur se
produira quand vous essaierez de lire cette valeur de proprit.
9
Lopration Changed = True remplit deux fonctions. Tout dabord, elle valide nouveau le bouton Appliquer.
Ensuite, elle vite la fermeture de la bote de dialogue quand lutilisateur clique sur OK. Cest la seule manire
dviter la fermeture de la bote de dialogue.
Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 22
La notification adresse lobjet PropertyPage pour lui indiquer que des valeurs ont
chang active le bouton Appliquer de la bote de dialogue Pages de proprits, et dclenche
lvnement ApplyChanges quand lutilisateur clique dessus, change les onglets, ou
ferme la bote de dialogue.

Lvnement ApplyChanges

Le second vnement par ordre dimportance dans un projet PropertyPage est
lvnement ApplyChanges. Cest avec cet vnement que vous recopiez sur les
contrles qui se trouvent slectionns les valeurs des proprits dites.

Lvnement ApplyChanges se produit quand lutilisateur :

Clique sur le bouton OK pour fermer la bote de dialogue
Clique sur le bouton Appliquer
Slectionne un autre onglet dans la bote de dialogue Pages de proprits.

Le code suivant pour lvnement ApplyChanges suppose que lvnement
SelectionChanged a t programm pour utiliser une liste droulante pour la proprit
Age comme montr plus haut.

Private Sub PropertyPage_ApplyChanges()
Dim vv As Velociraptor
dfinit la proprit DinoName du premier
contrle slectionn seulement
SelectedControls(0).DinoName = txtDinoName
For Each vv In SelectedControls
transfre la valeur se trouvant slectionne
dans la liste droulante pour la proprit DinoAge
tous les contrles slectionns
vv.DinoAge = cboAge.ListIndex
le code ci-dessus fonctionne parce que la valeur
de chacun des lments de linstruction Enum
est gale celle de son index dans cboAge.
Next
End Sub

Comme il ny a gnralement aucun sens donner le mme nom tous les vlociraptors,
la proprit DinoName nest applique quau premier contrle slectionn. La proprit
Age, quant elle, est applique tous les contrles slectionns.

Traitement des erreurs dans lvnement ApplyChanges

Dans le cas prsent ci-dessus, il ny a aucun risque derreur dans lvnement
ApplyChanges. La proprit Text est une simple chane, et la liste droulante limite les
entres de lutilisateur pour la proprit Age aux seules valeurs valides.

Si votre page de proprits permet lutilisateur de taper des valeurs qui peuvent tre
rejetes par la procdure Property Let (ou Property Set), vous devez utiliser la
rcupration derreur dans lvnement ApplyChanges. Le schma le plus simple consiste
utiliser On Error Resume Next, et tester Err.Number aprs chaque proprit
susceptible de causer une erreur.

Quand une erreur se produit :

Interrompez lvnement ApplyChanges
Affichez un message derreur, de faon que lutilisateur comprenne ce qui sest produit
Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 23
Placez le focus sur la proprit qui a caus lerreur
Donnez la valeur True la proprit Changed de lobjet PropertyPage.



6.3 Connexion d'une page de proprits un contrle ActiveX


Une fois que vous avez ajout des pages de proprits votre projet de contrle ActiveX,
vous pouvez utiliser la bote de dialogue Connexion des pages de proprits pour tablir une
connexion entre un contrle et les pages de proprits que vous voulez lui faire utiliser.

Quand un utilisateur fait apparatre la bote de dialogue Pages de proprits comme une
instance dun de vos contrles, chacune des pages que vous avez connectes au contrle
apparat comme un onglet dans la bote de dialogue.

1/ Dans la fentre Explorateur de projet, double-cliquez sur le contrle pour ouvrir sa
fentre de conception.

2/ Appuyez sur F4 pour ouvrir la fentre Proprits.

3/ Double-cliquez sur la proprit PropertyPages (ou un simple clic sur la proprit
puis sur le bouton Slection) pour ouvrir la bote de dialogue Connexion des pages de
proprits.

4/ Cochez chaque page de proprits que vous voulez faire apparatre lorsque le
dveloppeur, qui utilise votre contrle, ouvre la bote de dialogue Pages de
proprits.

5/ Utilisez les boutons Ordre des pages pour mettre les pages dans lordre o voulez
les voir apparatre dans la bote de dialogue Pages de proprits, puis cliquez sur
OK.



Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 24
6.4 Associer une page de proprits une proprit


Une proprit est parfois trop complique pour tre dfinie partir de la fentre
Proprits. Une proprit peut tre un objet, comme lobjet Fonts, dot de ses propres
proprits, comme nous lavons vu prcdemment. Elle peut aussi consister en un
tableau de valeurs, ou mme en une collection dobjets, comme une collection de
boutons de barre doutils.

Si vous dclarez une proprit de type Font, OLE_COLOR, ou Picture, Visual Basic
lassociera automatiquement une page StandardFont, StandardColor, ou
StandardPicture.

Pour associer une page de proprits une proprit individuelle

1/ Depuis la fentre Explorateur de projet, cliquez avec le bouton droit de la souris sur
la fentre de conception UserControl pour ouvrir le menu contextuel, et cliquez
sur Code pour ouvrir la fentre de code.

2/ Dans le menu Outils, cliquez sur Attributs de procdure pour ouvrir la bote de
dialogue Attributs de procdure, et cliquez sur Avancs pour dvelopper la bote de
dialogue.

3/ Dans la zone Nom, cliquez sur la proprit que vous voulez associer une page de
proprits.

4/ Slectionnez la page de proprits voulue dans la liste Utiliser cette page dans la
fentre Proprits, comme il est montr ci-dessous, puis cliquez sur Appliquer ou
sur OK.



Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 25
Evnement EditProperty

Visual Basic vous permet dassocier plusieurs proprits une mme page de proprits.
Vous voudrez peut-tre le faire si votre contrle a plus dune proprit qui utilise la
mme disposition de page de proprits ou si une proprit utilise en partie la disposition
dune autre page de proprits. Dans ce dernier cas, vous pouvez utiliser lvnement
EditProperty pour ne valider que les parties ncessaires de la page de proprits.

Quand lutilisateur clique sur le bouton Slection pour une proprit qui est associe une
page de proprits, la page reoit lvnement EditProperty en plus de celui quelle
reoit normalement. Vous pouvez utiliser largument PropertyName de lvnement
EditProperty pour identifier la proprit dont le bouton Slection a t cliqu.

Lvnement EditProperty vous permet de faire subir diffrentes oprations la page
de proprits, selon la nature de votre contrle et la complexit de la proprit qui se
trouve dite. Vous pourriez par exemple :

- Si la proprit qui se trouve dite est affiche dans un seul contrle sur la page de
proprit, placer le focus sur le contrle.
- Activer et dsactiver des contrles sur la page de proprits, de faon que seuls les
champs applicables la proprit spcifie soient actives.

Masquer des proprits dans la fentre Proprits

Il peut arriver que vous ne vouliez pas afficher une proprit dans la fentre Proprits.
Cela peut se produire si laffichage dune valeur de proprit demande des calculs
prenant beaucoup de temps et que le dveloppeur utilisant le contrle est irrit par le
temps daccs la fentre Proprits.

Dans la dialogue Attributs de procdure, accessible partir du menu Outils, cliquez sur la
proprit que vous voulez masquer. Cliquez ensuite sur le bouton Avances, cochez
loption Ne pas afficher dans la fentre Proprits, puis sur Appliquer.



6.5 Utiliser les pages de proprits standard


Visual Basic fournit trois pages de proprits standard : StandardFont, StandardColor,
et StandardPicture. Si vous dclarez des proprits de type Font, OLE_COLOR, ou
Picture, la fentre Proprits de Visual Basic associera automatiquement ces proprits
la page de proprits standard approprie.
Toutefois, Visual Basic n'associera pas automatiquement ces pages la bote de dialogue
Pages de proprits. Utilisez la procdure aborde au point 3 (connexion dune page de
proprits un contrle ActiveX) pour ajouter des pages de proprits standard la liste
des pages qui seront affiches dans la bote de dialogue Pages de proprits.

Pages de proprits standard et proprits multiples

Si votre contrle a plus d'une proprit qui utilise une page de proprits standard et que
vous ajoutez cette page la proprit PropertyPages de votre contrle, la page
standard inclura une liste de toutes les proprits que peut slectionner l'utilisateur.




Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 26

Par exemple, la figure suivante montre la fentre Proprits et la bote de dialogue
Pages de proprits pour l'hypothtique contrle Velociraptor, qui a plusieurs
proprits de type OLE_COLOR :


Comme le montre la figure suivante, la page Color affiche par la bote de dialogue
Pages de proprits pour le contrle Velociraptor comporte une zone de liste contenant
les quatre proprits de couleur du contrle.



Cette figure montre aussi que la bote de dialogue Pages de proprits utilise un format
trs diffrent de celui utilis par la fentre Proprits.

Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 27
La portion de code suivante montre comment la proprit StripeColor de l'hypothtique
contrle Velociraptor doit tre dclare de manire fonctionner avec la fentre
Proprits et la bote de dialogue Pages de proprits :

Private mStripeColor As OLE_COLOR

Public Property Get StripeColor() As OLE_COLOR
StripeColor = mStripeColor
End Property

Public Property Let StripeColor( _
ByVal NewColor As OLE_COLOR)
mStripeColor = NewColor
End Property




Travail de diplme Visual Basic 6 & technologie ActiveX Frdric Comte

Les contrles ActiveX Page Gnr le 22.03.2004 28

Bibliographie critique et liens Internet


- Visual Basic developers guide to COM and COM+, Wayne S. Freeze, Sybex 2000,
460 pages.
Louvrage qui permet le mieux (parmi ceux cits dans cette bibliographie) de
comprendre les technologies de composants de Microsoft, et met en relation
simplement et efficacement les diffrents concepts. La partie consacre DCOM est
malheureusement trs courte, et noffre quune petite introduction au protocole.
Lauteur traite galement COM+, MSMQ, et IMDB.

- Developping COM/ActiveX components with Visual Basic 6, Dan Appleman, Sams
1999, 860 pages.
Cet ouvrage sadresse avant tout aux dveloppeurs professionnels sur VB, et
montre les meilleures techniques pour dvelopper des composants COM et DCOM.
Dun niveau trs nettement plus lev que le titre prcdent, cette bible
(presque 900 pages !) passe en revue la conception dobjets COM mais aussi et
surtout les mcanismes internes lors de lexcution des composants. Cest laide
de cet ouvrage que jai ralis une grande partie des explications techniques.

- TCP/IP, rgles et protocoles, W.R. Stevens, Addison Wesley 1995, 600 pages.
Cet ouvrage ma permis de comprendre le protocole SMTP, utilis pour un des
exemples ActiveX.

- http://msdn.microsoft.com, le lien INCONTOURNABLE pour dvelopper sous plate-
forme Windows.

- http://www.microsoft.com/com/tech/com.asp, la page de Microsoft pour tout ce qui
concerne la technologie COM.

Vous aimerez peut-être aussi