GLISSER/DEPOSER AVEC SIMULATION DU DÉPLACEMENT DU TEXTE D' ITEM, D' UNE LISTBOX

Signaler
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39729-glisser-deposer-avec-simulation-du-deplacement-du-texte-d-item-d-une-listbox-vers-une-autre-listbox-ou-vers-un-msflexgrid

Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Bonjour RENFIELD

Alors, j'ai fait tout comme "c'est qu't'a dit",

1/ j'ai rien compris a l'histoire de l'icone a la volée, aurais tu un exemple s'il te plait ?

2/ Pourquoi quand on selectionne une ligne dans le listview on voit tout le listview qui se deplace ?

Merci de ton aide

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

Private Sub Form_Load()
Dim i As Integer
' initialisation des controls
With lstSource
.AddItem "lstSource 1"
.AddItem "lstSource 2"
.AddItem "lstSource 3"
.AddItem "lstSource 4"
.AddItem "lstSource 5"
.AddItem "lstSource 6"
.AddItem "lstSource 7"
End With

With lstCible
.AddItem "lstCible 8"
.AddItem "lstCible 9"
.AddItem "lstCible 10"
End With
With grdCible
.TextMatrix(0, 0) = "grdCible"


For i = 1 To .Cols - 1
.ColWidth(i) = 1200
Next
End With
End Sub

Private Sub lstSource_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
lstSource.Drag vbBeginDrag
End Sub

Private Sub lstCible_DragDrop(Source As Control, X As Single, Y As Single)
lstCible.AddItem Source.Text
Source.RemoveItem Source.ListIndex
End Sub

Private Sub grdCible_DragDrop(Source As Control, X As Single, Y As Single)
With grdCible
.Row = .MouseRow
.Col = .MouseCol

If .Row >= .FixedRows And .Col >= .FixedCols Then
.Text = Source.Text
.CellBackColor = vbGreen

Source.RemoveItem Source.ListIndex
End If
End With
End Sub

Private Sub cmdTerminer_Click()
Unload Me
End Sub

Public Function GetListItemIndexFromPoint(ByRef Obj As ListBox, ByVal X As Single, ByVal Y As Single) As Integer
Dim Coords As Long
Dim OverIndex As Long

Coords = Obj.Parent.ScaleY(Y, Obj.Parent.ScaleMode, vbPixels) * &H10000 + Obj.Parent.ScaleX(X, Obj.Parent.ScaleMode, vbPixels)
OverIndex = SendMessage(Obj.hwnd, LB_ITEMFROMPOINT, 0&, ByVal Coords)

'# Si le HighWord = 0, un élément a été trouvé
If (OverIndex \ &H10000) = 0 Then
GetListItemIndexFromPoint = OverIndex Mod &H10000
Else
'# Aucun élément n'est survollé...
GetListItemIndexFromPoint = -1
End If
End Function

Dim nIndex As Long
nIndex = GetListItemIndexFromPoint(lstCible, X, Y)
If nIndex > -1 Then
lstCible.AddItem Source.Text, nIndex
Else
lstCible.AddItem Source.Text
End If
Source.RemoveItem Source.ListIndex
End Sub
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
jamais vu... ne signifie pas que c'est impossible ^^
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonsoir Renfield
Si je devais ajouter une icone je le ferais surle UC et pas
avec Drag Drop Standard.Avec ce dernier je n' aurais que
l' icone ou le contour et pas de texte.
Je n' ai jamais vu de texte se déplacer avec un Drag standard.
C' est justement pour ça que j' ai choisi de le personnaliser .


chaibat
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
GetListItemIndexFromPoint ne sert que pour les ListBoxes....
si tu veux dans un UserControl, ajoutes dans celui-ci une fonction HitTest
(comme on en trouve dans un Treeview ou listView)

Pour l'icone, comme te le suggère PCPT, il suffirait de créer une icone dynamiquement, avec le texte de l'element selectionné (ou d'utiliser une icone drag & drop standard, commune a tous les elements)
et de la placer dans la propriété DragIcon de ton controle source
Afficher les 11 commentaires