Qu'est-ce-que c'est ?
Un contrôle ActiveX est un élément d'interface tel qu'un bouton, une zone de saisie, une combinaison de plusieurs contrôles standards. Le contenu et le comportement du contrôle sont stockés dans un fichier résultant de la compilation. On obtient un fichier d'extension .OCX. Il peut être facilement intégré dans la barre d'outils de Visual Basic pour tous les développements futurs.
Au boulot ! Créez un contrôle d'accès aux disques (Disques+Répertoires+Fichiers)
Etape 1:
Créez un nouveau projet de type "Contrôle ActiveX". Vous observerez que l'objet que VB vous présente n'est pas une feuille (Form) mais une surface grise qui représente le fond de votre contrôle (UserControl).
Etape 2:
Dessinez le contenu de votre contrôle, soit :
Un contrôle DriveListBox nommé Disque
Un contrôle DirListBox nommé Dossier
Un contrôle FileListBox nommé Fichier
Etape 3:
Les trois contrôles doivent être liés. Pour cela, on utilisera les procédures évenementielles suivantes:
Sub Disque_Change()
Dossier.Path=Disque.Drive
End Sub
Sub Dossier_Change()
Fichier.Path=Dossier.Path
End Sub
Etape 4:
Donnez un nom à votre contrôle. Pour cela, sélectionnez l'objet UserControl (le fond gris) et saisissez "CtrlFic" dans sa propriété Name.
Etape 5:
Premier test. Il n'est pas possible de tester le contrôle seul. VB6 vous proposera une boite de dialogue pour choisir l'environnement de test : un explorateur Web (I.E), un éxécutable,... . Vous pouvez également, comme dans cet exemple, utiliser un projet standard comme conteneur de votre contrôle.
Dans le menu Fichier, choisissez
Ajouter un projet. Le projet ajouté sera de type Standard.
Assurez-vous que toutes les fenêtres du projet de Contrôle ActiveX sont fermées
(pour tester correctement un contrôle ActiveX, aucune des fenêtres de son projet
ne doit être ouverte). Sur la feuille du projet Standard, vous dessinez
le contrôle : Il est disponible dans la boîte à outils avec l'icône
suivante .
Dans la fenêtre de projet, cliquez avec le bouton droit sur le nom du projet standard et choisissez Projet de démarrage dans le menu contextuel.
Executez, le contrôle est tout à fait opérationnel.
Etape 6:
Vous avez déjà créé un contrôle ActiveX. Il est très basique. Vous pouvez l'enrichir de propriétés, de méthodes et d'évènements.
Créez une propriété:
Vous allez créer une propriété Extension qui déterminera les types de fichiers à afficher dans la liste des fichiers de votre contrôle. Cette propriété existe déjà au sein de votre contrôle, c'est la propriété Pattern du contrôle "Fichier". Cependant, les propriétés, méthodes et évènements des éléments constitutifs d'un ActiveX. Dans cet exemple, si vous observez la liste des propriétés disponibles pour le contrôle ActiveX dessiné dans le projet de test, vous ne trouverez que des choses très générales et aucune des propriétés des sous contrôles.
La propriété Extension existera grâce à deux procédures générales que vous allez saisir dans le module de code de l'objet UserControl:
Public Property Get Extension() As String
Extension = Fichier.Pattern
End Property
La procédure Get se déclenchera chaque fois que la propriété sera consultée.
Public Property Let Extension(ByVal Valeur As String)
Fichier.Pattern = Valeur
End PropertyLa procédure Let se déclenchera chaque fois que la propriété sera modifiée.
Rendez vous sur le projet standard où se trouve une instance du contrôle, sélectionnez le contrôle sur la feuille et vérifiez la présence de la propriété Extension. Modifiez là en saisissant *.exe ou *.dll... et observez la mise à jour immédiate à l'intérieur du contrôle (comme les vrais!!!).
Testez en exécutant le programme standard. Vous constatez que la liste des fichiers affiche toujours tous les types de fichiers. Arrêtez. En mode création, vous observez que la propriété Extension a retrouvé sa valeur d'origine soit "*.*". La raison est que la propriété n'est pas encore persistante.
Quand vous travaillez en mode création avec un contrôle ActiveX, vous utilisez en fait une première instance du contrôle. Quand vous exécutez, la première instance est détruite et une seconde est créée pour le mode exécution. Enfin quand on revient en mode création, la seconde instance est détruite une troisième instance est créée pour le mode création. A chaque destruction d'une instance, les valeurs des propriétés sont perdues.
Pour conserver la valeur d'une propriété entre le mode création et le modeexécution, il faut s'appuyer sur deux procédures évènementielles du UserControl :
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
'Cette procédure se déclenche lors de la destruction d'une instance du contrôle en mode création (Quand on lance l'exécution), on écrit alors le contenu de Extension dans un objet ProbBag qui lui va subsister.PropBag.WriteProperty "Extension", Fichier.Pattern, "*.*"
End Sub
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
'Cette procédure se déclenche lors de la création d'une instance du contrôle en mode éxécution, on lit alors le contenu des propriétés qui ont persisté dans l'objet PropbagFichier.Pattern = PropBag.ReadProperty("Extension", "*.*")
End Sub
Testez.
Etape 7:
Créez une méthode. Vous allez créer la méthode RAZ qui replace votre contrôle CtrlFic sur "C:\"
Une méthode existe sous la forme d'une sub ou function publique dans le module de code du contrôle ActiveX:
Public Sub RAZ()
Disque.Drive = "c:\"
Dossier.Path = "c:\"
End SubDans le projet de test, créez un bouton de commande sous le contrôle ActiveX. Nommez le "BtnRAZ" puis saisissez le contenu de sa procédure évènementielle Click:
Private Sub BtnRAZ_Click()
CtrlFic1.RAZ
End Sub
Testez.
Etape 8:
Créez un évènement pour votre contrôle: Les évènements des contrôles constitutifs (Disque, Dossier, Fichier) ne sont pas captès par le projet de test mais seulement par le contrôle ActiveX lui-même. Si vous souhaitez que les projets utilisant votre contrôles récupèrent un évènement signalant le choix d'un fichier dans la liste, vous devez le créer.
Dans le module de code du contrôle ActiveX, déclarez dans General-Declarations un évènement avec :
Public Event ChoixFichier
Dans la procédure évènementielle Click du contrôle constitutif "Fichier", vous saisissez:
Private Sub Fichier_Click()
RaiseEvent ChoixFichier()
End Sub
Dans le projet standard de test, observez que le contrôle CtrlFic1 possède un évènement "ChoixFichier".
Testez.
Etape 9:
Dans la fenêtre de projet, sélectionnez le projet du Contrôle ActiveX. Dans le menu Fichier, demandez Créer CtrlFic.OCX. Le projet est alors compilé, le contrôle est disponible pour vos futurs projets.