TUTORIEL OCX BASIQUE

Signaler
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
-
Messages postés
35
Date d'inscription
mercredi 30 janvier 2008
Statut
Membre
Dernière intervention
25 juin 2015
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32545-tutoriel-ocx-basique

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
70
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
70
je n'ai pas compris ta question...

normallement, si tu definit un groupe de controles, les evenements changent tout seuls pour accueillir l'Index
Afficher les 17 commentaires