Drag-Drop di un'immagine in una DrawingArea: differenze tra le versioni

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
Nessun oggetto della modifica
 
(28 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
=Drag&Drop di un'immagine all'interno della medesima ''DrawingArea''=
In questo caso lo spostamento con il mouse mediante le risorse del ''Drag&Drop'' di un'immagine, presente in una ''DrawingArea'', avviene all'interno della medesima ''DrawingArea'':
Private DrawingArea1 As DrawingArea
Private im As Image
Private bo As Boolean
Private x As Short
Private y As Short
Public Sub Form_Open()
  With Me
    .Move(0, 0, Screen.AvailableWidth, Screen.AvailableHeight)
    .Arrangement = Arrange.Fill
  End With
  With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
<FONT Color=gray>' ''Attiva la capacità della "DrawingArea" di sollevare l'evento "_Drop():''</font>
    .Drop = True
  End With
End
Public Sub DrawingArea1_Draw()
<FONT Color=gray>' ''Quando viene spostata l'immagine con il mouse all'interno della "DrawingArea", essa viene cancellata dalle coordinate ove era stata impostata all'inizio o rilasciata dopo il precedente spostamento::''</font>
  If bo Then
    Paint.FillRect(x, y, im.W, im.H, Color.Background)
  Else
<FONT Color=gray>' ''Carica l'immagine nella variabile "im" di tipo "Image":''</font>
    im = Picture["icon:/32/book"].Image
<FONT Color=gray>' ''Mostra l'immagine alle coordinate x, y:''</font>
    Paint.DrawImage(im, x, y, im.W, im.H)
  Endif
 
End
Public Sub DrawingArea1_MouseDrag()
  bo = True
<FONT Color=gray>' ''Iniziato lo spostamento dell'immagine, va a ridisegnare la "DrawingArea", per cancellare l'immagine impostata inizialmente o rilasciata dopo il precedente spostamento::''</font>
  DrawingArea1.Refresh
  Drag.Icon = im.Picture
<FONT Color=gray>' ''Preleva e trascina l'Oggetto Image, ossia l'immagine presente sulla "DrawingArea":''</font>
  Last.Drag(im)
End
Public Sub DrawingArea1_Drop()
<FONT Color=gray>' ''Assegna alle variabili "x" e "y" le rispettive coordinate, ove l'immagine è stata rilasciata sull'altra "DrawingArea":''</font>
  x = Drag.X
  y = Drag.Y
  bo = False
  DrawingArea1.Refresh
End
=Drag&Drop di un'immagine da un Oggetto grafico in una ''DrawingArea''=
==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''.
Mostriamo un possibile codice per effettuare un semplice Drag-Drop di un'immagine da una ''PictureBox'' in una ''DrawingArea''.
  Private pc As Picture
  Private DrawingArea1 As DrawingArea
Private im As Image
  Private x As Short
  Private x As Short
  Private y As Short
  Private y As Short
   
   
   
   
  '''Public''' Sub Form_Open()
  Public Sub Form_Open()
    
  With Me
    .Move(0, 0, Screen.AvailableWidth, Screen.AvailableHeight)
    .Arrangement = Arrange.Fill
  End With
   With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
  <FONT Color=gray>' ''Attiva la capacità della "DrawingArea" di sollevare l'evento "_Drop():''</font>
  <FONT Color=gray>' ''Attiva la capacità della "DrawingArea" di sollevare l'evento "_Drop():''</font>
   DrawingArea1.Drop = True
    .Drop = True
  End With
  PictureBox1.Image = Image.Load("<FONT Color=darkgreen>''/percorso/del/file/immagine''</font>")
End
Public Sub PictureBox1_MouseDrag()
<FONT Color=gray>' ''Preleva e trascina l'immagine dalla "PictureBox":''</font>
  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()  <FONT Color=gray>' ''Si disegna l'immagine nella "DrawingArea"''</font>
    
    
   PictureBox1.Picture = Picture.Load("<FONT Color=gray>''/percorso/del/file/immagine''</font>")
   If Object.Address(im) == 0 Then Return
    
    
  '''End'''
  Paint.DrawImage(im, x, y, im.W, im.H)
   
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''.
Private DrawingArea1 As DrawingArea
Public Struct IMMAGINI
  drx As Short
  dry As Short
  im As Image
End Struct
Private iimm As New IMMAGINI[]
Public Sub Form_Open()
  With Me
    .Move(0, 0, Screen.AvailableWidth, Screen.AvailableHeight)
    .Arrangement = Arrange.Fill
  End With
  With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
<FONT Color=gray>' ''Attiviamo la capacità della "DrawingArea" di sollevare l'evento "_Drop():''</font>
    .Drop = True
  End With
   
   
  PictureBox1.Image = Image.Load("<FONT Color=darkgreen>''/percorso/del/file/immagine''</font>")
   
   
  '''Public''' Sub PictureBox1_MouseDrag()
  End
Public Sub PictureBox1_MouseDrag()
    
    
  <FONT Color=gray>' ''Preleviamo e trasciniamo l'immagine dalla "PictureBox":''</font>
  <FONT Color=gray>' ''Preleviamo e trasciniamo l'immagine dalla "PictureBox":''</font>
   Drag.Icon = Last.Picture  
   Drag.Icon = Last.Image.Picture
   Last.Drag(Last.Picture.Image)   
   Last.Drag(Drag.Icon.Image)   
 
End
Public Sub DrawingArea1_Drop()
 
  Dim im As IMMAGINI
 
<FONT Color=gray>' ''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".''</font>
  With im = New IMMAGINI
    .drx = Drag.X
    .dry = Drag.Y
    .im = Drag.Data
  End With
 
  iimm.Push(im)
 
  DrawingArea1.Refresh
    
    
  '''End'''
  End
Public Sub DrawingArea1_Draw()
  Dim n As Integer
<FONT Color=gray>' ''Ridisegna le immagini precedentemente rilasciate nella "DrawingArea":''</font>
  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 DrawingArea1_Drop()
  Public Sub Form_Open()
<FONT Color=gray>' ''Attiva la capacità della "DrawingArea1" di sollevare l'evento "_Drop():''</font>
  DrawingArea1.Drop = True
End
Public Sub DrawingArea2_Draw()
    
    
   pc = Drag.Data.Picture
   im = Picture["icon:/32/book"].Image
<FONT Color=gray>' ''Mostra l'immagine alle coordinate x=0, y=0:''</font>
  Paint.DrawImage(im, 0, 0, im.W, im.H)
End
Public Sub DrawingArea2_MouseDrag()
<FONT Color=gray>' ''Trasforma l'Oggetto "Picture" in un Oggetto "Image":''</font>
  Drag.Icon = im.Picture
<FONT Color=gray>' ''Quindi lo preleva e lo trascina:''</font>
  Last.Drag(im)
End
Public Sub DrawingArea1_Drop()
  bo = True
<FONT Color=gray>' ''Assegna alle variabili "x" e "y" le rispettive coordinate, ove l'immagine è stata rilasciata sull'altra "DrawingArea":''</font>
   x = Drag.X
   x = Drag.X
   y = Drag.Y
   y = Drag.Y
Riga 32: Riga 237:
   DrawingArea1.Refresh
   DrawingArea1.Refresh
    
    
  '''End'''
  End
   
   
   
   
  '''Public''' Sub DrawingArea1_Draw()  <FONT Color=gray>' ''Si disegna l'immagine nella "DrawingArea"''</font>
  Public Sub DrawingArea1_Draw()  <FONT Color=gray>' ''Si disegna l'immagine nella "DrawingArea1"''</font>
 
   If Object.Address(pc) == 0 Then Return
   If bo == False Then Return
 
   With Paint
<FONT Color=gray>' ''Mostra l'immagine alle coordinate "x" e "y", ossia ove la stessa è stata rilasciata:''</font>
    .DrawPicture(pc, x, y, pc.W, pc.H)
   Paint.DrawImage(im, x, y, im.W, im.H)
    .End
  End With
  End
 
  '''End'''


====Conservare le immaginni precedentemente trascinate====
===Drag&Drop da più ''DrawingArea'' a una ''DrawingArea'' principale===
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.
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''.
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.
<BR>Assumiamo che le quattro ''DrawingArea'', dalle quali sarà trascinato il rispettivo disegno, appartengano ad un unico Gruppo degli Eventi (ad esempio "AreaDisegno").
 
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
  Public Struct IMMAGINI
   drx As Short
   drx As Short
   dry As Short
   dry As Short
   pc As Picture
   p As Picture
  End Struct
  End Struct
  Private iimm As New IMMAGINI[]
  Private iimm As New IMMAGINI[]
Private ddrr As New DrawingArea[4]
Private pc As New Picture[]
   
   
   
   
  '''Public''' Sub Form_Open()
  Public Sub Form_Open()
 
  <FONT Color=gray>' ''Attiviamo la capacità della "DrawingArea" di sollevare l'evento "_Drop():''</font>
  <FONT Color=gray>' ''Attiva la capacità della "DrawingArea" principale di sollevare l'evento "_Drop():''</font>
   DrawingArea1.Drop = True
   DrawingArea1.Drop = True
<FONT Color=gray>' ''Assegna ogni "DrawingArea" secondaria a un unico Gruppo degli Eventi (ad esempio "Dr"):''</font>
  Object.Attach(DrawingArea2, Me, "AreaDisegno")
  Object.Attach(DrawingArea3, Me, "AreaDisegno")
  Object.Attach(DrawingArea4, Me, "AreaDisegno")
  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>
  ddrr[0] = DrawingArea2
  ddrr[1] = DrawingArea3
  ddrr[2] = DrawingArea4
  ddrr[3] = DrawingArea5
End
Public Sub AreaDisegno_Draw()
    
    
  '''End'''
  <FONT Color=gray>' ''Assegna ad ogni "DrawingArea" esistente un'immagine, che potrà essere trasferita e rilasciata nella "DrawingArea" principale:''</font>
  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
  Paint.DrawPicture(pc[pc.Max], 1, 1, 32, 32)
End
   
   
   
   
  '''Public''' Sub pic_MouseDrag()
  Public Sub AreaDisegno_MouseDrag()
 
<FONT Color=gray>' ''Preleviamo e trasciniamo l'immagine da una "DrawingArea":''</font>
  Drag.Icon = pc[ddrr.Find(Last)]
    
    
<FONT Color=gray>' ''Preleviamo e trasciniamo l'immagine dalla "PictureBox":''</font>
   Last.Drag(pc[ddrr.Find(Last)].Image)
   Drag.Icon = Last.Picture   
  Last.Drag(Last.Picture.Image)
    
    
  '''End'''
  End
   
   
   
   
  '''Public''' Sub DrawingArea1_Drop()
  Public Sub DrawingArea1_Drop()
    
    
   Dim im As IMMAGINI
   Dim im As IMMAGINI
    
    
<FONT Color=gray>' ''All'atto del rilascio del testo viene creata una variabile del tipo della "Struttura" dichiarata. Inoltre vengono assegnate ai corrispondenti membri della variabile "Struttura" il testo trascinato, nonché le coordinate X ed Y di rilascio del testo medesimo all'interno della "DrawingArea". I valori contenuti nei predetti membri della "Struttura", saranno utilizzati per disegnare il testo nella "DrawingArea".''</font>
   With im = New IMMAGINI
   With im = New IMMAGINI
     .drx = Drag.X
     .drx = Drag.X
     .dry = Drag.Y
     .dry = Drag.Y
     .pc = Drag.Data.Picture
     .p = Drag.Data.Picture
   End With
   End With
    
    
Riga 92: Riga 326:
   DrawingArea1.Refresh
   DrawingArea1.Refresh
    
    
  '''End'''
  End
   
   
   
   
  '''Public''' Sub DrawingArea1_Draw()
  Public Sub DrawingArea1_Draw()   ' Si disegna l'immagine nella "DrawingArea":''</font>
    
    
   Dim n As Integer
   Dim n As Integer
Riga 101: Riga 335:
  <FONT Color=gray>' ''Ridisegna le immagini precedentemente rilasciate nella "DrawingArea":''</font>
  <FONT Color=gray>' ''Ridisegna le immagini precedentemente rilasciate nella "DrawingArea":''</font>
   For n = 0 To iimm.Max
   For n = 0 To iimm.Max
     Paint.DrawPicture(iimm[n].pc, iimm[n].drX, iimm[n].drY)
     Paint.DrawPicture(iimm[n].p, iimm[n].drX, iimm[n].drY)
   Next
   Next
    
    
  '''End'''
  End

Versione attuale delle 18:14, 10 ago 2025

Drag&Drop di un'immagine all'interno della medesima DrawingArea

In questo caso lo spostamento con il mouse mediante le risorse del Drag&Drop di un'immagine, presente in una DrawingArea, avviene all'interno della medesima DrawingArea:

Private DrawingArea1 As DrawingArea
Private im As Image
Private bo As Boolean
Private x As Short
Private y As Short


Public Sub Form_Open()

 With Me
   .Move(0, 0, Screen.AvailableWidth, Screen.AvailableHeight)
   .Arrangement = Arrange.Fill
 End With

 With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
' Attiva la capacità della "DrawingArea" di sollevare l'evento "_Drop():
   .Drop = True
 End With

End


Public Sub DrawingArea1_Draw()

' Quando viene spostata l'immagine con il mouse all'interno della "DrawingArea", essa viene cancellata dalle coordinate ove era stata impostata all'inizio o rilasciata dopo il precedente spostamento::
 If bo Then 
   Paint.FillRect(x, y, im.W, im.H, Color.Background)
 Else
' Carica l'immagine nella variabile "im" di tipo "Image":
   im = Picture["icon:/32/book"].Image
' Mostra l'immagine alle coordinate x, y:
   Paint.DrawImage(im, x, y, im.W, im.H)
 Endif
 
End


Public Sub DrawingArea1_MouseDrag()

 bo = True
' Iniziato lo spostamento dell'immagine, va a ridisegnare la "DrawingArea", per cancellare l'immagine impostata inizialmente o rilasciata dopo il precedente spostamento::
 DrawingArea1.Refresh

 Drag.Icon = im.Picture

' Preleva e trascina l'Oggetto Image, ossia l'immagine presente sulla "DrawingArea":
 Last.Drag(im)

End


Public Sub DrawingArea1_Drop()

' Assegna alle variabili "x" e "y" le rispettive coordinate, ove l'immagine è stata rilasciata sull'altra "DrawingArea":
 x = Drag.X
 y = Drag.Y
 bo = False
 DrawingArea1.Refresh

End


Drag&Drop di un'immagine da un Oggetto grafico in una DrawingArea

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 DrawingArea1 As DrawingArea
Private im As Image
Private x As Short
Private y As Short


Public Sub Form_Open()

 With Me
   .Move(0, 0, Screen.AvailableWidth, Screen.AvailableHeight)
   .Arrangement = Arrange.Fill
 End With

 With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
' Attiva la capacità della "DrawingArea" di sollevare l'evento "_Drop():
   .Drop = True
 End With

 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
 
 Paint.DrawImage(im, x, y, im.W, im.H)

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.

Private DrawingArea1 As DrawingArea

Public Struct IMMAGINI
  drx As Short
  dry As Short
  im As Image
End Struct
Private iimm As New IMMAGINI[]


Public Sub Form_Open()

 With Me
   .Move(0, 0, Screen.AvailableWidth, Screen.AvailableHeight)
   .Arrangement = Arrange.Fill
 End With

 With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
' Attiviamo la capacità della "DrawingArea" di sollevare l'evento "_Drop():
   .Drop = True
 End With

 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 "DrawingArea1" 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:
 Paint.DrawImage(im, 0, 0, im.W, im.H)

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 "DrawingArea1"

 If bo == False Then Return

' Mostra l'immagine alle coordinate "x" e "y", ossia ove la stessa è stata rilasciata:
 Paint.DrawImage(im, x, y, im.W, im.H)

End

Drag&Drop da più DrawingArea a 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

 Paint.DrawPicture(pc[pc.Max], 1, 1, 32, 32)

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