Newsgroup: it.comp.lang.visual-basic
Titolo: Cambiare la DragIcon in base al contesto

Ciao,
esempio:
ho una TV e ci draggo qualcosa sopra:
Private Sub TV2_DragOver(Index As Integer, Source As Control, X As
Single, Y As Single, State As Integer)
  Dim DragOk As Boolean
  [Controllo Se la sorgente può essere draggata qui (DragOK=TRUE)
oppure no]
  If DragOK Then
    Set TV2.DropHighlight = TV2.HitTest(X, Y)
    TV2.DragIcon = ImageList1.ListImages(1).Picture
  Else
    Set TV2.DropHighlight = Nothing
    TV2.DragIcon = ImageList1.ListImages(2).Picture
  End If
End Sub
Il mio 'problema' è che, una volta impostata la DragIcon, questa non
cambia più!
Ho provato anche a mettere un TV2.DragIcon = LoadPicture() ma nada!
Ora la domanda è: come faccio a cambiare il DragIcon mentre sto ancora
trascinando!?! 
(E non ditemi che non si può!)
Tnx!
Daniele.

 ha scritto nel messaggio
news:1153121889.0...@35g2000cwc.googlegroups.com...


 
Dall'MSDN:
oggetto.DragIcon [= icona]
Icona :
Qualsiasi riferimento di codice che restituisce un'icona valida, quale
un riferimento a un'icona di un form (Form1.Icon), un riferimento alla
proprietà DragIcon di un altro controllo (Text1.DragIcon) _oppure_ la
funzione LoadPicture.
Ciao.
Daniele
-- 
*******************
Free As In Freedom
-= 
www.fsf.org
 =-

 ha scritto nel messaggio
news:pKRug.43901$_J1.5...@twister2.libero.it...


 trascinando!?! 
Vorrei anche aggiungere un'altra domanda....
ho letto in giro che l'icona di trascinamento appare sempre e comunque a
32x32 (cosa che ho riscontrato anche io) e che questo comportamento sia
una cosa 'voluta'....tutto ciò è vero?
Tnx!
Daniele.


 una cosa 'voluta'....tutto ciò è vero?
Ho cercato ovunque (non so se bene o male) ma non ho trovato nulla che
dissetasse la mia voglia di conoscienza!
Sapete aiutarmi?
Tnx.
Daniele.

Barzo@Google ha scritto:

Non sono certo ma forse questo può aiutarti:
http://www.mvps.org/emorcillo/en/code/vb6/listviewdragdropimage.shtml
@Alex


Grazie dell'esempio Alex (tra l'altro molto carino) ma il mio problema
è un altro e forse ho capito dove sbaglio!
Io vorrei cambiare il cursore in base a dove sto trascinando (in zone
dove non posso droppare vorrei un'icona diversa).
Ora, io pensavo che si potesse fare usando DragIcon, ma (da quel che ho
intuito) questa serve solo per l'icona di inizio Drag! Infatti se tento
di cambiarla mentre sto spostando l'oogetto, il puntatore rimane sempre
lo stesso!
A questo punto però mi tocca cambiare il puntatore del mouse
(Screen.MouseIcon) ma facendo questo mi si ripropone l'esigenza di
catturare la fine del Drag (vedi mio precedente post) per poterlo
ripristinare!!  :-(
Uff!
Daniele.

Barzo@Google ha scritto:

Si ricordo il post precedente...
Come vedi la chiamata a ImageList_DragMove nonprevede il passaggio
dell'Hwnd
dell'immagine, ma solo le coordinate X/Y, non ho provato però se
sfruttando
ImageList_BeginDrag si può aggirare...
Nel senso che in teoria è questo l'evento che assegna l'Icona a Drag,
e durante il
Move la dovrebbe mantenere...
Se tu provi a forzare il Begin e cambi l'immagine...?
m_lIL = SendMessage(hWndTreeView, TVM_CREATEDRAGIMAGE, 0, ByVal hItem)
' Start the image dragging
   ImageList_BeginDrag m_lIL, 0, x, y
E' solo una "supposta" quindi usare con cautela.
@Alex

 ripristinare!!  :-(
Devi usare l'evento DragOver dei controlli su cui vuoi cambiare icona al
puntatore.
Vediamo se questo esempio ti chiarisce le idee (imgNoDrop e imgOKDrop sono 2
controlli image nascosti):
Private Sub lstAccounts_DragOver(Source As Control, x As Single, Y As Single,
State As Integer)
    ' Su questo listbox NON posso "droppare"
    Select Case State
    Case vbEnter
        Source.DragIcon = imgNoDrop.Picture
    Case vbLeave
        Source.DragIcon = imgOKDrop.Picture
    End Select
End Sub
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.

 puntatore.
Infatti è questo che non capisco....io faccio così:
Private TV_DragOver(Source As Control, X As Single, Y As Single, State
As Integer)
  [.....]
  If DragOK Then
    Set TV.DropHighlight = TV.HitTest(X, Y)
    TV.DragIcon = LstImage("IMG_DROP_OK").Picture
  Else
    Set TV.DropHighlight = Nothing
    TV.DragIcon = LstImage("IMG_NO_DROP").Picture
  End If
End Sub
E non funge!!! L'immagine rimane sempre "IMG_NO_DROP"!

     TV.DragIcon = LstImage("IMG_DROP_OK").Picture
       ~~~~~~~~
Guarda che cosě cambi la dragicon dell'oggetto TARGET, mentre devi cambiare
quella del Source...
    Source.DragIcon = LstImage("IMG_DROP_OK").Picture
Comunque č un "classico" confondersi... ;-)


 End Sub
Inserendo due Debug.Print (Debug.Print "NO DRAG", TV.DragIcon) nelle
due parti dell'IF ottengo:
NO DRAG        48497847
NO DRAG        48497847
NO DRAG        48497847
DRAG OK        459661
DRAG OK        459661
DRAG OK        459661
NO DRAG        48497847
NO DRAG        48497847
NO DRAG        48497847
Quindi l'immagine sembra cambiare....ma il cursore rimane sempre
uguale!!
La cosa che non capisco è:
Quando Inizio il drag l'immagine è "IMG_DRAG_OK" la quale si sposta
subito su "IMG_NO_DROP" in quanto il nodo (è una TV) non può essere
droppato sulla TV di appartenenza. Da questo punto in poi il cursore
non cambia più...
Non riesco a capire dove sbaglio!!


Noooooo!!!!! Che vergogna!!!
Chiedo venia per avervi fatto perdere tempo!!!!
Approfitto però per chiedervi delucidazioni sulla seconda domanda:
E' possibile fare in modo che la DragIcon non venga visualizzata 32x32?
Grazie e scusate ancora per la gaffe!!
Daniele.

 Daniele.
