Bonjour,
J'ai fait un petit code permettant de drag & dropper des éléments d'une listbox, au sein de cete même list box, de facon à les ordonner à la main.
Ca fonctionne très bien, le code est simple et repose sur 3 private Sub :
ListBox1_BeforDragOver
ListBox1_MouseMove
ListBox1_BeforeDropOrPaste
Le problème se pose lorsqu'un scroller apparait dans cette ListBox1 et que je ne peux pas voir A LA FOIS l'élément à déplacer ET l'endroit où le déplacer : p.ex, je mets le scroller tout en bas pour déplacer le dernier élément vers la première position.
En effet, je voudrais que lorsque le curseur de ma souris arrive en "haut" de la liste (qui n'est pas le véritable haut, puisque le scroller est tout en bas), le scroller se déplace vers le haut.. comme dans les vrais programmes, quoi.
Le problème vient de la procédure :
ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
Dim MyDataObject As DataObject
If Button = 1 Then
Set MyDataObject = New DataObject
Dim Effect As Integer
MyDataObject.SetText TarifList.Value
Effect = MyDataObject.StartDrag
End If
En effet, tant que je déplace ma souris dans la liste, sans cliquer sur un élément, la coordonnée Y de la souris évolue , mais lorsque je déplace un élément, au moment du clic, les coordonnées se figent.
Or jusqu'à présent, je me servais de ces coordonnées (Y en tous cas) pour les déplacements d'éléments et je pensais, pour faire défiler le scroller vers le haut, faire un truc du style :
if ListBox1.topindex>0 then
if Y=0 then ListBox1.topindex=ListBox1.topindex-1
end if
dans le ListBox1_MouseMove.
Mais comme je l'ai dit, le Y reste bloqué au moment du clic et n'évolue plus lors du "glissé" de l'élément.
Merci de votre aide.