Newsgroup: it.comp.lang.visual-basic
Titolo: Intercettare fine Drag&Drop

Ciao,
conoscete un metodo per intercettare il rilascio del mouse durante un
Drag&Drop senza dover installare un Hook per intercettare gli eventi
del mouse?
Tnx!
Daniele.

Barzo@Google ha scritto:

Non puoi intercettare l'evento MouseDown e MouseUp dopo aver salvato in
una
variabile lo stato di Drag...?
Forse ho capito male, ma ad esempio per emulare il Drag&Drop senza
ricorrere al Subclassing ho salvato su MouseDown del controllo lo stato
di DRAG_START
e su MouseUp della destinazione se DRAG_START allora ....!
Forse però ho perso un pezzo...!
@Alex

 ha scritto nel messaggio

mmm...
DragConstants.vbCancel nell'evento di Drag?
Ciao 


Si, in effetti anche io faccio così...
Faccio un esempio stupido...Ho 2 TreeView e voglio draggare i nodi da
una all'altra..ora, inizio il drag su una (chiaramente il dragmode è
in manuale)....ma se l'utente rilascia il mouse su un qualsiasi altro
controllo? Dovrei gestire Il Mouse_* su ogni controllo!?! Sicuramente
mi sto perdendo io un pezzo!! :-)
Daniele.

Barzo@Google ha scritto:

Secondo me per semplificarti la cosa hai solo 2 modi:
1)Intercettare il DragEnd subclassando.....
2)Proprio come dici serve gestire l'Evento Mouse* su tutti i controlli.
A quel punto ti basta leggere la variabile Settata e la posizione del
Mouse oppure, visto che VB6 lo consente(Access nemmeno per idea)
leggere l'Handle della finestra sotto il Mouse e confrontarla con
quella del Tree, se diversa dal 2° TreeView resetti...!
In VB6 non sò se si può ma con Access per fare una cosa simile ciclo
la collection
controls Runtime su Load della Form e sbatto la chiamata ad una
Function Private nella form stessa su Evento del controllo ciclato...!
For each ctl in Me.Controls
    ctl.OnMouseMove="=NomeFunzione(" & chr(34) & ctl.Name & chr(34) &
")"
Next
In NomeFunzione faccio il resto...!
Non sò se può essere utile.
@Alex


L'evento DragDrop del controllo target non ti è sufficiente?
In pratica:
- Nell'evento MouseOver del controllo origine, se Button=vbLeftButton chiami il
metodo Drag vbBeginDrag
- Nell'evento DragDrop del target se Source=controllo origini, fai quel che devi
fare
Non serve gestire altri eventi su altri controlli, al limite nel DragOver su
quelli che non possono fungere da target per il drop puoi cambiare l'icona
(Source.DragIcon) in modo da farlo capire.
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.


Solitamente si! Ma forse in questo caso mi sono complicato un po' la
vita...
Il fatto è che sto memorizzando lo stato di drag (InDrag As Boolean) e
quindi mi serviva sapere quando il drag finiva (ovunque) per resettarne
lo stato...ma forse (anzi quasi sicuramente) è la 'solita variabile di
troppo'!!
Mo' provo diversamente!!!
Tnx a lot!
Daniele.

 Daniele.
Ciao



Mmmm...in effetti, pensandoci un po' meglio...non serve ad una 'cippa
di merlo' sapere lo stato del Drag! (O almeno per quello che devo
fare).
Il mio dubbio derivava principalmente dal fatto che dove non potevo
droppare impostavo il MuosePointer a vbNoDrop e quando terminava il
drag non sapevo dove ripristinare l'icona del mouse che rimaneva tale!
Cmq il fatto DragIcon voglia solo un file .ICO è abbastanza
frustrante! Mi sarebbe piaciuto fare un l'overlay con un divietino! ;-)
Daniele.


Mettendo tutto dentro un'imagelist, usando i metodi Overlay e ExtractIcon si
riesce:
    ImageList1.ListImages.Add , "Overlay", ImageList1.Overlay(Key1, Key2)
    TreeView1.DragIcon = ImageList1.ListImages("Overlay").ExtractIcon
Bye


     TreeView1.DragIcon = ImageList1.ListImages("Overlay").ExtractIcon
Ecco..e questa!?!?! :-)
Che bello non finire mai di imparare!!!
Grazie Raf!
Daniele.