cs_ShayW
Messages postés3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 2019
-
23 sept. 2011 à 10:39
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018
-
25 sept. 2011 à 07:31
Bonjour
Essayant d'appliquer la methode dragover pour
faire deplacer un picturebox sur la form
voila un code que j'ai ecrit
Private lastmouselocation As New Point
Private WithEvents box As New PictureBox
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim pt(3) As Point
pt(0) = New Point(0, 0)
pt(1) = New Point(side / 2, side / 2)
pt(2) = New Point(0, side)
pt(3) = New Point(0, 0)
Dim region(pt.Length - 1) As Byte
For x = 0 To pt.Length - 1
region(x) = CType(PathPointType.Line, Byte)
Next
Dim path As New GraphicsPath(pt, region)
Me.Controls.Add(box)
box.Region = New Region(path)
box.Location = New Point(20, 20)
box.BackColor = Color.Blue
box.Visible = True
box.AllowDrop = True
End Sub
Private Sub box_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles box.DragOver
Dim deltax, deltay As Integer
If e.X - lastmouselocation.X > 0 Then
deltax = 1
ElseIf e.X - lastmouselocation.X < 0 Then
deltax = -1
Else
deltax = 0
End If
If e.Y - lastmouselocation.Y > 0 Then
deltay = 1
ElseIf e.Y - lastmouselocation.Y < 0 Then
deltay = -1
Else
deltay = 0
End If
DirectCast(sender, PictureBox).Location = New Point(DirectCast(sender, PictureBox).Location.X + deltax, DirectCast(sender, PictureBox).Location.Y + deltay)
End Sub
Private Sub box_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles box.MouseDown
DirectCast(sender, PictureBox).DoDragDrop(DirectCast(sender, PictureBox), DragDropEffects.Move)
lastmouselocation = DirectCast(sender, PictureBox).PointToScreen(e.Location)
End Sub
le problème ce n'est pas commode si on bouge
trop vite la souris elle sort en dehors du triangle et donc toujours y remettre le curseur
Private Type TMousePos
X As Single
Y As Single
End Type
Private m_tCurPos As TMousePos
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
m_tCurPos.X = X
m_tCurPos.Y = Y
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim tNew As TMousePos
If Button = vbLeftButton Then
With tNew
.X = (X + Picture1.Left) - m_tCurPos.X
.Y = (Y + Picture1.Top) - m_tCurPos.Y
Call Picture1.Move(.X, .Y)
End With
End If
End Sub
et l'ai adapté en vb.net
à quoi sert le dragover si on obtient le meme
résultat avec mousemove ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 25 sept. 2011 à 07:31
A pouvoir passer d'un container à l'autre
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 23 sept. 2011 à 17:05
Bonjour,ShayW
Je ne vais pas te répondre par du code (je ne suis pas VB.Nettiste), mais par la description d'un mécanisme que j'ai utilisé à l'époque (il y a longtemps) sous VB6 pour ce type de picturebox. C'était pire avec les miennes car elles étaient en plus "transparentes" en tout ou parties (composées de périmètres de différentes formes à l'intérieur desquels c'était transparent, et chaque picturebox n'était réellement cliquable que sur les parties non transparentes).
J'avais mis au dessus de chacune d'elles un label normal (rectangulaire) complètement transparent et recouvrant la totalité de la picturebox. Et c'est ce label que j'accrochais et déplaçait au Mouse_move (pas par un dragover), en imposant à la picturebox de suivre le même déplacement que celui du label.
Toutes les autres démarches que j'avais tentées (accrocher pour la déplacer la picturebox) aboutissaient à des résultats en effet assez désastreux et quelquefois de surcroît très lents.
Voilà, si cela peut t'aider à rechercher un mécanisme plus fluide.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 23 sept. 2011 à 17:19
Je viens de retrouver ma démo dans mes tiroirs.
Elle est- bien évidemment en VB6
Si tu le souhaites, je peux te mettre ici les parties qui t'intéressent, à savoir tout ce qui touche au déplacement de ces pictureboxes "spéciales", après les avoir créées. (donc pas leur création à proprement parler)
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient