Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Cursore con immagine associata.
domenica 02 luglio 2006 - 13.10
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
D0X
Profilo
| Newbie
43
messaggi | Data Invio:
dom 2 lug 2006 - 13:10
Ciao a tutti!
Ero alle prese con il drag & drop di immagini da una picturebox ad un altro controllo in C#. Il drag&drop funziona correttamente ma, durante il movimento del mouse, volevo associare al cursore l'immagine che ho draggato. Stavo facendo delle prove dentro il corpo dell'evento DragOver ma non ho ancora trovato una soluzione.
Qualcuno ha un'idea di come si possa fare?
Io ho provato a disegnare un rectangle catturando la graphics dalla picturebox di origine ma parte non andare. Inoltre, ho provato a costruire esplicitamente un cursore così:
Bitmap b = new Bitmap(My_Image);
Cursor c = new Cursor(b.GetHicon());
Cursor.current = c;
Pare funzionare anche, cioè l'immagine è associata al cursore ma a causa del refresh dovuto allo spostamento del mouse, l'immagine sfarfalla ed è praticamente irriconoscibile... L'effetto che volevo ottenere era un po' lo stesso del ghost drag di una listview....
Grazie anticipatamente!
ciao!
Andy
Profilo
| Senior Member
487
messaggi | Data Invio:
mar 4 lug 2006 - 09:41
Ciao...se le 2 immagini sono all'interno dello stesso form puoi fare questo tentativo...all'inizio del drag setti il tuo cursore personalizzato a tutta la form in cui stai lavorando (Me.cursor = c)
All'evento del drop ripristini il tuo cursore base (Me.cursor = cursors.default)
non sono sicuro che funzioni, non lavoro attivamente con la grafica da tempo..ma tentare non nuoce (e soprattutto non ti porterà via troppo tempo ;P)
Ciao.
Andy
D0X
Profilo
| Newbie
43
messaggi | Data Invio:
mar 4 lug 2006 - 16:34
Ciao!
Grazie per la risposta :D. E' quello che, bene o male. stavo già provando io e questa soluzione non funziona in caso di Drag&Drop a causa del Refresh dovuto all'evendo di DragOver che viene generato più volte quando si passa sul controllo e fa sfarfallare l'immagine associata al nuovo cursore (flicking a manetta :D).
Ho risolto diversamente:
1. Quando viene lanciato un evento DragOver (passando il mouse sul controllo...) lancio una invalidate del controllo stesso.
2. Catturo l'evento paint che viene generato dall'invalidate e costruisco una nuova graphics per il controllo chiamandoci sopra una drawimage per immagine draggata. Alla drawImage passo le coordinate correnti del mouse così ogni volta che viene lanciato un DragOver avviene una repaint del controllo e l'immagine passata a drawimage si sposta insieme al mouse!!!!
Funziona bene!!! Si deve gestire anche l'evento DragLeave del controllo per evitare che, quando ci si sposta con il mouse su una zona per cui non è abilitato il Drag&Drop, l'immagine passata a drawimage rimanga comunque dentro al controllo...si risolve con un booleano settato per bene :D
TnX!
ciao!
banjio78
Profilo
| Newbie
10
messaggi | Data Invio:
mar 23 gen 2007 - 01:04
scusa potresti scrivere la soluzione??
ho il tuo stesso problema ma nn ho ben capito come lo risolvi....
grazie mille!!!
D0X
Profilo
| Newbie
43
messaggi | Data Invio:
mar 23 gen 2007 - 01:10
ciao!
Non so più che fine ha fatto quel codice preciso....provo a ricostruirlo quando ho un minuto di tempo e te lo posto il prima possibile se riesco...ok? Mi ricordo che funzionava bene anche se poi l'avevo abbandonato perchè mi collideva con altri problemi di gestione....però funzionava....
banjio78
Profilo
| Newbie
10
messaggi | Data Invio:
mar 23 gen 2007 - 11:53
mi faresti 1 grande piacere....ho l'esame tra 10 giorni!!!
D0X
Profilo
| Newbie
43
messaggi | Data Invio:
mar 23 gen 2007 - 12:25
274_ddimageundermouse.zip
Ciao!
Allora, scarica l'allegato.
Dovrebbe darti un'idea di come fare. Se vuoi trasportare da picturebox a picturebox c'è il problema che non si riesce a disegnare correttamente sul contesto grafico della picturebox quando ci si passa sopra con il mouse e rimane un problema di zorder. Quando l'ho dovuto fare io, ero impazzito con le picturebox perchè da questo punto di vista sono un controllo balengo e con molte anomalie (basti pensare che non espone direttamente da desiner la proprietà AllowDrop, ma non solo, fa anche schifo nella gestione delle trasparenze e altre cose...) e per questo mi ero reimplementato dei controlli ex-novo. Probabilmente, dovrai farlo anche tu se vuoi trascinare vicino al puntatore del mouse una tumbnail SOPRA + controlli in modo "continuato". Cmq dovrebbe esserti utile.
Ciao!
banjio78
Profilo
| Newbie
10
messaggi | Data Invio:
mar 23 gen 2007 - 12:55
io ho il problema di trascinare immagini da una listview a un pannello in cui dropparle. come te vorrei che il cursore durante il trascinamento prenda le sembianze dell'iimagine ke ho draggato...
D0X
Profilo
| Newbie
43
messaggi | Data Invio:
mar 23 gen 2007 - 13:01
e allora questo mio codice dovrebbe aiutarti...
banjio78
Profilo
| Newbie
10
messaggi | Data Invio:
mer 24 gen 2007 - 02:11
sono riuscito ad associare al puntatore l'iimagine draggata ma non capisco perchè la Paint venga fatta solo sulla form sottostante, cioè dietro i controlli(nel mio caso una listview e una picture box). ho visto ke questo accade anche nella tua applicazione....
scusa l'insistenza ma vedo ke hai un pò di esperienza mentre io sono nuovissimo al mondo delle interfaccie!!
grazie mille
ciao
D0X
Profilo
| Newbie
43
messaggi | Data Invio:
mer 24 gen 2007 - 15:32
ciao!
Questo è effettivamente un problema.
Il fatto sta che tu associ l'immagine al puntatore perchè non fai altro, come nella mia applicazione, che disegnare una immagine all'interno del contesto grafico della form, cioè nella paint del controllo.
Ora, l'idea dovrebbe essere quella di implementare nella paint anche degli altri controlli (listview e picturebox) questo disegno in relazione alla posizione corrente del mouse. Purtoppo sembra che nei controlli standard del framework ci sia un "problema", cioè sembra non essere possibile disegnarci direttamente sopra (dovrei fare delle prove ma sembra così).
Nel mio caso, avevo reimplementato un panel personalizzato overraidando la paint da zero. In questo modo potevo disegnare sul contesto grafico senza problemi. Inoltre, non dovevo passare da "un controllo ad un altro". Se ho capito bene tu vuoi draggare l'immagine da un controllo tipo listview, passare su una form (o panel) e terminare il drag su una picture box! Quindi, mentre ti muovi fra i fari controlli dovresti provare ad eseguire la stessa drawimage che fai sul form (come nel mio project) ma nella paint di questi controlli.
Come detto, credo non sia un problema semplice....ora, non so se ho tempo per fare delle prove in questo senso...se le faccio te lo dico :D
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !