Scrolling à la souris sur un panel

Sicyons Messages postés 25 Date d'inscription jeudi 21 octobre 2004 Statut Membre Dernière intervention 31 août 2006 - 19 juil. 2005 à 12:16
Sicyons Messages postés 25 Date d'inscription jeudi 21 octobre 2004 Statut Membre Dernière intervention 31 août 2006 - 19 juil. 2005 à 14:05
Salut à tous !



J'espère que mon problème n'a pas déjà été abordé et résolu dans les forums. Je n'ai rien trouvé à ce sujet.



(Je développe en Vb .NET.)



J'ai un contrôle Panel dans lequel j'ai inséré un contrôle PictureBox affichant une image plus large que le Panel. La fonction AutoScroll étant activée sur ce dernier, les barres de défilement apparraissent et permettent de faire scroller l'image dans le Panel. Jusqu'ici tout va bien :)



Mais mon objectif est de permettre aux utilisateurs de faire scroller l'image en faisant un cliqué-glissé sur celle-ci, dans le Panel. L'utilisation des évènements MouseDown / MouseUp / MouseMove sur le PictureBox, alliés à la propriété AutoScrollPosition du Panel m'a donné des comportements bizarres (le scrolling continue même si le mouvement de la souris s'arrête).



Comment faire ?

3 réponses

crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 29
19 juil. 2005 à 13:39
Pour gérer cela avec les evt MouseDown/MouseUp/MouseMove, il te faut :

1-Une variable de type booléenne accessible depuis tes trois EVT (a déclarer au niveau de la form par exemple ou Public dans un module)
2-Passer cette variable à True dans l'EVt MouseDown si le bouton utilisé correspond à ton bouton de fonction Pane
3-Passer cette variable à False dans l'EVT MouseUp
4-Faire le scroll de l'image dans l'EVT MouseMove SI ET SEULEMENT SI ta variable est à True.

Avec ces conseils, cela devrait le faire.


Christophe R.
0
Sicyons Messages postés 25 Date d'inscription jeudi 21 octobre 2004 Statut Membre Dernière intervention 31 août 2006
19 juil. 2005 à 13:59
C'est ce que j'ai fait :



Private Sub Dessin_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Dessin.MouseDown

Dessin.nPosSourisX = e.X + Panel.AutoScrollPosition.X

Dessin.nPosSourisY = e.Y + Panel.AutoScrollPosition.Y

bDeplacement = True

End Sub

Private Sub Dessin_MouseUp(ByVal sender As Object,
ByVal e As System.Windows.Forms.MouseEventArgs) Handles Dessin.MouseUp

bDeplacement = False

End Sub

Private Sub Dessin_MouseMove(ByVal sender As Object,
ByVal e As System.Windows.Forms.MouseEventArgs) Handles Dessin.MouseMove

Dim Delta As Point

If (bDeplacement = True And Dessin.nZoom > 1 And e.X <> 0) Then

Delta.X = e.X - Dessin.nPosSourisX

Delta.Y = e.Y - Dessin.nPosSourisY


Panel.AutoScrollPosition = New Point(Delta.X -
Panel.AutoScrollPosition.X, Delta.Y - Panel.AutoScrollPosition.Y)

Dessin.nPosSourisX += Delta.X

Dessin.nPosSourisY += Delta.Y

End If

End Sub



Mais une fois le mouvement enclenché, il va jusqu'au bout du scrolling même si on arrête de bougerla souris !
0
Sicyons Messages postés 25 Date d'inscription jeudi 21 octobre 2004 Statut Membre Dernière intervention 31 août 2006
19 juil. 2005 à 14:05
Désolé, le formattage de mon code a foiré :



Private Sub Dessin_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Dessin.MouseDown

Dessin.nPosSourisX = e.X + Panel.AutoScrollPosition.X

Dessin.nPosSourisY = e.Y + Panel.AutoScrollPosition.Y

bDeplacement = True

End Sub



Private Sub Dessin_MouseUp(ByVal sender As Object,
ByVal e As System.Windows.Forms.MouseEventArgs) Handles Dessin.MouseUp

bDeplacement = False

End Sub



Private Sub Dessin_MouseMove(ByVal sender As Object,
ByVal e As System.Windows.Forms.MouseEventArgs) Handles Dessin.MouseMove

Dim Delta As Point

If (bDeplacement = True And Dessin.nZoom > 1 And e.X <> 0) Then

Delta.X = e.X - Dessin.nPosSourisX

Delta.Y = e.Y - Dessin.nPosSourisY


Panel.AutoScrollPosition = New Point(Delta.X -
Panel.AutoScrollPosition.X, Delta.Y - Panel.AutoScrollPosition.Y)

Dessin.nPosSourisX += Delta.X

Dessin.nPosSourisY += Delta.Y

End If

End Sub
0