Télécharger le zip
Oublie l'instruction End. (décharges plutot ton formulaire)pour la 'transparence' ajoute simplement une icone dans la propriété DragIcon de la list Source. pas besoin de pictureBox 'trompOeil' supplémentaire. (une icone avec le texte de l'element pourra par exemple être générée à la volée...Option ExplicitPrivate 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 WithEnd SubPrivate Sub lstSource_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) lstSource.Drag vbBeginDragEnd SubPrivate Sub lstCible_DragDrop(Source As Control, X As Single, Y As Single) lstCible.AddItem Source.Text Source.RemoveItem Source.ListIndexEnd SubPrivate 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 WithEnd SubPrivate Sub cmdTerminer_Click() Unload MeEnd Sub
Super Chaibat05, Renfield comme dab plug and play.Pour l'effet visuel celui de Chaibat05 est interessant.
Pour insertion de l'item a l'endroit ou on avait 'visé' :Private Const LB_ITEMFROMPOINT As Long = &H1A9Private 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 LongPublic Function GetListItemIndexFromPoint(ByRef Obj As ListBox, ByVal X As Single, ByVal Y As Single) As IntegerDim Coords As LongDim 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 IfEnd FunctionPrivate Sub lstCible_DragDrop(Source As Control, X As Single, Y As Single)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.ListIndexEnd Sub
Bonjour Renfield Bonjour AzimengoJ' étais très content de lire vos commentaires respectifsPour le dernier je vais tester le code en ce moment même.Peut être qu' il sera integré dans une prochaine mise à jourque je finirais probablement ce soir même.Elle comportera notament l' effet de transparence.Merci Azimengo pour l' appréciationMerci Renfield pour la Fonction.
Bonsoir RenfieldLa Fonction GetListItemIndexFromPoint()ne marche pas avec le UC.Merci tout de même.Elle servira certainement une autre fois.chaibat
01/10/2006 09:30Problème cité dans l' historique des mise à jour résolu.Bientot une autre mise à jour ... chaibat
salut,tu me demandes un commentaire, alors le voici ;)intéressant, code lisible, çà peut donc servir.par contre un ico lors du déplacement, le manque se fait ressentir.problème : lors du simple click sur lstSource (donc début de déplacement sans déposer), le déplacement a tout de même lieu. en fait tu ne vérifies pas la réception du usercontrol.et pour pouvoir réutiliser le tout, tout çà sous forme de classe withevents çà serait bien pratique.bon courage ++
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
Bonsoir RenfieldSi 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
jamais vu... ne signifie pas que c'est impossible ^^
Bonjour RENFIELDAlors, 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 aidePrivate 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 LongPrivate Const LB_ITEMFROMPOINT As Long = &H1A9Private 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 WithEnd SubPrivate Sub lstSource_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) lstSource.Drag vbBeginDragEnd SubPrivate Sub lstCible_DragDrop(Source As Control, X As Single, Y As Single) lstCible.AddItem Source.Text Source.RemoveItem Source.ListIndexEnd SubPrivate 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 WithEnd SubPrivate Sub cmdTerminer_Click() Unload MeEnd SubPublic Function GetListItemIndexFromPoint(ByRef Obj As ListBox, ByVal X As Single, ByVal Y As Single) As IntegerDim Coords As LongDim 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 IfEnd FunctionDim 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.ListIndexEnd Sub
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte
1 875 108 membres 18 nouveaux aujourd'hui 16 153 membres club