Gambas France BETA


Pas de compte ? Incription

Drop d'une image sur une gridview

1
AuteurMessages
spheris#1 Posté le 6/5/2010 à 09:17:00
bonjour,
voici mon petit soucis.
Je souhaite faire un drag and drop d'une image sur une gridview comme ceci :



Le soucis c'est qu'avec ce code ci :

1
' Gambas class filePUBLIC SUB _new()ENDPUBLIC SUB Form_Open()GridView1.Rows.Count = 10GridView1.Columns.Count = 10ENDPUBLIC SUB Button1_Click()ME.CloseENDPUBLIC SUB PictureBox1_MouseDrag()IF Mouse.Left THENDrag.Icon = LAST.PictureLAST.Drag(LAST.Picture.Image)ENDIFENDPUBLIC SUB GridView1_Drop()GridView1.Current.Picture = Drag.IconEND


mon Drag fonctionne mais pour le drop, mon image ne se place pas dans la case que je veux mais au debut du tableau.
Mon erreur se situe au Drop, mais je ne sais comment faire.
Merci de votre aide
;)
Prokopy#2 Posté le 26/7/2010 à 01:38:00
Kinder PinguiHello Spheris,

Le problème dans ton code c'est que tu utilises la propriété Current pour connaître la case qui a un "drop". Or un évènement Drop ne modifie pas cette propriété, donc elle reste à [0, 0], et ça foire. :lol:

Le truc c'est de récupérer les coordonnées de la souris, et de voir sur quelle case elle pointe. Pour ça, il y a deux méthodes à connaître : GridView1.RowAt et GridView1.ColumnAt. La première retourne la ligne pointée par la position Y d'un point que tu lui donnes (ici la souris), et la seconde fait pareil mais avec la colonne et avec la position X. ;)

Pour les coordonnées de la souris : pas de problème, on a Mouse.ScreenX et Mouse.ScreenY. Sauf que pour les deux méthodes, les coordonnées attendues sont relatives au GridView, et non absolues.
(Tu me diras peut-être : "Mouse.X et Mouse.Y renvoient la position de la souris relative à l'émetteur d'un évènement Mouse." Pas bête sauf que Drop n'est pas un évènement Mouse. :P )
Donc pour ça il faut calculer la position du curseur relative au GridView. Heureusement tous les contrôles ont sur eux un ScreenX et un ScreenY. :D

Donc, la position à envoyer à GridView1.RowAt est Mouse.ScreenY - GridView1.ScreenY, et celle à envoyer à GridView1.ColumnAt est Mouse.ScreenX - GridView1.ScreenX.

Ensuite, tu obtiens les coordonnées de ta cellule, et tu peux facilement modifier sa Picture.

Petit résumé condensé :

1
PUBLIC SUB GridView1_Drop()GridView1[GridView1.RowAt(Mouse.ScreenY - GridView1.ScreenY), GridView1.ColumnAt(Mouse.ScreenX - GridView1.ScreenX)].Picture = Drag.IconEnd


Voilà môssieu. En espérant que ça t'aide. :D
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
allegfede#3 Posté le 3/10/2013 à 13:20:58
Public Sub TableView_schedule_DragMove()
Dim Riga As Integer
Dim Colonna As Integer

Riga = TableView_schedule.RowAt(Drag.y)
Colonna = TableView_schedule.ColumnAt(Drag.x)

Debug riga & " - " & Colonna
End
1