OVH Cloud OVH Cloud

DragAndDrop, ou est l'erreur ???

5 réponses
Avatar
LE TROLL
Drag and Drop, glissement et échange simultané entre 2 picturesBoxs...

Bonjour,

Grâce à ma question en "majuscules", j'ai quand même eu une réponse,
merci :o) Un exemple VB que je n'avais pas vu, en fait ça marche, ça glisse,
mais ça ne marche pas complètement, je n'ai pas d'échange d'image, je
m'explique d'abord, et ensuite voici mon code (doit y avoir un erreur de
code ou d'évènement?):

J'ai 5 picturesBoxs(i) (0 à 4) à DragMode = 1 (automatic) +
AutoSize=True...
Dans ces 5 PicturesBoxs, j'ai 5 image chargés en dur dans les propriétés
(répertoire courant de l'exe).
Je voudrais classer ses images contenues dans les picturesBoxs, dans
l'ordre "que je veux", mais je voudrais un échange simultané (c'est là où ça
ne marche pas), par exemple:
La 0 glisse sur la 3, donc la 3 va à la place de la 0, soit:
0 1 2 3 4
3 1 2 0 4

Voici le code, merci si vous voyez où est l'erreur:

Dim i As Long
'
Sub Form_Load()
For i = 0 To 4
Picture1(i).DragMode = 1 ' automatic
Picture1(i).AutoSize = True
Next i
End Sub

Sub Picture1_DragOver(Index As Integer, Source As Control, X As Single, Y As
Single, State As Integer)
i = Index
End Sub

Sub Picture1_DragDrop(Index As Integer, Source As Control, X As Single, Y As
Single)
' index de dépôt (cible)
If TypeOf Source Is PictureBox Then
Picture1(Index).Picture = Source.Picture
Picture1(i) = Picture1(Index) ' <<<--- PAS D'ECHANGE ???
End If
End Sub
--
ng75 arobase noos.fr
------------------------------------------------------------
LE TROLL, éleveur de trolls depuis César, qui disait :
Avec une hache, celui qui tient le manche a toujours raison !

5 réponses

Avatar
Quasimodo
LE TROLL has brought this to us :
Drag and Drop, glissement et échange simultané entre 2 picturesBoxs...

Bonjour,

Grâce à ma question en "majuscules", j'ai quand même eu une réponse,
merci :o) Un exemple VB que je n'avais pas vu, en fait ça marche, ça glisse,
mais ça ne marche pas complètement, je n'ai pas d'échange d'image, je
m'explique d'abord, et ensuite voici mon code (doit y avoir un erreur de code
ou d'évènement?):

J'ai 5 picturesBoxs(i) (0 à 4) à DragMode = 1 (automatic) +
AutoSize=True...
Dans ces 5 PicturesBoxs, j'ai 5 image chargés en dur dans les propriétés
(répertoire courant de l'exe).
Je voudrais classer ses images contenues dans les picturesBoxs, dans
l'ordre "que je veux", mais je voudrais un échange simultané (c'est là où ça
ne marche pas), par exemple:
La 0 glisse sur la 3, donc la 3 va à la place de la 0, soit:
0 1 2 3 4
3 1 2 0 4

Voici le code, merci si vous voyez où est l'erreur:

Dim i As Long
'
Sub Form_Load()
For i = 0 To 4
Picture1(i).DragMode = 1 ' automatic
Picture1(i).AutoSize = True
Next i
End Sub

Sub Picture1_DragOver(Index As Integer, Source As Control, X As Single, Y As
Single, State As Integer)
i = Index
End Sub

Sub Picture1_DragDrop(Index As Integer, Source As Control, X As Single, Y As
Single)
' index de dépôt (cible)
If TypeOf Source Is PictureBox Then
Picture1(Index).Picture = Source.Picture
Picture1(i) = Picture1(Index) ' <<<--- PAS D'ECHANGE ???
End If
End Sub



soir,
vous devez peut être faire un loadpicture au lieux d'une simple
affectation ?

@+Quaz

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com
Avatar
LE TROLL
Ah, j'ai essayé le LoadPicture (Load), dans le style (app.path & "" &
pictureX(OldIndex)), mais ça renvoie le numéro du nouvel index de
l'évènement DragDrop, un truc infernal du genre - 1325467...

