Differenze tra le versioni di "Drag-Drop di un'immagine in una DrawingArea"

Da Gambas-it.org - Wikipedia.
(9 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
==Drag&Drop da una ''PictureBox'' 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 im As Image
 
  Private x As Short
 
  Private x As Short
 
  Private y As Short
 
  Private y As Short
Riga 11: Riga 11:
 
   DrawingArea1.Drop = True
 
   DrawingArea1.Drop = True
 
    
 
    
   PictureBox1.Picture = Picture.Load("<FONT Color=darkgreen>''/percorso/del/file/immagine''</font>")
+
   PictureBox1.Image = Image.Load("<FONT Color=darkgreen>''/percorso/del/file/immagine''</font>")
 
    
 
    
 
  End
 
  End
Riga 17: Riga 17:
 
   
 
   
 
  Public Sub PictureBox1_MouseDrag()
 
  Public Sub PictureBox1_MouseDrag()
 
+
  <FONT Color=gray>' ''Preleviamo e trasciniamo l'immagine dalla "PictureBox":''</font>
+
  <FONT Color=gray>' ''Preleva e trascina 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
 
  End
 
   
 
   
 
   
 
   
 
  Public Sub DrawingArea1_Drop()
 
  Public Sub DrawingArea1_Drop()
 
+
   pc = Drag.Data.Picture
+
   im = Drag.Data
 
   x = Drag.X
 
   x = Drag.X
 
   y = Drag.Y
 
   y = Drag.Y
 
+
 
   DrawingArea1.Refresh
 
   DrawingArea1.Refresh
 
+
 
  End
 
  End
 
   
 
   
Riga 38: Riga 38:
 
  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 "DrawingArea"''</font>
 
    
 
    
   If Object.Address(pc) == 0 Then Return
+
   If Object.Address(im) == 0 Then Return
 
    
 
    
 
   With Paint
 
   With Paint
     .DrawPicture(pc, x, y, pc.W, pc.H)
+
     .DrawImage(im, x, y, im.W, im.H)
 
     .End
 
     .End
 
   End With
 
   End With
Riga 56: Riga 56:
 
   drx As Short
 
   drx As Short
 
   dry As Short
 
   dry As Short
   pc As Picture
+
   im As Image
 
  End Struct
 
  End Struct
 
  Private iimm As New IMMAGINI[]
 
  Private iimm As New IMMAGINI[]
Riga 66: Riga 66:
 
   DrawingArea1.Drop = True
 
   DrawingArea1.Drop = True
 
   
 
   
   PictureBox1.Picture = Picture.Load("<FONT Color=gray>''/percorso/del/file/immagine''</font>")
+
   PictureBox1.Image = Image.Load("<FONT Color=darkgreen>''/percorso/del/file/immagine''</font>")
 
   
 
   
 
  End
 
  End
Riga 74: Riga 74:
 
    
 
    
 
  <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
 
  End
Riga 88: Riga 88:
 
     .drx = Drag.X
 
     .drx = Drag.X
 
     .dry = Drag.Y
 
     .dry = Drag.Y
     .pc = Drag.Data.Picture
+
     .im = Drag.Data
 
   End With
 
   End With
 
    
 
    
Riga 99: Riga 99:
 
   
 
   
 
  Public Sub DrawingArea1_Draw()
 
  Public Sub DrawingArea1_Draw()
 
+
 
   Dim n As Integer
 
   Dim n As Integer
 
+
 
  <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.DrawImage(iimm[n].im, iimm[n].drX, iimm[n].drY)
 
   Next
 
   Next
 
+
 
  End
 
  End
  
  
==Drag&Drop da una ''DrawingArea'' ad un'altra==
+
==Drag&Drop da una ''DrawingArea'' a un'altra==
Mostriamo un possibile codice per effettuare il Drag-Drop del disegno da una ''DrawingArea'' ad una ''DrawingArea''.
+
Mostriamo un possibile codice per effettuare il Drag-Drop del disegno da una ''DrawingArea'' a un'altra ''DrawingArea''.
<BR>Nel caso di ''Drag&Drop'' da una ''DrawingArea'' ad un'altra è assolutamente necessario un Oggetto ''Picture'' di appoggio, poiché la Classe ''DrawingArea'' non ha un Metodo per generare un Oggetto di tipo ''Image'' o ''Picture''.
+
  Private im As Image
  Private pc As Picture
 
 
  Private bo As Boolean
 
  Private bo As Boolean
 
  Private x As Short
 
  Private x As Short
Riga 129: Riga 128:
 
  Public Sub DrawingArea2_Draw()
 
  Public Sub DrawingArea2_Draw()
 
    
 
    
   pc = Picture["icon:/32/book"]
+
   im = Picture["icon:/32/book"].Image
 
+
 +
<FONT Color=gray>' ''Mostra l'immagine alle coordinate x=0, y=0:''</font>
 
   With Paint
 
   With Paint
     .DrawPicture(pc, 0, 0, pc.W, pc.H)
+
     .DrawImage(im, 0, 0, im.W, im.H)
 
     .End
 
     .End
 
   End With
 
   End With
Riga 140: Riga 140:
 
   
 
   
 
  Public Sub DrawingArea2_MouseDrag()
 
  Public Sub DrawingArea2_MouseDrag()
 
+
  <FONT Color=gray>' ''Preleviamo e trasciniamo l'immagine dell'Oggetto "Picture", presente anche nella "DrawingArea2":''</font>
+
  <FONT Color=gray>' ''Trasforma l'Oggetto "Picture" in un Oggetto "Image":''</font>
   Drag.Icon = pc
+
   Drag.Icon = im.Picture
 
+
   Last.Drag(pc.Image)
+
<FONT Color=gray>' ''Quindi lo preleva e lo trascina:''</font>
 
+
   Last.Drag(im)
 +
 
  End
 
  End
 
   
 
   
Riga 152: Riga 153:
 
   
 
   
 
   bo = True
 
   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 163: Riga 166:
 
   
 
   
 
   If bo == False Then Return
 
   If bo == False Then Return
 
+
 +
<FONT Color=gray>' ''Mostra l'immagine alle coordinate "x" e "y", ossia ove la stessa è stata rilasciata:''</font>
 
   With Paint
 
   With Paint
     .DrawPicture(pc, x, y, pc.W, pc.H)
+
     .DrawImage(im, x, y, im.W, im.H)
 
     .End
 
     .End
 
   End With
 
   End With
Riga 173: 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 "Dr").
+
<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").
<BR>Anche in questo caso, per le ragioni spiegate nel paragrafo precedente, è necessario un Oggetto ''Picture'' di appoggio.
 
 
  Public Struct IMMAGINI
 
  Public Struct IMMAGINI
 
   drx As Short
 
   drx As Short
Riga 191: 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, "Dr")
+
   Object.Attach(DrawingArea2, Me, "AreaDisegno")
   Object.Attach(DrawingArea3, Me, "Dr")
+
   Object.Attach(DrawingArea3, Me, "AreaDisegno")
   Object.Attach(DrawingArea4, Me, "Dr")
+
   Object.Attach(DrawingArea4, Me, "AreaDisegno")
   Object.Attach(DrawingArea5, Me, "Dr")
+
   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 205: Riga 208:
 
   
 
   
 
   
 
   
  Public Sub Dr_Draw()
+
  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 227: Riga 230:
 
   
 
   
 
   
 
   
  Public Sub Dr_MouseDrag()
+
  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 06: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":</font>
 
 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