DragMode activex [Résolu]

Signaler
Messages postés
239
Date d'inscription
mercredi 9 octobre 2002
Statut
Membre
Dernière intervention
20 février 2012
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Bonjour,

j'ai créee un activex, et je souhaite que ce dernier supporte le dragmode (c'est lui qui doit bouger):
or une fois inséré dans le projet test, il ne réagit pas à :

CtlImageFond1(Index).Drag vbBeginDrag

Dans le projet du controle j'ai ajouté un événement :
Public Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

et une procédure :
Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    RaiseEvent MouseDown(Button, Shift, X, Y)
End Sub

mais sans résultat :

Merci d'avance de votre aide.

9 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
ah, ok, ton usercontrol_mousedown ne reagissait pas parceque ton label squatte toute la place sur le usercontrol...

je prefere tout dessiner, me pose moins de soucis de ce genre :p

pour ta demande concernant le glisser deposer, faut voir, pas sur de saisir ce que tu demandes.
ressembe a ce que fait crystal report, qui permet de 'fusionner' des labels en faisant un drag a drop.

faisable, en VB, si c'est ca que tu cherches

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
tu déclenches des evenements, rien de plus, rien ne dit de déplacer le controle.

la méthode Drag invoquée plus haut ne déplace pas non plus le controle, c'est un début de Drag & Drop, en l'occurrence, opération qui sert a initier des déplacements virtuels...

utilises ce genre de choses :


Private mnOrgX As Single
Private mnOrgY As Single

Private Sub UserControl_MouseDown(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 UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
With UserControl.Extender
.Move .Left + X - mnOrgX, .Top + Y - mnOrgY
End With
End If
End Sub
Messages postés
239
Date d'inscription
mercredi 9 octobre 2002
Statut
Membre
Dernière intervention
20 février 2012

j'ai inserer un simple label à la place de mon controle,  la procédure lblheure_imperative_MouseDown
est exécuté (j'ai mis un point d'arret)

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

lblheure_imperative(Index).Drag vbBeginDrag

End Sub

si je met mon controle la meme procédure n'est pas exécuté !
il donc un blème.
Messages postés
239
Date d'inscription
mercredi 9 octobre 2002
Statut
Membre
Dernière intervention
20 février 2012

Javais en effectivement mis le code dans le usercontrol

voici le code dans son intégralité : le but de ce controle est de réaliser une espèce de Label avec incrustation d'une image de fond.
Le tout serait décoré de 2 ombres portées.

'CtrlImageFond

Dim valImageFond
Private mnOrgX As Single
Private mnOrgY As Single
Public Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Public Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Private Sub UserControl_Resize()
   
    Shape1.Left = 10
    Shape1.Top = 4
    Shape1.Width = UserControl.Width - 60
    Shape1.Height = UserControl.Height - 60
   
    Image1.Left = Shape1.Left
    Image1.Top = Shape1.Top + 15
    Image1.Width = Shape1.Width - 20
    Image1.Height = Shape1.Height - 20

    Line1.X1 = 100
    Line1.X2 = UserControl.Width - 35
    Line1.Y1 = UserControl.Height - 45
    Line1.Y2 = UserControl.Height - 45
   
    Line2.X1 = UserControl.Width - 55
    Line2.X2 = UserControl.Width - 55
    Line2.Y1 = 100
    Line2.Y2 = UserControl.Height - 40
   
    Label1.Left = 50
    Label1.Top = 35
    Label1.Width = UserControl.Width - 70
    Label1.Height = UserControl.Height - 50
End Sub

Private Sub UserControl_Show()
    Image1 = LoadPicture(ImageFond)
End Sub

 Public Property Let Caption(ByVal Newcaption As String)
    Label1.Caption = Newcaption
    PropertyChanged "Caption"
End Property

Public Property Let ImageFond(ValeurImageFond As String) 'valeurNOMPROP
    valImageFond = ValeurImageFond
    PropertyChanged "ImageFond"
End Property

Public Property Get Caption() As String
     Caption = Label1.Caption
End Property

Public Property Get ImageFond() As String  'NOMPROP
    ImageFond = valImageFond 'declarer  dans la section declaration
End Property

Private Sub UserControl_MouseDown(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 UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = vbLeftButton Then
        With UserContro
l.Extender
            .Move .Left + X - mnOrgX, .Top + Y - mnOrgY
        End With
    End If
End Sub
Public Sub UserControl_WriteProperties(PropBag As PropertyBag)
    Call PropBag.WriteProperty("ImageFond", valImageFond, "")
    PropBag.WriteProperty "Caption", Caption, Extender.Name

End Sub
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
    valImageFond = PropBag.ReadProperty("ImageFond", "")
    Caption = PropBag.ReadProperty("Caption", Extender.Name)
End Sub
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
doit venir de ton ScaleMode

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
239
Date d'inscription
mercredi 9 octobre 2002
Statut
Membre
Dernière intervention
20 février 2012

yop!

il est en twip ! j'ai essayé en pixel, marche pas !
Messages postés
239
Date d'inscription
mercredi 9 octobre 2002
Statut
Membre
Dernière intervention
20 février 2012

Je viens de remarquer plus grave, il ne réagit meme pas à un simple DblClick

'code dans le user controle
Public Event DblClick

'code dans la feuille hote

Private sub Userctl_DblClick() 'il n'entre pas dans la procédure.

autre élément de réflexion :
 la feuille hote en question EST ELLE MEME un controle activex de ma création.
il sagit d'un planning.
Messages postés
239
Date d'inscription
mercredi 9 octobre 2002
Statut
Membre
Dernière intervention
20 février 2012

C'est bon j'ai trouvé mon problème! (reste à trouver la solution.)
mon activex est composé de plusieurs couches
<li>la fenetre usercontrol</li><li>un control Image</li><li>un control Shape</li><li>un control Label</li>une fois compilé on peux penser que le tout ne forme plus qu'un seul control
j'ai l'impression que NON ! (du moins dans ce que je constate)
si je clic au centre pour déplacer mon control rien ne se passe
car maintenant je le sais: la procédure MouseDown n'est meme pas lue
Si je clic à l'extrème bordure de mon control, IL BOUGE

Alors question quand meme;  pourquoi le control compilé et inséré dans les projets, sa surface
n'est pas considérée comme un seule surface adressable par les événéments ?
Messages postés
239
Date d'inscription
mercredi 9 octobre 2002
Statut
Membre
Dernière intervention
20 février 2012

Solution trouvée !

il  faut ajouter ceci dans le label1

Private Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    RaiseEvent MouseDown(1, 0, X, Y)
End Sub

Merci pour ton aide Renfield, je continue à améliorer mon OCX
car ton code ou l'ocx est déplacé graphiquement en temps réel est du toner !!!!
mon seul soucis est que pour le moment il reste incompatible avec le drop (lacher) sur le control destination

Si tu as piste je suis preneur.