En fait, Over donne bien l'I de la source (que je stoque dans "i"), et
Drag donne bien l'index de la cible (Index), quant au nom de la "Source",
ben c'est un truc du genre "-132546"...
Mais ça ne marche pas, car (il me semble), au moment du Drop sur la cible,
l'Over redonne le nouveau n° (i) à l'ancienne valeur (contenue dans i), et
donc ça coince, je me demande si j'ai pris le bon évènement, je n'ai jamais
touché à ça moi, lol ???
-----------

"Quasimodo" a écrit dans le message de news:

LE TROLL has brought this to us :
Drag and Drop, glissement et échange simultané entre 2 picturesBoxs...

Bonjour,

Grâce à ma question en "majuscules", j'ai quand même eu une réponse,
merci :o) Un exemple VB que je n'avais pas vu, en fait ça marche, ça
glisse, mais ça ne marche pas complètement, je n'ai pas d'échange
d'image, je m'explique d'abord, et ensuite voici mon code (doit y avoir
un erreur de code ou d'évènement?):

J'ai 5 picturesBoxs(i) (0 à 4) à DragMode = 1 (automatic) +
AutoSize=True...
Dans ces 5 PicturesBoxs, j'ai 5 image chargés en dur dans les
propriétés (répertoire courant de l'exe).
Je voudrais classer ses images contenues dans les picturesBoxs, dans
l'ordre "que je veux", mais je voudrais un échange simultané (c'est là où
ça ne marche pas), par exemple:
La 0 glisse sur la 3, donc la 3 va à la place de la 0, soit:
0 1 2 3 4
3 1 2 0 4

Voici le code, merci si vous voyez où est l'erreur:

Dim i As Long
'
Sub Form_Load()
For i = 0 To 4
Picture1(i).DragMode = 1 ' automatic
Picture1(i).AutoSize = True
Next i
End Sub

Sub Picture1_DragOver(Index As Integer, Source As Control, X As Single, Y
As Single, State As Integer)
i = Index
End Sub

Sub Picture1_DragDrop(Index As Integer, Source As Control, X As Single, Y
As Single)
' index de dépôt (cible)
If TypeOf Source Is PictureBox Then
Picture1(Index).Picture = Source.Picture
Picture1(i) = Picture1(Index) ' <<<--- PAS D'ECHANGE ???
End If
End Sub



soir,
vous devez peut être faire un loadpicture au lieux d'une simple
affectation ?

@+Quaz

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com



Avatar
Eric
Bonjour LE TROLL,

Suis pas un grand spécialiste du Drag&Drop, mais une idée ...

Soit une form avec 6 (oui tu lis bien six) PictureBoxes
Les 5 premieres affichent les icones des P, K, T, C et Atout
La 6ème est masquée pour stocker l'image de la picturebox qui va recevoir
celle déplacée.
Une variable iDepart définie à -1 dans la sub Form_Load()
Cette variable permet d'éviter que le déplacement de la 3, 4 ou 5eme image
vers la 1ere en passant sur les intermédiaires ne te réinitialise la valeur
de l'index, idem si le déplacement se fait vers la droite.(Ce qui était ton
prob)

Ci-dessous, les PictureBoxes sont nommées : Depart
Les images sont définies en dur dans les PictureBoxes(Fenêtre des
propriétés), DragMode et AutoSize aussi.


Partie Général - Déclarations:
Dim iDepart As Integer

et le code dans les procédures suivantes:

Private Sub Form_Load()
iDepart = -1 ' initialisation
End Sub

Private Sub Depart_DragOver(Index As Integer, Source As Control, X As
Single, Y As Single, State As Integer)
If State = vbLeave And iDepart = -1 Then
iDepart = Index
End If
End Sub

Private Sub Depart_DragDrop(Index As Integer, Source As Control, X As
Single, Y As Single)
' on stocke l'image qui va être écrasée
Depart(5).Picture = Depart(Index).Picture
' on affecte l'image déplacée
Depart(Index).Picture = Source.Picture
' on met l'image stockée dans la picturebox initiale(de départ)
Depart(iDepart).Picture = Depart(5).Picture
' réinitialisation
iDepart = -1
End Sub

Suis pas sur d'avoir été très clair ..., mais ca devrait te mettre sur la
voie

A+
Eric



"LE TROLL" <le écrivait
news::

Ah, j'ai essayé le LoadPicture (Load), dans le style (app.path &
"" &
pictureX(OldIndex)), mais ça renvoie le numéro du nouvel index de
l'évènement DragDrop, un truc infernal du genre - 1325467...

