6.6.Construction d'un contrôle ActiveX
sous Visual Basic 6.0
Plan du chapitre:1. Utilisation de l'expert de création d'ActiveX de VB
1.1 Création d'un projet-contrôle ActiveX
1.2 Ajout d'un projet de test du contrôle
1.3 Formation du contrôle "CDJoueur"
1.4 Ajout d'une nouvelle propriété
1.5 Ajout de méthodes
1.6 Ajout et déclenchement d'évènements
1.7 Implémentation des gestionnaires d'évènements des contrôles agrégés
1.8 Gestion des étapes de la vie du contrôle
1.9 Création d'une page de propriété
1.10 Création du fichier .ocx
Note : ceci n'est possible qu'avec l'édition professionnelle ou entreprise de Visual Basic. Ce chapitre est à utiliser avec votre logiciel VB ou bien à parcourir à titre d'information.
- anciennement appelés contrôles OLE.
- ajoutent une fonctionnalité interactive aux pages Web.
- peuvent être utilisés sous tout environnement de développement supportant ActiveX (Delphi, Visual C++, …) ainsi qu'avec des applications telles que Microsoft Office.
1. Utilisation de l'expert de création d'ActiveX de VB
1.1 Création d'un projet-contrôle ActiveX
- On ouvre un nouveau projet de type "Contrôle ActiveX" :
Visual Basic insère automatiquement dans le projet une fenêtre de conception :
On peut tout de suite fixer le nom du contrôle (propriété name) et le nom du projet (menu projet/propriétés/). On peut aussi enregistrer le projet et le fichier correspondant au contrôle, qui prendra l'extension .ctl (.ctx s'il contient des données binaires, comme des images bitmap). Le contrôle ne sera inséré dans un fichier .ocx que lorsqu'il sera compilé en code natif.
1.2 Ajout d'un projet de test du contrôle
Pour pouvoir tester le contrôle tout au long de sa conception, il faut se servir d'au moins un projet Exe Standard : on l'ajoute par la commande Fichier/Ajouter un projet/Exe Standard. Visual Basic crée alors automatiquement un groupe de projet (dont le fichier correspondant aura l'extension .vbg) :
Le projet s'affichant en gras est le projet de départ. Comme un projet Contrôle ActiveX ne peut être exécuté indépendamment, il faut changer cet ordre, par exemple en cliquant à droite sur le projet Exe Standard et en choisissant "Projet de démarrage" dans le menu contextuel.
Le contrôle ActiveX est déjà représenté dans la boîte à outils de VB avec une icône par défaut (l'icône d'un contrôle peut être changée en utilisant sa propriété ToolboxBitmap et en chargeant un fichier contenant une image de 15×16 pixels). L'icône est grisée (on ne peut déposer le contrôle sur une feuille) tant que la fenêtre de conception du contrôle est ouverte. Dès que l'on ferme cette fenêtre, le contrôle est utilisable dans le projet test.
1.3 Formation du contrôle "CDJoueur".
Il existe 3 façons de construire un contrôle ActiveX dans Visual Basic :
La fiche de conception s'utilise comme une feuille VB classique : on peut déposer successivement tous les composants puis utiliser la fenêtre de code pour réaliser l'implémentation du contrôle.
- par agrégation, en associant plusieurs composants préexistants : c'est ce que nous allons faire ici.
- par "héritage", en partant d'un contrôle de base : ceci s'effectue grâce à un complément (add-in) deVB, l'Assistant Interface de contrôles ActiveX.
- ex nihilo, en dessinant le nouveau contrôle et en ajoutant toutes les propriétés, méthodes et évènements nécessaires.
La fiche de conception se présentera ainsi :
1.4 Ajout d'une nouvelle propriété
Ceci se fait classiquement, comme dans un module de classe, à l'aide d'une variable privée au module et de procédures property get et property set.
- déclaration de la variable privée :
Dim festplein As Boolean- l'accès à la propriété en lecture :
Public Property Get EstPlein() As Boolean
EstPlein = festplein
End Property- ici la propriété sera en lecture seule, nous n'ajouterons donc pas de clause property let.
Il suffit de rajouter des fonctions et/ou des procédures avec la clause public. Dans notre cas, il n'y aura que des procédures.
1.6 Ajout et déclenchement d'évènements
- déclaration des évènements : ils doivent être déclarés public, à la manière de procédures dont on précise le nombre et le type des arguments :
Public Event OnOuvrir()
Public Event OnFermer()
Public Event OnLire()
Public Event OnStopper()- déclenchement des évènements : il s'effectue grâce au mot-clé RaiseEvent. Dans notre exemple, les évènements sont déclenchés dans le corps des méthodes :
Note : mciExecute est une fonction de l'API Win32. Sa déclaration est la suivante :Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long
1.7 Implémentation des gestionnaires d'évènements des contrôles agrégés
Il est nécessaire ici de traiter les gestionnaires de l'évènement Click des 3 boutons insérés :
1.8 Gestion des étapes de la vie du contrôle
Il faut savoir que lors de son utilisation, certains évènements ont immanquablement lieu :
tout d'abord, à la façon d'une classe, les évènements Initialize et Terminate ont lieu respectivement lors de la création et lors de la destruction d'une instance du contrôle, que ce soit une instance de conception ou une instance d'exécution.
3 évènements ont trait à la mise en mémoire des valeurs des propriétés par le conteneur du contrôle (par exemple dans un fichier .frm) : InitProperties, ReadProperties et WriteProperties. il est important de faire spécialement attention à 2 évènements classiques : Resize qui se produit une première fois quand on dépose le contrôle sur un conteneur, puis à chaque fois que le contrôle est redimensionné, et Paint, qui se produit à chaque fois que le contrôle doit être redessiné (il est notamment important dans le cas d'un contrôle créé ex nihilo).
Dans notre cas, nous traitons uniquement le redimensionnement du contrôle :
1.9 Création d'une page de propriété
Les pages de propriétés sont des boîtes de dialogues non modales s'affichant lorsqu'un utilisateur d'un composant clique sur l'item "Propriétés..." de son menu contextuel. Elles sont notamment utiles dans les environnements de développement n'ayant pas de fenêtre de propriétés (comme Visual C++), mais peuvent aussi servir dans le cas de relations complexes entre propriétés ou pour faciliter l'internationalisation en permettant une dénomination multilingue des propriétés.
Il suffit de lancer la compilation par le menu Fichier/Créer nom_controle.ocx. Il faut noter que Visual Basic recense automatiquement le contrôle dans la base de registre de la machine locale : on peut donc tester immédiatement un contrôle dans une application cliente.
Pour utiliser le contrôle sur une autre machine, il ne faudra pas oublier de l'inscrire dans le registre local (car c'est un objet COM) : cela peut se faire avec l'utilitaire standard de Microsoft, regsvr32.exe, ou par exemple avec celui de Borland, tregsvr.exe (livré avec Delphi) :
pour le recenser, exécuter la commande : tregsvr nom_fichier.ocx pour le dérecenser, exécuter la commande : tregsvr -u nom_fichier.ocx Note : nous n'avons créé ici qu'un seul contrôle, mais un fichier .ocx peut contenir plusieurs contrôles ActiveX.