{"id":257,"date":"2022-12-03T03:54:00","date_gmt":"2022-12-03T02:54:00","guid":{"rendered":"http:\/\/lesmrdtrucs.mataf35400.fr\/?page_id=257"},"modified":"2022-12-05T17:10:28","modified_gmt":"2022-12-05T16:10:28","slug":"creation-docx","status":"publish","type":"page","link":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/creation-docx\/","title":{"rendered":"Cr\u00e9ation d&rsquo;OCX"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"257\" class=\"elementor elementor-257\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-54b25ff2 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"54b25ff2\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6d1a8fec\" data-id=\"6d1a8fec\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3f570b68 elementor-widget elementor-widget-heading\" data-id=\"3f570b68\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">1) Cr\u00e9ation d'un nouveau Projet ActiveX.<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-551d89bd elementor-widget elementor-widget-text-editor\" data-id=\"551d89bd\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Tout d&rsquo;abord, commencez par cr\u00e9er un nouveau projet en faisant FICHIER|NOUVEAU Projet|Contr\u00f4le ActiveX &amp; OK<\/p><p>Vous vous trouvez \u00e0 pr\u00e9sent dans l&rsquo;espace de cr\u00e9ation de contr\u00f4le ActiveX, le projet, qui porte pour l&rsquo;instant le nom de projet1. Nous allons lui donner un nom qui permettra de l&rsquo;identifier lors de son ouverture ou sa recherche sur le disque dur. Cliquez dans l&rsquo;explorateur de Projet sur Projet1(Projet1), la Fen\u00eatre des propri\u00e9t\u00e9s affiche maintenant un tableau avec la propri\u00e9t\u00e9 (NAME) qui contient la valeut Projet1, faite un double-clique sur Projet1 et Entrez le nouveau nom du projet: \u00ab\u00a0DefileZone\u00a0\u00bb sans espace ni caract\u00e8re particulier.<\/p><p>Dans ce projet, nous allons cr\u00e9er un contr\u00f4le qui servira \u00e0 faire d\u00e9filer du texte selon plusieurs options que l&rsquo;utilisateur pourra modifier (Direction du d\u00e9filement, Texte \u00e0 afficher, Couleur de fond, du texte, ?). Pour cr\u00e9er le contr\u00f4le, il nous faut une fen\u00eatre vide, Visual Basic en a cr\u00e9\u00e9 une pour vous, elle se nomme UserControl1, nous allons renommer ce contr\u00f4le pour mieux l&rsquo;identifier parmi tous les autres que poss\u00e8de d\u00e9j\u00e0 Visual Basic, pour cela, cliquez dans l&rsquo;explorateur de projet sur UserControl1 (UserControl1) et modifier la propri\u00e9t\u00e9 (NAME) pour qu&rsquo;elle affiche DefileText, en effet, le nom du contr\u00f4le doit \u00eatre diff\u00e9rent de celui du projet.<\/p><p>Maintenant que le projet et le contr\u00f4le sont initialis\u00e9s, il est conseill\u00e9 de les enregistrer, faites donc un clic sur la disquette, une fen\u00eatre d&rsquo;enregistrement s&rsquo;affiche, choisissez un r\u00e9pertoire et cr\u00e9ez en un nouveau que vous appelez DefileZone, vous y enregistrer le contr\u00f4le qui prend l&rsquo;extension .ctl et le Projet .vbp en cliquant sur Enregistrer \u00e0 deux reprises. D\u00e8s maintenant, lorsque vous verrez ce symbole vous enregistrerez votre projet pour ne pas perdre les donn\u00e9es (Panne ou plantage?) Voil\u00e0 le projet cr\u00e9\u00e9, nous allons maintenant passer \u00e0 la cr\u00e9ation du mod\u00e8le.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-441233d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"441233d\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9ecd348\" data-id=\"9ecd348\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-18766864 elementor-widget elementor-widget-heading\" data-id=\"18766864\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">2) La cr\u00e9ation du contr\u00f4le.<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-52d0b1ef elementor-widget elementor-widget-text-editor\" data-id=\"52d0b1ef\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Pla\u00e7ons les contr\u00f4le dont nous aurons besoins pour r\u00e9aliser notre DefileText, placez donc un Label et un timer, peux importe la taille que vous donnez au label, mais placez le aux coordonn\u00e9es (0,0), soit manuellement en maintenant le bouton de la souris enfonc\u00e9 et en d\u00e9pla\u00e7ant le pointeur, soit dans la fen\u00eatre des propri\u00e9t\u00e9s, en mettant les propri\u00e9t\u00e9s TOP et LEFT \u00e0 0. R\u00e9glez aussi le nom du label \u00e0 \u00ab\u00a0Dtext\u00a0\u00bb et le nom du timer \u00e0 \u00ab\u00a0Dtimer\u00a0\u00bb, question de s&rsquo;y retrouver si on ajoutait des timers et des labels. Voil\u00e0, les contr\u00f4les dont nous aurons besoins sont plac\u00e9s, nous allons entrer le code en commen\u00e7ant par celui qui va r\u00e9gler automatiquement la taille du lable, nous allons donc allez dans l&rsquo;\u00e9v\u00e9nement Resize du contr\u00f4le, double-cliquez sur le fond gris du contr\u00f4le, vous arrivez dans la page de code de celui-ci., dans l&rsquo;\u00e9v\u00e9nement UserControl_Initialize() , choisissez Resize dans la liste d\u00e9roulante en haut \u00e0 droite, vous voil\u00e0 alors dans l&rsquo;\u00e9v\u00e9nement UserControl_Resize() qui va nous permettre de r\u00e9gler la taille du label. Il n&rsquo;y a que deux possibilit\u00e9, soit la taille du contr\u00f4le est r\u00e9gl\u00e9e par l&rsquo;utilisateur, soit il prend la taille du label, le choix se fera en fonction de la propri\u00e9t\u00e9 AutoSize du Label que l&rsquo;utilisateur pourra modifier, voici le code en d\u00e9tail:<\/p><p><span style=\"color: #0000ff;\"><em>Private Sub<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0\u00a0 UserControl_Resize()<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0If Dtext.AutoSize = True Then<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 &lsquo;La largeur du contr\u00f4le devient la largeur du Dtext<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 UserControl.Width = Dtext.Width<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 &lsquo;La hauteur du contr\u00f4le devient la heuteur du Dtext<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 UserControl.Height = Dtext.Height<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0End If<br \/><\/em><\/span><span style=\"color: #0000ff;\"><em>End Sub<\/em><\/span><\/p><div>Apr\u00e8s le code de redimensionnement, il nous reste encore \u00e0 programmez le Timer et \u00e0 le configurer pour qu&rsquo;il d\u00e9cale le texte dans une des 4 directions puis le fasse revenir par le c\u00f4t\u00e9 oppos\u00e9 pour qu&rsquo;il d\u00e9file. Il va donc falloir que nous tenions compte de plusieurs arguments: la direction et la vitesse. Nous allons donc cr\u00e9er 2 variables gr\u00e2ce aux lignes de code plac\u00e9es tout en haut de la page de code (Car les d\u00e9clarations publiques doivent se trouver dans les premi\u00e8re lignes de code):<\/div><div>\u00a0<\/div><p><span style=\"color: #0000ff;\"><em>Public Direction As String &lsquo;Direction est une chaine de caract\u00e8re donc String<br \/>Public Speed As Integer &lsquo;Speed est un nombre de point, donc Integer<\/em><\/span><\/p><p>Les variables sont d\u00e9clar\u00e9es et comment\u00e9es, donc nous allons nous occuper du Timer, en commen\u00e7ant par r\u00e9gler ses propri\u00e9t\u00e9s, r\u00e9glez donc Enabled sur False et Interval sur 100, cela signifie que le timer sera d\u00e9sactiv\u00e9 par d\u00e9faut et qu&rsquo;il agira toutes les 100 millisecondes. Faites ensuite un double-clique sur le Timer pour passez en mode codage, vous arrivez dans l&rsquo;\u00e9v\u00e9nement DTimer_Timer(), tout ce qui se trouve dans cet \u00e9v\u00e9nement se d\u00e9clanchera toutes les 100 millisecondes si le Timer est Enabled (Activ\u00e9). Nous allons utiliser le code suivant pour le d\u00e9filement:<\/p><p><em><span style=\"color: #0000ff;\">Private Sub DTimer_Timer()<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0\u00a0 If Direction = \u00ab\u00a0right\u00a0\u00bb Then<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 &lsquo;On place le curseur en haut du contr\u00f4le<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 DText.Top = 0<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 &lsquo;On d\u00e9cale Dtext de Speed vers la droite<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 DText.Left = DText.Left + Speed<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 &lsquo;Si Dtext sort de l&rsquo;\u00e9cran, on le remet \u00e0 droite de l&rsquo;\u00e9cran<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 If DText.Left &gt; UserControl.Width Then DText.Left = -DText.Width<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0ElseIf Direction = \u00ab\u00a0left\u00a0\u00bb Then<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 &lsquo;On place le curseur en haut du contr\u00f4le<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 DText.Top = 0<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 &lsquo;On d\u00e9cale Dtext de Speed vers la gauche<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 DText.Left = DText.Left &#8211; Speed<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 &lsquo;Si Dtext sort de l&rsquo;\u00e9cran, on le remet \u00e0 gauche de l&rsquo;\u00e9cran<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 If DText.Left + DText.Width &lt; 0 Then DText.Left = UserControl.Width<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0ElseIf Direction = \u00ab\u00a0top\u00a0\u00bb Then<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 &lsquo;On place le curseur \u00e0 gauche du contr\u00f4le<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 DText.Left = 0<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 &lsquo;On d\u00e9cale Dtext de Speed vers le haut<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 DText.Top = DText.Top &#8211; Speed<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 &lsquo;Si Dtext sort de l&rsquo;\u00e9cran, on le remet en bas de l&rsquo;\u00e9cran<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 If DText.Top + DText.Height &lt; 0 Then DText.Top = UserControl.Height<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0ElseIf Direction = \u00ab\u00a0bottom\u00a0\u00bb Then<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 &lsquo;On place le curseur \u00e0 gauche du contr\u00f4le<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 DText.Left = 0<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 &lsquo;On d\u00e9cale Dtext de Speed vers le bas<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 DText.Top = DText.Top + Speed<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 &lsquo;Si Dtext sort de l&rsquo;\u00e9cran, on le remet en haut de l&rsquo;\u00e9cran<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 If DText.Top &gt; UserControl.Height Then DText.Top = -DText.Height<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0End If<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">End Sub<\/span><\/em><br \/><br \/>Et voil\u00e0, le contr\u00f4le en lui-m\u00eame est termin\u00e9.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-27d46c10 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"27d46c10\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2e36b5b\" data-id=\"2e36b5b\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-188eb59c elementor-widget elementor-widget-heading\" data-id=\"188eb59c\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">3) Les propri\u00e9t\u00e9s.<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3c070dff elementor-widget elementor-widget-text-editor\" data-id=\"3c070dff\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Nous allons passer \u00e0 la cr\u00e9ation des propri\u00e9t\u00e9s auxquelles l&rsquo;utilisateur pourra acc\u00e9der. Nous allons les d\u00e9clarer publiques pour l&rsquo;envoie et la r\u00e9ception de valeurs, gr\u00e2ce \u00e0 GET et LET. La premi\u00e8re propri\u00e9t\u00e9 \u00e0 laquelle l&rsquo;utilisateur doit acc\u00e9der est le texte du Dtext, nous allons simplement appeler cette propri\u00e9t\u00e9 Text, voici les deux Properties que nous allons ajouter \u00e0 la suite du code, donc tout en bas (Ceci n&rsquo;est pas une obligation mais il vaut mieux respecter toujours le m\u00eame ordre pour s&rsquo;y retrouver: Code, Propri\u00e9t\u00e9s, M\u00e9thodes, Fonctions, Ev\u00e9nements). Donc nous allons cr\u00e9er la propri\u00e9t\u00e9 Text avec les lignes de codes suivantes:<\/p><p><span style=\"color: #0000ff;\"><em>Public Property Get Text() As String<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0&lsquo;Text renvoie le caption du Dtext<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0Text = DText.Caption<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>End Property<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>Public Property Let Text(ByVal New_text As String)<br \/>\u00a0\u00a0 \u00a0&lsquo;DText prend la caption que l&rsquo;utilisateur envoie<br \/>\u00a0\u00a0 \u00a0DText.Caption = New_text<br \/>\u00a0\u00a0 \u00a0&lsquo;Pour que le label prenne la taille du texte on le met pendant un instant en AutoSize = True<br \/>\u00a0\u00a0 \u00a0&lsquo;Puis on remet la valeur d&rsquo;origine \u00e0 AutoSize<br \/>\u00a0\u00a0 \u00a0avant = DText.AutoSize: DText.AutoSize = True: DText.AutoSize = avant<br \/>\u00a0\u00a0 \u00a0&lsquo;On indique le changement au programme<br \/>\u00a0\u00a0 \u00a0PropertyChanged \u00ab\u00a0text\u00a0\u00bb<br \/>End Property <br \/><\/em><\/span><\/p><p>Nous allons faire le m\u00eame pour les autres propri\u00e9t\u00e9s: Direction, Speed, mais aussi BackColor, ForeColor, Font, AutoSize et ToolTipText:<\/p><p><span style=\"color: #0000ff;\"><em>&lsquo;Pour BackColor<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>Public Property Get BackColor() As OLE_COLOR<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0BackColor = DText.BackColor<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>End Property<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>Public Property Let BackColor(ByVal New_BackColor As OLE_COLOR)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0DText.BackColor = New_BackColor<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0UserControl.BackColor = New_BackColor<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0PropertyChanged \u00ab\u00a0BackColor\u00a0\u00bb<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>End Property<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>&lsquo;Pour ForeColor<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>Public Property Get ForeColor() As OLE_COLOR<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0ForeColor = DText.ForeColor<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>End Property<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>Public Property Let ForeColor(ByVal New_ForeColor As OLE_COLOR)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0DText.ForeColor = New_ForeColor<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0PropertyChanged \u00ab\u00a0ForeColor\u00a0\u00bb<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>End Property<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>&lsquo;Pour ToolTipText<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>Public Property Get ToolTipText() As String<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0ToolTipText = DText.ToolTipText<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>End Property<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>Public Property Let ToolTipText(ByVal New_ToolTipText As String)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0DText.ToolTipText = New_ToolTipText<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0PropertyChanged \u00ab\u00a0ToolTipText\u00a0\u00bb<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>End Property<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>&lsquo;Pour Font<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>Public Property Get Font() As Font<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0Set Font = DText.Font<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>End Property<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>Public Property Set Font(ByVal New_Font As Font)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0Set DText.Font = New_Font<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0PropertyChanged \u00ab\u00a0Font\u00a0\u00bb<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>End Property<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>&lsquo;Pour AutoSize<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>Public Property Get AutoSize() As Boolean<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0AutoSize = DText.AutoSize<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>End Property<\/em><\/span><\/p><p><em><span style=\"color: #0000ff;\">Public Property Let AutoSize(ByVal New_AutoSize As Boolean)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0DText.AutoSize = New_AutoSize<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0PropertyChanged \u00ab\u00a0AutoSize \u00ab\u00a0<\/span><br \/><span style=\"color: #0000ff;\">End Property <\/span><br \/><\/em><\/p><p>Les propri\u00e9t\u00e9s sont maintenant presque termin\u00e9es. En effet elles ne sont pas m\u00e9moris\u00e9es lors du lancement du programme, donc nous allons les enregistrer en m\u00e9moire gr\u00e2ce \u00e0 la m\u00e9thode UserControl_WriteProperties. Nous devons cr\u00e9er un sac de propri\u00e9t\u00e9 et y enregistrer toutes les valeurs, en sp\u00e9cifiant le nom de la propri\u00e9t\u00e9. La valeur et la valeur par d\u00e9faut:<\/p><p>\u00a0<\/p><p><em><span style=\"color: #0000ff;\">\u00a0Private Sub UserControl_WriteProperties(PropBag As PropertyBag)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0&lsquo;On utilise le sac de propri\u00e9t\u00e9s PropBag et on y enregistre les propri\u00e9t\u00e9s et leurs valeurs<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0Call PropBag.WriteProperty(\u00ab\u00a0Direction\u00a0\u00bb, Direction, \u00ab\u00a0right\u00a0\u00bb)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0Call PropBag.WriteProperty(\u00ab\u00a0Speed\u00a0\u00bb, Speed, 12)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0Call PropBag.WriteProperty(\u00ab\u00a0BackColor\u00a0\u00bb, UserControl.BackColor, &amp;H8000000F)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0Call PropBag.WriteProperty(\u00ab\u00a0ForeColor\u00a0\u00bb, DText.ForeColor, &amp;H80000012)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0Call PropBag.WriteProperty(\u00ab\u00a0ToolTipText\u00a0\u00bb, DText.ToolTipText, \u00ab\u00a0\u00a0\u00bb)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0Call PropBag.WriteProperty(\u00ab\u00a0Text\u00a0\u00bb, DText.Caption, \u00ab\u00a0\u00a0\u00bb)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0Call PropBag.WriteProperty(\u00ab\u00a0AutoSize\u00a0\u00bb, DText.AutoSize, False)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0Call PropBag.WriteProperty(\u00ab\u00a0Font\u00a0\u00bb, DText.Font, Ambient.Font)<\/span><br \/><span style=\"color: #0000ff;\">End Sub <\/span><br \/><br \/><\/em>L&rsquo;\u00e9tape suivante consiste \u00e0 lire les prpri\u00e9t\u00e9s lors du chargement du contr\u00f4le, cette fois gr\u00e2ce \u00e0 UserControl_ReadProperties:<br \/><em><br \/><span style=\"color: #0000ff;\">Private Sub UserControl_ReadProperties(PropBag As PropertyBag)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0Direction = PropBag.ReadProperty(\u00ab\u00a0Direction\u00a0\u00bb, \u00ab\u00a0right\u00a0\u00bb)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0Speed = PropBag.ReadProperty(\u00ab\u00a0Speed\u00a0\u00bb, 12)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0UserControl.BackColor = PropBag.ReadProperty(\u00ab\u00a0BackColor\u00a0\u00bb, &amp;H8000000F)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0DText.BackColor = PropBag.ReadProperty(\u00ab\u00a0BackColor\u00a0\u00bb, &amp;H8000000F)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0DText.ForeColor = PropBag.ReadProperty(\u00ab\u00a0ForeColor\u00a0\u00bb, &amp;H80000012)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0DText.ToolTipText = PropBag.ReadProperty(\u00ab\u00a0ToolTipText\u00a0\u00bb, \u00ab\u00a0\u00a0\u00bb)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0DText.Caption = PropBag.ReadProperty(\u00ab\u00a0Text\u00a0\u00bb, \u00ab\u00a0\u00a0\u00bb)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0DText.AutoSize = PropBag.ReadProperty(\u00ab\u00a0AutoSize\u00a0\u00bb, False)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0Set DText.Font = PropBag.ReadProperty(\u00ab\u00a0Font\u00a0\u00bb, Ambient.Font)<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0&lsquo;Pour que le label prenne la taille du texte on le met pendant un instant en AutoSize = True<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0&lsquo;Puis on remet la valeur d&rsquo;origine \u00e0 AutoSize<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0avant = DText.AutoSize: DText.AutoSize = True: DText.AutoSize = avant<\/span><br \/><span style=\"color: #0000ff;\">End Sub <\/span><br \/><br \/>C&rsquo;est fini pour les propri\u00e9t\u00e9s.<\/em><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-43d67118 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"43d67118\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7750f86c\" data-id=\"7750f86c\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-79ccd9f5 elementor-widget elementor-widget-heading\" data-id=\"79ccd9f5\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">4) Les m\u00e9thodes.<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-25696caa elementor-widget elementor-widget-text-editor\" data-id=\"25696caa\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Apr\u00e8s les propri\u00e9t\u00e9s, nous allons ajouter une m\u00e9thode, Command, qui demandera un argument, et selon cet argument la m\u00e9thode executera une action. Les m\u00e9thodes sont des Sub mais Publiques, elles peuvent donc recevoir des arguments mais ne renvoient aucune valeur. Voici le code de la m\u00e9thode Command:<br \/><br \/><span style=\"color: #0000ff;\"><em>Public Sub Command(AExecuter As String)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0&lsquo;La m\u00e9thode Command demande un argument, \u00ab\u00a0AExecuter\u00a0\u00bb<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0&lsquo;Si cet argument vaut start alors on lance le DTimer<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0If LCase(AExecuter) = \u00ab\u00a0start\u00a0\u00bb Then DTimer.Enabled = True<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0&lsquo;Si l&rsquo;argument vaut stop on stop le DTimer<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0If LCase(AExecuter) = \u00ab\u00a0stop\u00a0\u00bb Then DTimer.Enabled = False<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>End Sub<\/em> <\/span><br \/><br \/>C&rsquo;est la seule m\u00e9thode que nous allons mettre, mais vous pouvez en ajouter. <\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-67e53437 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"67e53437\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-74aa19da\" data-id=\"74aa19da\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-51b38a5c elementor-widget elementor-widget-heading\" data-id=\"51b38a5c\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">5) Les Fonctions.<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7de1ee36 elementor-widget elementor-widget-text-editor\" data-id=\"7de1ee36\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Les fonction ne sont autre que des m\u00e9thodes qui renvoie une valeur, nous n&rsquo;avons pas besoin de fonction dans notre contr\u00f4le, mais voici la m\u00e9thode Command modifi\u00e9e pour qu&rsquo;elle renvoie une valeur, nous allons l&rsquo;appeler Execute et elle renverra un valeur Boolean qui indiquera si une action a \u00e9t\u00e9 effectu\u00e9e avec l&rsquo;argument. Ici ce n&rsquo;est plus un Sub mais un Function qui est employ\u00e9:<br \/><br \/><span style=\"color: #0000ff;\"><em>Public Function Execute(AExecut As String) As Boolean<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0&lsquo;On place la valeur par d\u00e9faut de Execute sur True<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0Execute = True<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0&lsquo;La m\u00e9thode Command demande un argument, \u00ab\u00a0AExecut\u00a0\u00bb<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0&lsquo;Si cet argument vaut start alors on lance le Dtimer<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0If LCase(AExecut) = \u00ab\u00a0start\u00a0\u00bb Then<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DTimer.Enabled = True<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0&lsquo;Si l&rsquo;argument vaut stop on stop le DTimer<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0ElseIf LCase(AExecut) = \u00ab\u00a0stop\u00a0\u00bb Then<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DTimer.Enabled = False<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0&lsquo;Si rien n&rsquo;a \u00e9t\u00e9 fait Execute devient False<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0Else<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Execute = False<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0EndIf<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>End Function <\/em><\/span><br \/><br \/>Voil\u00e0, d\u00e9j\u00e0 termin\u00e9&#8230; <\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-378d83b9 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"378d83b9\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1d85408\" data-id=\"1d85408\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3d5a70a2 elementor-widget elementor-widget-heading\" data-id=\"3d5a70a2\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">6) Les Ev\u00e9nements.<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-398a2182 elementor-widget elementor-widget-text-editor\" data-id=\"398a2182\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Les \u00e9v\u00e9nements permettent \u00e0 l&rsquo;utilisateur de r\u00e9agir directement \u00e0 une action r\u00e9alis\u00e9e sur le contr\u00f4le, par exemple l&rsquo;\u00e9v\u00e9nement MouseMove permet de d\u00e9clencher une action lorsque la souris passe sur le contr\u00f4le. Pour l&rsquo;instant aucun \u00e9v\u00e9nement n&rsquo;est plac\u00e9 dans votre contr\u00f4le, mais nous allons en ajouter quelques uns. Les \u00e9v\u00e9nements doivent \u00eatre d\u00e9clar\u00e9s avec les arguments qu&rsquo;ils utilisent, voici comment les d\u00e9clarer:<br \/><br \/><span style=\"color: #0000ff;\"><em>Event Click()<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>Event DblClick()<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>Event KeyDown(KeyCode As Integer, Shift As Integer)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>Event KeyPress(KeyAscii As Integer)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>Event KeyUp(KeyCode As Integer, Shift As Integer)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>Event MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>Event Resize() <\/em><\/span><br \/><br \/>Voil\u00e0 pour leur d\u00e9claration. Maintenant il ne reste plus qu&rsquo;a d\u00e9finir le moment o\u00f9 ils seront appel\u00e9s. Par exemple, l&rsquo;\u00e9v\u00e9nement Click sera appel\u00e9 lorsque l&rsquo;utilisateur cliquera sur le contr\u00f4le ou sur le label. Nous allons donc introduire un petit code dans ces deux \u00e9v\u00e9nements d\u00e9j\u00e0 existant:<br \/><br \/><span style=\"color: #0000ff;\"><em>Private Sub UserControl_Click()<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0&lsquo;On appelle Click quand l&rsquo;utilisateur clique sur le contr\u00f4le<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0RaiseEvent Click<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>End Sub<\/em><\/span><br \/><br \/><span style=\"color: #0000ff;\"><em>Private Sub DText_Click()<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0&lsquo;On appelle Click quand l&rsquo;utilisateur clique sur le DText<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0RaiseEvent Click<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>End Sub <\/em><\/span><br \/><br \/>Nous allons faire de m\u00eame pour les autres \u00e9v\u00e9nements. DblClick suit exactement le m\u00eame mod\u00e8le que Click, et Resize aussi, mais les autres \u00e9v\u00e9nements demandent des arguments, qui sont tr\u00e8s facile \u00e0 r\u00e9cup\u00e9rer:<br \/><br \/><em><span style=\"color: #0000ff;\">Private Sub UserControl_DblClick()<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0&lsquo;On appelle DblClick quand l&rsquo;utilisateur double-clique sur le contr\u00f4le<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0RaiseEvent DblClick<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">End Sub<\/span><\/em><br \/><br \/><em><span style=\"color: #0000ff;\">Private Sub DText_DblClick()<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0&lsquo;On appelle DblClick quand l&rsquo;utilisateur double-clique sur le DText<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0RaiseEvent DblClick<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">End Sub<\/span><\/em><br \/><br \/><em><span style=\"color: #0000ff;\">Private Sub UserControl_KeyDown(KeyCode As Integer, Shift As Integer)<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0RaiseEvent KeyDown(KeyCode, Shift)<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">End Sub<\/span><\/em><br \/><br \/><em><span style=\"color: #0000ff;\">Private Sub UserControl_KeyPress(KeyAscii As Integer)<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0RaiseEvent KeyPress(KeyAscii)<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">End Sub<\/span><\/em><br \/><br \/><em><span style=\"color: #0000ff;\">Private Sub UserControl_KeyUp(KeyCode As Integer, Shift As Integer)<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0RaiseEvent KeyUp(KeyCode, Shift)<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">End Sub<\/span><\/em><br \/><br \/><em><span style=\"color: #0000ff;\">Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0RaiseEvent MouseDown(Button, Shift, X, Y)<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">End Sub<\/span><\/em><br \/><br \/><em><span style=\"color: #0000ff;\">Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0RaiseEvent MouseMove(Button, Shift, X, Y)<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">End Sub<\/span><\/em><br \/><br \/><em><span style=\"color: #0000ff;\">Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0RaiseEvent MouseUp(Button, Shift, X, Y)<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">End Sub <\/span><\/em><br \/><br \/>Vous pouvez remarquer que tous les arguments sont d\u00e9j\u00e0 donn\u00e9s par les \u00e9v\u00e9nement du contr\u00f4le. Il suffit donc de les transmettre \u00e0 l&rsquo;\u00e9v\u00e9nement que nous avons mis, ainsi MouseUp reprend la valeur Button, Shift, X et Y de UserControl_MouseUp. Nous n&rsquo;avons fait que transmettre les \u00e9v\u00e9nements d\u00e9j\u00e0 existant, mais nous allons maintenant en cr\u00e9er un nouveau, Sort, qui se d\u00e9clenchera lorsque le Dtext sortira du contr\u00f4le, il renverra un argument Cote qui indiquera de quel c\u00f4t\u00e9 du contr\u00f4le le Dtext est sorti. D\u00e9clarons le d&rsquo;abord, toujours tout en haut du code, juste en dessous des autres d\u00e9clarations:<br \/><br \/><span style=\"color: #0000ff;\"><em>Event Sort(Cote As String) &lsquo;L&rsquo;\u00e9v\u00e9nement Sort donne le c\u00f4t\u00e9 o\u00f9 est sorti le DText<\/em><\/span><br \/><br \/>Et maintenant nous allons ajouter la proc\u00e9dure d&rsquo;appel de l&rsquo;\u00e9v\u00e9nement dans le timer. Voici donc ce que devient le code du Dtimer, le code qui a \u00e9t\u00e9 ajout\u00e9 est sur un fond gris:<br \/><br \/><em><span style=\"color: #0000ff;\">Private Sub DTimer_Timer()<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0If Direction = \u00ab\u00a0right\u00a0\u00bb Then<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DText.Left = DText.Left + Speed<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0If DText.Left &gt; UserControl.Width Then<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DText.Left = -DText.Width<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0RaiseEvent Sort(\u00ab\u00a0right\u00a0\u00bb)<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0End If<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0ElseIf Direction = \u00ab\u00a0left\u00a0\u00bb Then<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DText.Left = DText.Left &#8211; Speed<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0If DText.Left + DText.Width &lt; 0 Then<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DText.Left = UserControl.Width<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0RaiseEvent Sort(\u00ab\u00a0left\u00a0\u00bb)<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0End If<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0ElseIf Direction = \u00ab\u00a0top\u00a0\u00bb Then<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DText.Top = DText.Top &#8211; Speed<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0If DText.Top + DText.Height &lt; 0 Then<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DText.Top = UserControl.Height<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0RaiseEvent Sort(\u00ab\u00a0top\u00a0\u00bb)<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0End If<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0ElseIf Direction = \u00ab\u00a0bottom\u00a0\u00bb Then<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DText.Top = DText.Top + Speed<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0If DText.Top &gt; UserControl.Height Then<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DText.Top = -DText.Height<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0RaiseEvent Sort(\u00ab\u00a0bottom\u00a0\u00bb)<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0End If<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0End If<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">End Sub <\/span><\/em><br \/><br \/>Voil\u00e0 les \u00e9v\u00e9nements sont en place, c&rsquo;est termin\u00e9. <\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-116abc44 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"116abc44\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-77c41e3c\" data-id=\"77c41e3c\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2cb7afa3 elementor-widget elementor-widget-heading\" data-id=\"2cb7afa3\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">7) Enregistrement en OCX et ajout dans un programme.<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1d35ab88 elementor-widget elementor-widget-text-editor\" data-id=\"1d35ab88\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Il ne reste plus qu&rsquo;a cr\u00e9er le fichier OCX. Pour cela, faites FICHIER, CREER DefileZone.ocx et enregistrez le en cliquant sur OK<br \/><br \/>A pr\u00e9sent, cr\u00e9ez un nouveau projet ou ouvrez en un et cliquez avec le bouton droit de la souris dans la fen\u00eatre des contr\u00f4les, puis sur Composants? et choisissez Parcourir, ouvrez DefileZone.ocx et faites OK. Voil\u00e0, il ne vous reste qu&rsquo;a utiliser le contr\u00f4le comme tous les autres. <\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>1) Cr\u00e9ation d&rsquo;un nouveau Projet ActiveX. Tout d&rsquo;abord, commencez par cr\u00e9er un nouveau projet en faisant FICHIER|NOUVEAU Projet|Contr\u00f4le ActiveX &amp; OK Vous vous trouvez \u00e0 pr\u00e9sent dans l&rsquo;espace de cr\u00e9ation de contr\u00f4le ActiveX, le projet, qui porte pour l&rsquo;instant le nom de projet1. Nous allons lui donner un nom qui permettra de l&rsquo;identifier lors de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"","ocean_second_sidebar":"","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"","ocean_custom_header_template":"","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"","ocean_menu_typo_font_family":"","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"","footnotes":""},"class_list":["post-257","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/wp-json\/wp\/v2\/pages\/257","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/wp-json\/wp\/v2\/comments?post=257"}],"version-history":[{"count":10,"href":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/wp-json\/wp\/v2\/pages\/257\/revisions"}],"predecessor-version":[{"id":366,"href":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/wp-json\/wp\/v2\/pages\/257\/revisions\/366"}],"wp:attachment":[{"href":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/wp-json\/wp\/v2\/media?parent=257"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}