En fait, Over donne bien l'I de la source (que je stoque dans
"i"), et
Drag donne bien l'index de la cible (Index), quant au nom de la
"Source", ben c'est un truc du genre "-132546"...
Mais ça ne marche pas, car (il me semble), au moment du Drop sur la
cible, l'Over redonne le nouveau n° (i) à l'ancienne valeur (contenue
dans i), et donc ça coince, je me demande si j'ai pris le bon
évènement, je n'ai jamais touché à ça moi, lol ???
-----------

"Quasimodo" a écrit dans le message de news:

LE TROLL has brought this to us :
Drag and Drop, glissement et échange simultané entre 2
picturesBoxs...

Bonjour,

Grâce à ma question en "majuscules", j'ai quand même eu une
réponse,
merci :o) Un exemple VB que je n'avais pas vu, en fait ça marche, ça
glisse, mais ça ne marche pas complètement, je n'ai pas d'échange
d'image, je m'explique d'abord, et ensuite voici mon code (doit y
avoir un erreur de code ou d'évènement?):

J'ai 5 picturesBoxs(i) (0 à 4) à DragMode = 1 (automatic) +
AutoSize=True...
Dans ces 5 PicturesBoxs, j'ai 5 image chargés en dur dans les
propriétés (répertoire courant de l'exe).
Je voudrais classer ses images contenues dans les picturesBoxs,
dans
l'ordre "que je veux", mais je voudrais un échange simultané (c'est
là où ça ne marche pas), par exemple:
La 0 glisse sur la 3, donc la 3 va à la place de la 0, soit:
0 1 2 3 4
3 1 2 0 4

Voici le code, merci si vous voyez où est l'erreur:

Dim i As Long
'
Sub Form_Load()
For i = 0 To 4
Picture1(i).DragMode = 1 ' automatic
Picture1(i).AutoSize = True
Next i
End Sub

Sub Picture1_DragOver(Index As Integer, Source As Control, X As
Single, Y As Single, State As Integer)
i = Index
End Sub

Sub Picture1_DragDrop(Index As Integer, Source As Control, X As
Single, Y As Single)
' index de dépôt (cible)
If TypeOf Source Is PictureBox Then
Picture1(Index).Picture = Source.Picture
Picture1(i) = Picture1(Index) ' <<<--- PAS D'ECHANGE ???
End If
End Sub



soir,
vous devez peut être faire un loadpicture au lieux d'une simple
affectation ?

@+Quaz

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com








Avatar
LE TROLL
Bonsoir, merci;

Oui j'ai pensé au principe du transfert d'image par l'intermédiaire
d'une picture en plus, mais sinon, j'ai donné un exemple vers la droite,
mais en fait, ça marche aussi vers la gauche, je ne voulais pas faire une
exégèse...

Je vais étudier ta proposition... Cependant, je pense que je dois mal
utiliser les propriété et évènement (faute de savoir), car normalement c'est
un cas de figure assez classique ce que je fais...
En réalité, c'est au moment ou il est possible encore de séparer les
couleurs et que 2 couleurs identiques sont mitoyennes, ça permet au joueur
de choisir sa palette de couleurs...
-------

"Eric" a écrit dans le message de news:

Bonjour LE TROLL,

Suis pas un grand spécialiste du Drag&Drop, mais une idée ...

Soit une form avec 6 (oui tu lis bien six) PictureBoxes
Les 5 premieres affichent les icones des P, K, T, C et Atout
La 6ème est masquée pour stocker l'image de la picturebox qui va recevoir
celle déplacée.
Une variable iDepart définie à -1 dans la sub Form_Load()
Cette variable permet d'éviter que le déplacement de la 3, 4 ou 5eme image
vers la 1ere en passant sur les intermédiaires ne te réinitialise la
valeur
de l'index, idem si le déplacement se fait vers la droite.(Ce qui était
ton
prob)

Ci-dessous, les PictureBoxes sont nommées : Depart
Les images sont définies en dur dans les PictureBoxes(Fenêtre des
propriétés), DragMode et AutoSize aussi.


Partie Général - Déclarations:
Dim iDepart As Integer

et le code dans les procédures suivantes:

Private Sub Form_Load()
iDepart = -1 ' initialisation
End Sub

Private Sub Depart_DragOver(Index As Integer, Source As Control, X As
Single, Y As Single, State As Integer)
If State = vbLeave And iDepart = -1 Then
iDepart = Index
End If
End Sub

