mcs2006
Messages postés58Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention 1 mai 2006
-
22 mars 2006 à 18:07
mcs2006
Messages postés58Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention 1 mai 2006
-
23 mars 2006 à 18:02
Bonjour,
Je code en VB6 et mon projet actuel est de réaliser une gestion graphique d'aménagement de bureaux dans le but de faire une gestion de parc informatique.
Actuellement, c'est tout à fait basique.
- une pièce représentée par un contrôle Shape
- un meuble (table, bureau, ...) représenté par un contrôle image
- un ordinateur représenté par un contrôle image
Meubles et ordinateurs sont en fait des groupes de contrôles (index 0 étant le modèle).
Dans le Form_dragdrop, je sais réaligner les meubles si l'un de leurs côtés débordent de la pièce et/ou chevauchent un meuble déjà posé si le pointeur souris se trouve à l'extérieur du meuble.
Mon problème est :
Quand le pointeur souris est sur un meuble déjà existant au moment du relâchement du bouton, je voudrais que les mêmes opérations que dans le form_dragdrop soient effectuées (réalignement dans la pièce et par rapport au meuble déjà posé...).
Je sais que dans ce cas le code doit se mettre dans meuble_dragdrop mais pour l'instant je ne peux qu'annuler l'opération de dragdrop. Si je mets le même code que le form_dragdrop ça ne donne pas le même résultat même quand je ne me sers pas des valeurs X et Y.
Quelqu'un pourrait-il me conseiller ? Voire me donner une autre piste que le dragdrop ?
J'ai cherché sur ce site et sur d'autres mais je n'ai rien trouvé de concluant. J'ai sans doute loupé un truc ? Mais lequel ?
mcs2006
Messages postés58Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention 1 mai 2006 23 mars 2006 à 18:02
Merci encore à pcpt qui a été le seul à daigner répondre à ma question et qui m'a donné quelques pistes pour la suite de mon projet.
Néanmoins (ça ne veut pas dire que je n'ai plus d'organe olfactif ;-)), j'ai finalement trouvé mon erreur tout seul.
Dim oldX as Single, OldY as Single
'on commence à déplacer le contrôle
Private Sub imgTest_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Index > 0 Then imgTest(Index).Visible = False
imgTest(Index).Drag
imgTest(Index).DragIcon = imgTest(0).Picture
oldX = X
oldY = Y
End Sub
Si on drop sur la form (pièce) :
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
If Source.Name = "imgTest" Then
If Source.Index > 0 Then 'si c'est un déplacement
Source.Move X - oldX, Y - oldY
'...
Else
'...
End If
Else
'...
End If
End Sub
Si on drop sur une instance du même contrôle :
Private Sub imgTest_DragDrop(Index As Integer, Source As Control, X As Single, Y As Single)
If Source.Name = "imgTest" Then
If Source.Index > 0 Then 'si c'est un déplacement
Source.Move imgTest(Index).Left + X - oldX, imgTest(Index).Top + Y - oldY
'...
Else
'...
End If
Else
'...
End If
Ce que je n'avais pas compris, c'étaient que les valeurs X et Y sont définies en fonction du contrôle sur lequel on fait le drop.
mcs2006
Messages postés58Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention 1 mai 2006 22 mars 2006 à 20:49
Merci pour ton tuto très intéressant mais rien de ce qu'il contient ne résout mon problème dans l'immédiat.
Tu me donnes quand même une idée avec l'utilisation des API quoique je pense que ce sera aussi compliqué que sans.
Je teste et je te dis le résultat.