Tutoriel ocx basique

Soyez le premier à donner votre avis sur cette source.

Vue 9 020 fois - Téléchargée 1 311 fois

Description

Ce code assez simple (bien que faisant intervenir des API)
vous permettera je l'espère de mieux apréhender les UserControl

Il s'agit d'un simple 'label' qui possède les evenements Click, MouseOver et MouseOut...

Conclusion :


Il est très basique et n'a pour but unique que de comprendre le fonctionnement et le codage des UserControl.
J'invite ceux qui souhaitent découvrir les OCX a étoffer un peut ce contrôle (Couleur de fond, Image, Alignement...)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
35
Date d'inscription
mercredi 30 janvier 2008
Statut
Membre
Dernière intervention
25 juin 2015

bonsoir
je viens de trouver pourquoi ça ne fonctionnais pas dans case_mousemove je n'avais pas inscrit (index as integer... ne reprenant que la définition de mon usercontrol

enfin je n'ai pas fini car au début je faisait des dragdrop de mes cases, permettant de gérer facilement les cases autorisées à bouger , celles pouvant recevoir , sans vraiment déplacer les objets transférants seulement leur contenu mais ces glissement avec drgdrop sont très saccdé et ne donne pas une bonne viison de la chose , donc je voulais utilser la fonction mousemove, mais apperement ce n'est pas trop compatible avec DragMode automatic
je vais chercher
merci encore pour ton aide
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
Case est un mot reservé... voilà tout ^^

si je les renommme et fait un groupe de controles ca fonctionne nikel, bien que le code ne soit pas top.
en effet:
- Dim utilisé en lieu et place de Public, pour déclarer P1 et P2
- API inutile ici, X et Y te sont transmises par l'evenement lui même...

Private mnOrgX As Single
Private mnOrgY As Single

Private Sub CcCase_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
mnOrgX = X
mnOrgY = Y
End If
End Sub

Private Sub CcCase_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
CcCase(Index).Left = CcCase(Index).Left + X - mnOrgX
CcCase(Index).Top = CcCase(Index).Top + Y - mnOrgY
End If
End Sub
Messages postés
35
Date d'inscription
mercredi 30 janvier 2008
Statut
Membre
Dernière intervention
25 juin 2015

j'ai créé un userform avec un label "Lbllet"qui contien un tout petit label "Lblpt"
le code dans le userform
Public Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Public Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Private Sub LblLet_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
RaiseEvent MouseDown(Button, Shift, X, Y)
End Sub

Private Sub LblLet_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
RaiseEvent MouseMove(Button, Shift, X, Y)
End Sub

ce qui me permet de voir dans ma form lorsque je charge le userform appelé "case" la propriété MouseMove et MouseDown

mais dans la form lorsque j'écris le code
Private Type POINTAPI
X As Long
Y As Long
End Type

Dim P1 As POINTAPI
Dim P2 As POINTAPI

Private Sub Case_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
GetCursorPos P1
End Sub

Private Sub Case_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbLeftButton Then
GetCursorPos P2
Case.Left = Case.Left + (P2.X - P1.X) * Screen.TwipsPerPixelX
Case.Top = Case.Top + (P2.Y - P1.Y) * Screen.TwipsPerPixelY
GetCursorPos P1
End If
End Sub

ne fonctionne pas sur 225 "case" que j'ai chargé dynamiquement
le mousemove ne fonctionne que sur chaque "case" c'est à dire si je remplace dans le code cse par case1 et donc de faire une fonction par case

si je me fait comprendre
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
je n'ai pas compris ta question...

normallement, si tu definit un groupe de controles, les evenements changent tout seuls pour accueillir l'Index
Messages postés
35
Date d'inscription
mercredi 30 janvier 2008
Statut
Membre
Dernière intervention
25 juin 2015

Bonjour
je regardais cette source pour voir comment faire exactement un mousemove sur un usercontrol et je m'appercois que tu déclare une procédure UserControl_MouseMove... mais dans la form sur le controle "overlabel" il n'existe pas d'événement mousemove?????

j'avais donc fait un usercontrole et je lui ai affecté un événement mousemove en utilisant event mousemove..... et RaiseEvent Mousemove... là ça fonctionne mais ce que je n'arrive pas à faire c'est lorsque je crée des usercontrol indexé, mon événement n'est valable que pour usercontrol1_MouseMove... Comment faire pour avoir comme l'événement DragDrop valable pour le usercontrol en général

merci d'avance si vous me comprenez
Afficher les 17 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.