DragMode activex

Résolu
m2rtech Messages postés 239 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 20 février 2012 - 15 nov. 2007 à 11:13
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 19 nov. 2007 à 02:21
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 nov. 2007 à 02:21
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
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 nov. 2007 à 11:42
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
0
m2rtech Messages postés 239 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 20 février 2012
15 nov. 2007 à 12:07
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.
0
m2rtech Messages postés 239 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 20 février 2012
15 nov. 2007 à 16:28
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 nov. 2007 à 19:15
doit venir de ton ScaleMode

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
m2rtech Messages postés 239 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 20 février 2012
16 nov. 2007 à 07:57
yop!

il est en twip ! j'ai essayé en pixel, marche pas !
0
m2rtech Messages postés 239 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 20 février 2012
16 nov. 2007 à 08:12
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.
0
m2rtech Messages postés 239 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 20 février 2012
16 nov. 2007 à 08:25
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 ?
0
m2rtech Messages postés 239 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 20 février 2012
16 nov. 2007 à 10:04
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.
0
Rejoignez-nous