Drag-Drop di un'immagine in una DrawingArea: differenze tra le versioni
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| Riga 66: | Riga 66: | ||
DrawingArea1.Drop = True | DrawingArea1.Drop = True | ||
PictureBox1.Image = Image.Load("<FONT Color= | PictureBox1.Image = Image.Load("<FONT Color=darkgreen>''/percorso/del/file/immagine''</font>") | ||
End | End | ||
| Riga 177: | Riga 177: | ||
===Drag&Drop da più ''DrawingArea'' ad una ''DrawingArea'' principale=== | ===Drag&Drop da più ''DrawingArea'' ad una ''DrawingArea'' principale=== | ||
Mostriamo un possibile codice per effettuare il Drag-Drop del disegno presente in varie ''DrawingArea'' in una ''DrawingArea'' principale. | Mostriamo un possibile codice per effettuare il Drag-Drop del disegno presente in varie ''DrawingArea'' in una ''DrawingArea'' principale. | ||
<BR>Poniamo il caso di avere una ''DrawingArea'' principale, nella quale saranno rilasciati i disegni presenti in altre quattro ''DrawingArea''. Assumiamo che le quattro ''DrawingArea'', dalle quali sarà trascinato il rispettivo disegno, appartengano ad un unico Gruppo degli Eventi (ad esempio " | <BR>Poniamo il caso di avere una ''DrawingArea'' principale, nella quale saranno rilasciati i disegni presenti in altre quattro ''DrawingArea''. Assumiamo che le quattro ''DrawingArea'', dalle quali sarà trascinato il rispettivo disegno, appartengano ad un unico Gruppo degli Eventi (ad esempio "AreaDisegno"). | ||
Public Struct IMMAGINI | Public Struct IMMAGINI | ||
drx As Short | drx As Short | ||
| Riga 195: | Riga 194: | ||
<FONT Color=gray>' ''Assegna ogni "DrawingArea" secondaria a un unico Gruppo degli Eventi (ad esempio "Dr"):''</font> | <FONT Color=gray>' ''Assegna ogni "DrawingArea" secondaria a un unico Gruppo degli Eventi (ad esempio "Dr"):''</font> | ||
Object.Attach(DrawingArea2, Me, " | Object.Attach(DrawingArea2, Me, "AreaDisegno") | ||
Object.Attach(DrawingArea3, Me, " | Object.Attach(DrawingArea3, Me, "AreaDisegno") | ||
Object.Attach(DrawingArea4, Me, " | Object.Attach(DrawingArea4, Me, "AreaDisegno") | ||
Object.Attach(DrawingArea5, Me, " | Object.Attach(DrawingArea5, Me, "AreaDisegno") | ||
<FONT Color=gray>' ''Assegna ogni "DrawingArea" esistente ad un elemento di un vettore di tipo "DrawingArea[]", al fine di collegare il suo Indice degli elementi a quello del vettore di tipo "Picture[]":''</font> | <FONT Color=gray>' ''Assegna ogni "DrawingArea" esistente ad un elemento di un vettore di tipo "DrawingArea[]", al fine di collegare il suo Indice degli elementi a quello del vettore di tipo "Picture[]":''</font> | ||
| Riga 209: | Riga 208: | ||
Public Sub | Public Sub AreaDisegno_Draw() | ||
<FONT Color=gray>' ''Assegna ad ogni "DrawingArea" esistente un'immagine, che potrà essere trasferita e rilasciata nella "DrawingArea" principale:''</font> | <FONT Color=gray>' ''Assegna ad ogni "DrawingArea" esistente un'immagine, che potrà essere trasferita e rilasciata nella "DrawingArea" principale:''</font> | ||
| Riga 231: | Riga 230: | ||
Public Sub | Public Sub AreaDisegno_MouseDrag() | ||
<FONT Color=gray>' ''Preleviamo e trasciniamo l'immagine da una "DrawingArea":''</font> | <FONT Color=gray>' ''Preleviamo e trasciniamo l'immagine da una "DrawingArea":''</font> | ||
Versione delle 07:20, 20 nov 2024
Drag&Drop da una PictureBox in una DrawingArea
Mostriamo un possibile codice per effettuare un semplice Drag-Drop di un'immagine da una PictureBox in una DrawingArea.
Private im As Image
Private x As Short
Private y As Short
Public Sub Form_Open()
' Attiva la capacità della "DrawingArea" di sollevare l'evento "_Drop():
DrawingArea1.Drop = True
PictureBox1.Image = Image.Load("/percorso/del/file/immagine")
End
Public Sub PictureBox1_MouseDrag()
' Preleva e trascina l'immagine dalla "PictureBox":
Drag.Icon = Last.Image.Picture
Last.Drag(Drag.Icon.Image)
End
Public Sub DrawingArea1_Drop()
im = Drag.Data
x = Drag.X
y = Drag.Y
DrawingArea1.Refresh
End
Public Sub DrawingArea1_Draw() ' Si disegna l'immagine nella "DrawingArea"
If Object.Address(im) == 0 Then Return
With Paint
.DrawImage(im, x, y, im.W, im.H)
.End
End With
End
Conservare le immagini precedentemente trascinate
Per conservare - durante un nuovo rilascio del testo nella DrawingArea - le immagini eventualmente già trascinate e rilasciate, bisognerà inserire i valori (ed in particolare: la Picture e le coordinate di rilascio) di ciascun trascinamento effettuato in una variabile di tipo Struttura, che a sua volta dovrà essere memorizzata all'interno di una variabile vettoriale del tipo della Struttura dichiarata nel programma.
Ogni qualvolta avviene il disegno all'interno della DrawingArea della nuova immagine trascinata e rilasciata, bisognerà mediante un apposito ciclo far ridisegnare dalla DrawingArea anche le altre immagini sino a quel momento trascinati e disegnati, sulla base dei valori memorizzati - per ciascuna immagine trascinata - in un'apposita variabile del tipo della Struttura dichiarata.
Mostriamo un semplice codice, nel quale poniamo il caso di avere più PictureBox, appartenenti al medesimo Gruppo di Eventi (ad esempio "Pic") ed aventi ciascuna una diversa immagine da trascinare e rilasciare nella DrawingArea.
Public Struct IMMAGINI
drx As Short
dry As Short
im As Image
End Struct
Private iimm As New IMMAGINI[]
Public Sub Form_Open()
' Attiviamo la capacità della "DrawingArea" di sollevare l'evento "_Drop():
DrawingArea1.Drop = True
PictureBox1.Image = Image.Load("/percorso/del/file/immagine")
End
Public Sub PictureBox1_MouseDrag()
' Preleviamo e trasciniamo l'immagine dalla "PictureBox":
Drag.Icon = Last.Image.Picture
Last.Drag(Drag.Icon.Image)
End
Public Sub DrawingArea1_Drop()
Dim im As IMMAGINI
' All'atto del rilascio del testo viene creata una variabile del tipo della "Struttura" dichiarata. Inoltre vengono assegnate ai corrispondenti membri della variabile "Struttura" l'immagine trascinata, nonché le coordinate X ed Y di rilascio dell'immagine medesima all'interno della "DrawingArea". I valori contenuti nei predetti membri della "Struttura", saranno utilizzati per disegnare l'immagine nella "DrawingArea".
With im = New IMMAGINI
.drx = Drag.X
.dry = Drag.Y
.im = Drag.Data
End With
iimm.Push(im)
DrawingArea1.Refresh
End
Public Sub DrawingArea1_Draw()
Dim n As Integer
' Ridisegna le immagini precedentemente rilasciate nella "DrawingArea":
For n = 0 To iimm.Max
Paint.DrawImage(iimm[n].im, iimm[n].drX, iimm[n].drY)
Next
End
Drag&Drop da una DrawingArea a un'altra
Mostriamo un possibile codice per effettuare il Drag-Drop del disegno da una DrawingArea a un'altra DrawingArea.
Private im As Image Private bo As Boolean Private x As Short Private y As Short Public Sub Form_Open() ' Attiva la capacità della "DrawingArea" di sollevare l'evento "_Drop(): DrawingArea1.Drop = True End Public Sub DrawingArea2_Draw() im = Picture["icon:/32/book"].Image ' Mostra l'immagine alle coordinate x=0, y=0: With Paint .DrawImage(im, 0, 0, im.W, im.H) .End End With End Public Sub DrawingArea2_MouseDrag() ' Trasforma l'Oggetto "Picture" in un Oggetto "Image": Drag.Icon = im.Picture ' Quindi lo preleva e lo trascina: Last.Drag(im) End Public Sub DrawingArea1_Drop() bo = True ' Assegna alle variabili "x" e "y" le rispettive coordinate, ove l'immagine è stata rilasciata sull'altra "DrawingArea": x = Drag.X y = Drag.Y DrawingArea1.Refresh End Public Sub DrawingArea1_Draw() ' Si disegna l'immagine nella "DrawingArea" If bo == False Then Return ' Mostra l'immagine alle coordinate "x" e "y", ossia ove la stessa è stata rilasciata: With Paint .DrawImage(im, x, y, im.W, im.H) .End End With End
Drag&Drop da più DrawingArea ad una DrawingArea principale
Mostriamo un possibile codice per effettuare il Drag-Drop del disegno presente in varie DrawingArea in una DrawingArea principale.
Poniamo il caso di avere una DrawingArea principale, nella quale saranno rilasciati i disegni presenti in altre quattro DrawingArea. Assumiamo che le quattro DrawingArea, dalle quali sarà trascinato il rispettivo disegno, appartengano ad un unico Gruppo degli Eventi (ad esempio "AreaDisegno").
Public Struct IMMAGINI
drx As Short
dry As Short
p As Picture
End Struct
Private iimm As New IMMAGINI[]
Private ddrr As New DrawingArea[4]
Private pc As New Picture[]
Public Sub Form_Open()
' Attiva la capacità della "DrawingArea" principale di sollevare l'evento "_Drop():
DrawingArea1.Drop = True
' Assegna ogni "DrawingArea" secondaria a un unico Gruppo degli Eventi (ad esempio "Dr"):
Object.Attach(DrawingArea2, Me, "AreaDisegno")
Object.Attach(DrawingArea3, Me, "AreaDisegno")
Object.Attach(DrawingArea4, Me, "AreaDisegno")
Object.Attach(DrawingArea5, Me, "AreaDisegno")
' Assegna ogni "DrawingArea" esistente ad un elemento di un vettore di tipo "DrawingArea[]", al fine di collegare il suo Indice degli elementi a quello del vettore di tipo "Picture[]":
ddrr[0] = DrawingArea2
ddrr[1] = DrawingArea3
ddrr[2] = DrawingArea4
ddrr[3] = DrawingArea5
End
Public Sub AreaDisegno_Draw()
' Assegna ad ogni "DrawingArea" esistente un'immagine, che potrà essere trasferita e rilasciata nella "DrawingArea" principale:
Select Case Last.Name
Case "DrawingArea2"
pc.Push(Picture["icon:/32/book"])
Case "DrawingArea3"
pc.Push(Picture["icon:/32/call"])
Case "DrawingArea4"
pc.Push(Picture["icon:/32/battery"])
Case "DrawingArea5"
pc.Push(Picture["icon:/32/audio"])
End Select
With Paint
.DrawPicture(pc[pc.Max], 1, 1, 32, 32)
.End
End With
End
Public Sub AreaDisegno_MouseDrag()
' Preleviamo e trasciniamo l'immagine da una "DrawingArea":
Drag.Icon = pc[ddrr.Find(Last)]
Last.Drag(pc[ddrr.Find(Last)].Image)
End
Public Sub DrawingArea1_Drop()
Dim im As IMMAGINI
With im = New IMMAGINI
.drx = Drag.X
.dry = Drag.Y
.p = Drag.Data.Picture
End With
iimm.Push(im)
DrawingArea1.Refresh
End
Public Sub DrawingArea1_Draw() ' Si disegna l'immagine nella "DrawingArea":
Dim n As Integer
' Ridisegna le immagini precedentemente rilasciate nella "DrawingArea":
For n = 0 To iimm.Max
Paint.DrawPicture(iimm[n].p, iimm[n].drX, iimm[n].drY)
Next
End