begin process at 2008 07 06 02:47:06
1 205 441 membres
21 nouveaux aujourd'hui
14 119 membres club

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é: 2 830 / 714

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

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

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.
  • 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

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

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

Boutique

Boutique de goodies CodeS-SourceS