Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GLISSER/DEPOSER AVEC SIMULATION DU DÉPLACEMENT DU TEXTE D' ITEM, D' UNE LISTBOX VERS UNE AUTRE LISTBOX OU VERS UN MSFLEXGRID.


Information sur la source

Catégorie :Divers Classé sous : glisser, deposer Niveau : Débutant Date de création : 28/09/2006 Date de mise à jour : 01/10/2006 14:30:34 Vu / téléchargé: 3 327 / 767

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Inspirée de la source de PCPT :
("Les vacances de Mr Mulot",du 22/02/2006 16:30:02)
Cette source combine le DragDrop et le deplacement d' une PictureBox.
Mise à jour prévue : utilisation d' un user control pour la transparence.
...

 

Conclusion

@PCPT / Pour l' ico , aucune nouvelle mise à jour n' est prévu pour le moment
peut être plus tard.J' ai eu ma dose avec cette source !

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

01 octobre 2006 00:02:57 :
Mise à jour : Remplacement d' une PictureBox par un UC, afin d' avoir l' effet de transparence. Problème rencontré : Je n' arrive pas à avoir les positions X,Y du UC à cet instant pour tester si le drop s' éffectue à l' intérieur de lstCible .Left et .Top ne correspondent pas aux valeurs réelles. ^^ Demande Info .
01 octobre 2006 14:30:34 :
Comme annoncé plus haut, voici la nouvelle mise à jour pour corriger le problème du Drop... Mon erreur fût que je me préoccupais de la position du UC au moment du lacher et que je n' arrivais pas à determiner. Alors qu' il fallait tout simplement voir si au moment du Drop le pointer se trouve bien au dessus de lstCible.

Commentaires et avis

signaler à un administrateur
Commentaire de Renfield le 29/09/2006 09:34:19 administrateur CS

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 Explicit

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

signaler à un administrateur
Commentaire de asimengo le 29/09/2006 10:45:51

Super Chaibat05, Renfield comme dab plug and play.

Pour l'effet visuel celui de Chaibat05 est interessant.

signaler à un administrateur
Commentaire de Renfield le 29/09/2006 11:02:35 administrateur CS

Pour insertion de l'item a l'endroit ou on avait 'visé' :

Private Const LB_ITEMFROMPOINT As Long = &H1A9

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

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

Private 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.ListIndex
End Sub

signaler à un administrateur
Commentaire de chaibat05 le 29/09/2006 18:11:15

Bonjour Renfield
Bonjour Azimengo

J' étais très content de lire vos commentaires respectifs
Pour le dernier je vais tester le code en ce moment même.
Peut être qu' il sera integré dans une prochaine mise à jour
que je finirais probablement ce soir même.Elle comportera
notament l' effet de transparence.

Merci Azimengo pour l' appréciation
Merci Renfield pour la Fonction.

signaler à un administrateur
Commentaire de chaibat05 le 01/10/2006 00:09:33

Bonsoir Renfield
La Fonction GetListItemIndexFromPoint()
ne marche pas avec le UC.
Merci tout de même.
Elle servira certainement une autre fois.

chaibat

signaler à un administrateur
Commentaire de chaibat05 le 01/10/2006 10:43:01

01/10/2006 09:30

Problème cité dans l' historique des mise à jour résolu.
Bientot une autre mise à jour ...

chaibat

signaler à un administrateur
Commentaire de PCPT le 01/10/2006 13:29:44 administrateur CS

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 ++

signaler à un administrateur
Commentaire de Renfield le 02/10/2006 07:46:26 administrateur CS

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

signaler à un administrateur
Commentaire de chaibat05 le 02/10/2006 20:07:03

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

signaler à un administrateur
Commentaire de Renfield le 03/10/2006 07:28:00 administrateur CS

jamais vu... ne signifie pas que c'est impossible ^^

signaler à un administrateur
Commentaire de andrebernard le 05/09/2007 14:44:52

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

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

icone d'un glisser/Deposer [ par GLT ] Bonjour,voila mon problème, j'ai deux msflexGrig,et je veux faire glisser une cellule du tableau à l'autre. Le problème est que l'icone dragicon de vb Glisser Deposer pas très au point [ par Maiku ] LutJ'essaye de faire un glisser deposer d'un bouton de commande dans le contenu sur un label.Premiere Question : Est ce que ca peut marcher ?Deux Glisser deposer ... [ par yannn ] Salut a tous ... j'ai de nouveau besoin de vos lumieres ... Je voudrai savoir comment a partir d'un glissé déposé, je peux retrouver le chemin du fich glisser listbox->treeview [ par bingo974 ] Bonjour,Je n'arrive pas à trouver un code sur vbfrance me permettant de réaliser un dragdrop entre une listbox et un treeview en utilisant OLEDRAG OLE glisser-déplacer [ par CocoMsa ] Bonjour,quelqu'un (une) aurait-il la gentillesse de m'expliquer comment fonctionne le drag-drop ??Mon problème est très simple mais je ne sais pas com comment faire un glisser deplacer avec le webbrowser ? [ par LolPiratas ] Yo ManaM oYbon voila je veux faire de mon webbrowser un ftpdonc voila une fois que mon controle affiche mes fichiers qui ce trouve sur mon ftpje sais comment recuperer la variable inputbox pour la deposer dans une celule exel [ par polo45500 ] probleme drag & drop [ par templeofboom ] bonjour, g un pti soucis de glisser deposer dans mon appli... A savoir que je créé dynamiquement des TTabSheet a l'intérieur d'un TPage Deposer un fichier sur un serveur FTP [ par youplaboom69 ] Bonjour a tous et a toutes...Bon, je sais que le sujet a été abordé plusieurs fois deja, mais vraiment, je n'y comprend rien du tout!!C Glisser coller d'un listbox à un treeview? [ par Merry29 ] Bonjour,J'ai une liste dans une listbox et je souhaite pouvoir faire un copier-glisser-coller d'un élément de la liste pour le rajouter dans


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,515 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.