m2rtech
Messages postés239Date d'inscriptionmercredi 9 octobre 2002StatutMembreDernière intervention20 février 2012
-
15 nov. 2007 à 11:13
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 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.
A voir également:
Différence entre controle de formulaire et activex
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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
m2rtech
Messages postés239Date d'inscriptionmercredi 9 octobre 2002StatutMembreDernière intervention20 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)
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
m2rtech
Messages postés239Date d'inscriptionmercredi 9 octobre 2002StatutMembreDernière intervention20 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 ?
m2rtech
Messages postés239Date d'inscriptionmercredi 9 octobre 2002StatutMembreDernière intervention20 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