Tutoriel - drag & drop entre listboxes

Soyez le premier à donner votre avis sur cette source.

Vue 9 201 fois - Téléchargée 1 590 fois

Description

Ceci est un tout petit code qui sert à montrer l'utilisation du Drag & Drop entre deux listboxes.

Source / Exemple :


Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const LB_ITEMFROMPOINT = &H1A9

Private nDraggedItemIndex As Integer

Private Sub Form_Load()
Dim a As Integer
    For a = 0 To 10
        Liste(0).AddItem "Item " & Chr$(65 + a) & "-0"
        Liste(1).AddItem "Item " & Chr$(65 + a) & "-1"
    Next a
    nDraggedItemIndex = -1
End Sub

Private Sub Liste_DragDrop(Index As Integer, Source As Control, X As Single, Y As Single)
    If nDraggedItemIndex <> -1 Then
        Liste(Index).AddItem Source.List(nDraggedItemIndex), Liste(Index).ListIndex + 1
        Source.RemoveItem nDraggedItemIndex
        nDraggedItemIndex = -1
        Source.DragMode = vbManual
    End If
End Sub

Private Sub Liste_DragOver(Index As Integer, Source As Control, X As Single, Y As Single, State As Integer)
Dim Coords As Long
Dim OverIndex As Long

    Coords = Me.ScaleY(Y, vbTwips, vbPixels) * &H10000 + Me.ScaleX(X, vbTwips, vbPixels)
    OverIndex = SendMessage(Liste(Index).hwnd, LB_ITEMFROMPOINT, 0&, ByVal Coords)

    If Liste(Index).ListCount > 0 Then
        Liste(Index).ListIndex = OverIndex Mod &H10000
    End If
    
    If nDraggedItemIndex = -1 Then
        nDraggedItemIndex = Source.ListIndex
    End If
End Sub

Private Sub Liste_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Liste(Index).ListIndex <> -1 And Button = vbLeftButton Then
        Liste(Index).DragMode = vbAutomatic
        Liste(Index).Drag
    End If
End Sub

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
58 -
le codage est ce qu'il est, j'ai changé un peu depuis.

ici, l'item se dépose juste après l'item survollé. On ne peux le faire qu'avec le SendMessage LB_ITEMFROMPOINT.
violent_ken
Messages postés
1822
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
-
Ola ola !
Pourquoi tant de code ? Il n'y a qu'à utiliser Data.GetData(1) :
les list1.list(de 0 à list1.listindex) sont séparés par .
Il n'y a plus qu'à ensuite créer une boucle pour extraire chaque partie de la chaîne complète du type fichier1fichier2fichier3
Beaucoup plus simple, à mon avis...
@+
Saros
Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010
-
Salut ;
Houla tout petit le code ! :)
Joli le '0 ^ Index' bien que '1- Index' soit plus lisible et convienne à plus de cas...
A mon avis ce code irait mieux au niveau 2, à cause de l'utilisation de l'API SendMessage qui peut poser quelques problèmes de compréhension...
Sinon ça fonctionne parfaitement, très bien commentée, 9/10
Juste un point : quand on met un code brut, il vaut mieux mettre les manipulations nécessaires avant de copier-coller le code (ici, créer un form vide et créer un tableau de deux listes 'Liste(0)' et 'Liste(1)' pour ceux qui liront ce message), ce serait bien...
A+
Saros

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.