1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| Option Explicit
Dim NewLeft, NewTop As Integer ' pour calculer les nouvelles coordonnées
Dim DemiH As Integer ' pour memoriser la demi hauteur(utile pour le calcul du basculement entre les 2 contenaires)
Dim IndexContenaire As Integer ' pour memoriser le PictContenaire actif
Dim IndexDrag As Integer ' pour memoriser le PictDrag actif
Dim PointBascule As Integer ' pour le passage d'un conteneur à l'autre
Dim LimiteGauche, LimiteDroite, LimiteHaut, LimiteBas As Integer 'limite des conteneurs
Dim MemoX, MemoY As Integer
Private Sub Form_Load()
'chargement de 3 petites images (adapter le chemin ou se trouvent ces images)
'elles doivent être plus petites que le plus petit des conteneurs
'PictDrag(0).Picture = LoadPicture("C:\PersoFrancis\MoyenPersonage2.bmp")
'PictDrag(1).Picture = LoadPicture("C:\PersoFrancis\PetitPersonage1.bmp")
'PictDrag(2).Picture = LoadPicture("C:\PersoFrancis\MoyenPersonage3.jpg")
PointBascule = PictContenaire(1).Top - (PictContenaire(0).Top + PictContenaire(0).Height)
PointBascule = Int(PointBascule / 2)
PointBascule = PointBascule + PictContenaire(0).Top + PictContenaire(0).Height
IndexDrag = -1
End Sub
Private Sub PictContenaire_Click(Index As Integer)
'pour etre sur que le dernier objet bougé soit visible
If IndexDrag <> -1 Then
PictDrag(IndexDrag).Visible = True: PictDragDrop.Visible = False
IndexDrag = -1
End If
End Sub
Private Sub PictDrag_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 And Shift = 0 Then
'pour etre sur que le dernier objet bougé soit visible
If IndexDrag <> -1 Then PictDrag(IndexDrag).Visible = True
'memorisation des divers elements utiles
IndexContenaire = PictDrag(Index).Container.Index
IndexDrag = Index
PictDragDrop.Picture = PictDrag(IndexDrag).Image 'charge l'image de l'objet a deplacer
DemiH = Int(PictDrag(Index).Height / 2)
LimiteGauche = PictContenaire(0).Left
LimiteDroite = (PictContenaire(IndexContenaire).Left + PictContenaire(IndexContenaire).Width)
LimiteDroite = (LimiteDroite - PictDrag(IndexDrag).Width) + ScaleX(X, 1, 3)
LimiteHaut = PictContenaire(0).Top
LimiteBas = (PictContenaire(1).Top + PictContenaire(1).Height) - PictDrag(IndexDrag).Height
NewLeft = PictContenaire(IndexContenaire).Left + PictDrag(IndexDrag).Left + 15
NewTop = PictContenaire(IndexContenaire).Top + PictDrag(IndexDrag).Top + 15
PictDragDrop.Move NewLeft, NewTop
PictDragDrop.ToolTipText = "un nouveau click pour me bouger"
PictDrag(IndexDrag).Visible = False
PictDragDrop.Visible = True
End If
End Sub
Private Sub PictDragDrop_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
ShapeSelect.FillColor = &HFF00&: PictDragDrop.ToolTipText = ""
MemoX = ScaleX(X, 1, 3): MemoY = ScaleY(Y, 1, 3)
End If
End Sub
Private Sub PictDragDrop_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) '
If Button = 1 Then
NewLeft = Int((PictDragDrop.Left + ScaleX(X, 1, 3)) - MemoX)
NewTop = Int((PictDragDrop.Top + ScaleY(Y, 1, 3)) - MemoY)
'l'un des contenaires pouvant etre de largeur differant
'ajustage de la limite droite
If NewTop > PointBascule Then 'a faire
LimiteDroite = (PictContenaire(1).Left + PictContenaire(1).Width) - PictDrag(IndexDrag).Width
Else
LimiteDroite = (PictContenaire(0).Left + PictContenaire(0).Width) - PictDrag(IndexDrag).Width
End If
'verification du non depacement des contenaires
If NewLeft < LimiteGauche Then NewLeft = LimiteGauche 'pour coté gauche
If NewLeft > LimiteDroite Then NewLeft = LimiteDroite 'pour coté gauche
If NewTop < LimiteHaut Then NewTop = LimiteHaut 'pour le haute
If NewTop > LimiteBas Then NewTop = LimiteBas 'pour le bas
PictDragDrop.Move NewLeft, NewTop
End If
End Sub
Private Sub PictDragDrop_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
NewLeft = PictDragDrop.Left - PictContenaire(IndexContenaire).Left - 15
If (PictDragDrop.Top + ScaleX(X, 1, 3)) + DemiH > PointBascule Then
IndexContenaire = 1
Set PictDrag(IndexDrag).Container = PictContenaire(IndexContenaire)
NewTop = PictDragDrop.Top - (PictContenaire(0).Top + PictContenaire(0).Height)
NewTop = NewTop - (PictContenaire(1).Top - (PictContenaire(0).Top + PictContenaire(0).Height)) - 15
Else
IndexContenaire = 0
Set PictDrag(IndexDrag).Container = PictContenaire(IndexContenaire)
NewTop = PictDragDrop.Top - PictContenaire(IndexContenaire).Top - 15
End If
'l'affichage du PictDrag doit etre completement dans le PictContenaire
'donc verification et modification eventuelle
If NewLeft < -1 Then NewLeft = -15
If NewLeft > PictContenaire(IndexContenaire).Width - PictDrag(IndexDrag).Width Then
NewLeft = PictContenaire(IndexContenaire).Width - PictDrag(IndexDrag).Width - 15
End If
If NewTop < -1 Then NewTop = -15
If NewTop = 0 Then NewTop = -15
If NewTop > PictContenaire(IndexContenaire).Height - PictDrag(IndexDrag).Height Then
NewTop = PictContenaire(IndexContenaire).Height - PictDrag(IndexDrag).Height - 15
End If
PictDrag(IndexDrag).Move NewLeft, NewTop
PictDragDrop.Visible = False
PictDrag(IndexDrag).Visible = True
ShapeSelect.FillColor = &HFF&
End If
End Sub |
Partager