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

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
 +
==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 pc As Picture
Riga 102: Riga 103:
 
   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].pc, iimm[n].drX, iimm[n].drY)
 +
  Next
 +
 
 +
'''End'''
 +
 +
 +
==Drag&Drop da più ''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>Nel caso di ''Drag&Drop'' da una o più ''DrawingArea'' ad un'altra è assolutamente necessario un Oggetto ''Picture'' di appoggio, poiché la ''DrawingArea'' non ha un Metodo per generare un Oggetto di tipo ''Image'' o ''Picture''.
 +
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()
 +
 +
<FONT Color=gray>' ''Attiva la capacità della "DrawingArea" principale di sollevare l'evento "_Drop():''</font>
 +
  DrawingArea1.Drop = True
 +
 +
<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 Dr_Draw()
 +
 
 +
<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
 +
 
 +
  With Paint
 +
    .DrawPicture(pc[pc.Max], 1, 1, 32, 32)
 +
    .End
 +
  End With
 +
 
 +
'''End'''
 +
 +
 +
'''Public''' Sub Dr_MouseDrag()
 +
 
 +
<FONT Color=gray>' ''Preleviamo e trasciniamo l'immagine da una "DrawingArea":''</font>
 +
  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
 +
 
 +
<FONT Color=gray>' ''Ridisegna le immagini precedentemente rilasciate nella "DrawingArea":''</font>
 +
  For n = 0 To iimm.Max
 +
    Paint.DrawPicture(iimm[n].p, iimm[n].drX, iimm[n].drY)
 
   Next
 
   Next
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione delle 12:31, 1 nov 2020

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 pc As Picture
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.Picture = Picture.Load("/percorso/del/file/immagine")
 
End


Public Sub PictureBox1_MouseDrag()
 
' Preleviamo e trasciniamo l'immagine dalla "PictureBox":
 Drag.Icon = Last.Picture    
 Last.Drag(Last.Picture.Image)  
 
End


Public Sub DrawingArea1_Drop()
 
 pc = Drag.Data.Picture
 x = Drag.X
 y = Drag.Y
 
 DrawingArea1.Refresh
 
End


Public Sub DrawingArea1_Draw()   ' Si disegna l'immagine nella "DrawingArea"
 
 If Object.Address(pc) == 0 Then Return
 
 With Paint
   .DrawPicture(pc, x, y, pc.W, pc.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
  pc As Picture
End Struct
Private iimm As New IMMAGINI[]


Public Sub Form_Open()
 
' Attiviamo la capacità della "DrawingArea" di sollevare l'evento "_Drop():
 DrawingArea1.Drop = True
 
End


Public Sub Pic_MouseDrag()
 
' Preleviamo e trasciniamo l'immagine dalla "PictureBox":
 Drag.Icon = Last.Picture    
 Last.Drag(Last.Picture.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
   .pc = Drag.Data.Picture
 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.DrawPicture(iimm[n].pc, iimm[n].drX, iimm[n].drY)
 Next
 
End


Drag&Drop da più DrawingArea in 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 "Dr").
Nel caso di Drag&Drop da una o più DrawingArea ad un'altra è assolutamente necessario un Oggetto Picture di appoggio, poiché la DrawingArea non ha un Metodo per generare un Oggetto di tipo Image o Picture.

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