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.
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 :
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.