Private Sub Depart_DragDrop(Index As Integer, Source As Control, X As
Single, Y As Single)
' on stocke l'image qui va être écrasée
Depart(5).Picture = Depart(Index).Picture
' on affecte l'image déplacée
Depart(Index).Picture = Source.Picture
' on met l'image stockée dans la picturebox initiale(de départ)
Depart(iDepart).Picture = Depart(5).Picture
' réinitialisation
iDepart = -1
End Sub

Suis pas sur d'avoir été très clair ..., mais ca devrait te mettre sur la
voie

A+
Eric



"LE TROLL" <le écrivait
news::

Ah, j'ai essayé le LoadPicture (Load), dans le style (app.path &
"" &
pictureX(OldIndex)), mais ça renvoie le numéro du nouvel index de
l'évènement DragDrop, un truc infernal du genre - 1325467...

En fait, Over donne bien l'I de la source (que je stoque dans
"i"), et
Drag donne bien l'index de la cible (Index), quant au nom de la
"Source", ben c'est un truc du genre "-132546"...
Mais ça ne marche pas, car (il me semble), au moment du Drop sur la
cible, l'Over redonne le nouveau n° (i) à l'ancienne valeur (contenue
dans i), et donc ça coince, je me demande si j'ai pris le bon
évènement, je n'ai jamais touché à ça moi, lol ???
-----------

"Quasimodo" a écrit dans le message de news:

LE TROLL has brought this to us :
Drag and Drop, glissement et échange simultané entre 2
picturesBoxs...

Bonjour,

Grâce à ma question en "majuscules", j'ai quand même eu une
réponse,
merci :o) Un exemple VB que je n'avais pas vu, en fait ça marche, ça
glisse, mais ça ne marche pas complètement, je n'ai pas d'échange
d'image, je m'explique d'abord, et ensuite voici mon code (doit y
avoir un erreur de code ou d'évènement?):

J'ai 5 picturesBoxs(i) (0 à 4) à DragMode = 1 (automatic) +
AutoSize=True...
Dans ces 5 PicturesBoxs, j'ai 5 image chargés en dur dans les
propriétés (répertoire courant de l'exe).
Je voudrais classer ses images contenues dans les picturesBoxs,
dans
l'ordre "que je veux", mais je voudrais un échange simultané (c'est
là où ça ne marche pas), par exemple:
La 0 glisse sur la 3, donc la 3 va à la place de la 0, soit:
0 1 2 3 4
3 1 2 0 4

Voici le code, merci si vous voyez où est l'erreur:

Dim i As Long
'
Sub Form_Load()
For i = 0 To 4
Picture1(i).DragMode = 1 ' automatic
Picture1(i).AutoSize = True
Next i
End Sub

Sub Picture1_DragOver(Index As Integer, Source As Control, X As
Single, Y As Single, State As Integer)
i = Index
End Sub

Sub Picture1_DragDrop(Index As Integer, Source As Control, X As
Single, Y As Single)
' index de dépôt (cible)
If TypeOf Source Is PictureBox Then
Picture1(Index).Picture = Source.Picture
Picture1(i) = Picture1(Index) ' <<<--- PAS D'ECHANGE ???
End If
End Sub



soir,
vous devez peut être faire un loadpicture au lieux d'une simple
affectation ?

@+Quaz

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com











Avatar
Eric
re,


"LE TROLL" <le écrivait
mais sinon, j'ai donné un exemple vers la
droite, mais en fait, ça marche aussi vers la gauche, je ne voulais
pas faire une exégèse...



Me suis mal exprimé. Quand je t'ai dit "ce qui était ton problème", je
voulais dire que dès lors que tu as une procédure évènementielle sur le
DragOver (ici iDepart =Index) tu récupères aussi les Index des
PicturesBoxes que tu survoles (par exemple en allant de la 1 vers la 4 en
survolant la 2 et la 3, la derniere valeur de iDepart est 4 car tu passes
aussi sur la 4), ce qui faisait que ta permutation finale dans le DragDrop
ne marchait pas.
*
Picture1(i) = Picture1(Index) ' <<<--- PAS D'ECHANGE ???
*

Ton i a été réinitialisé dans le DragOver

Ok ?


J'ait fait la procédure sur 5 Pictures contenant des Drapeaux et je les
permute sans problème avec le code que je t'ai donné. Les PicturesBoxes
sont en ligne (avec survol des autres). En général, le cas classique
consiste à déplacer la picture d'un élément vers un autre mais sans
survoler les autres, ce qui n'est pas ton cas.

A+
Eric