Differenze tra le versioni di "Codice essenziale per effettuare il Drag-Drop di un'immagine"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
Mostriamo di seguito il codice ''essenziale'' per effettuare il ''Drag-Drop'' di un'immagine <SPAN style="text-decoration:underline">da un oggetto ad un altro</span> posti sul medesimo ''Form''.
+
Mostriamo di seguito un paio di codici ''essenziali'' per effettuare il ''Drag-Drop'' di un'immagine <SPAN style="text-decoration:underline">da un oggetto ad un altro</span> posti sul medesimo ''Form''.
  
L'esempio presuppone che sul ''Form'' vi sia su un lato un oggetto ''VPanel'', all'interno del quale sono presenti tre ''PictureBox''. Nell'IDE (per fare prima) viene assegnato a ciascuna di tali tre ''PictureBox'' il medesimo nome di Gruppo (ad esempio: pb). Quindi viene assegnata ancora a ciascuna di dette ''PictureBox'' una diversa immagine, che sarà oggetto del ''Drag-Drop''.
+
Nel primo esempio, semplicissimo, sono poste sul ''Form'' due Oggetti ''PictureBox'': si provvederà a effettuare il ''Drag and Drop'' da una ''PictureBox'' all'altra.
 +
<BR>In particolare:
 +
* la ''PictureBox'', nella quale verrà effettuato il rilascio dell'icona dell'immagine trascinata, deve avere la sua proprietà ''.Drop'' posta a <FONT color=Darkred>''True''</font>;
 +
* la ''PictureBox'', dalla quale viene ''prelevata'' e trascinata l'immagine (e quindi quella alla quale sarà applicato l'evento che scatena il ''prelevamento'' dell'immagine da trascinare), deve essere quella che ovviamente <SPAN style="text-decoration:underline">contiene</span> l'immagine;
 +
* l'evento che scatena il ''prelevamento'' dell'immagine da trascinare è <FONT color=darkred>''_MouseDrag()''</font>;
 +
* all'interno della routine di questo evento si porrà la riga di comando: ''Drag.Icon = Last.Picture'', affinché durante il trascinamento appaia in prossimità del puntatore del mouse l'icona dell'immagine che si sta trascinando. Inoltre, sarà posta quest'altra riga: ''Last.Drag(Last.Picture.Image)'' per avviare il processo di ''trascinamento'', indicando nell'argomento del metodo ''Drag'' che i dati oggetto della procedura di ''Drag'' sono afferenti ad un'immagine (e non un testo);
 +
* nella routine dell'evento ''Drop'' si assegnerà all'altra ''PictureBox'', che scatena il predetto ''Drop'', i dati dell'immagine oggetto del ''Drag''.
 +
'''Public''' Sub Form_Open() 
 +
 
 +
  PictureBox1.Drop = True 
 +
 
 +
'''End'''
 +
 
 +
 +
'''Public''' Sub PictureBox2_MouseDrag() 
 +
 
 +
  Drag.Icon = Last.Picture   
 +
  Last.Drag(Last.Picture.Image)   
 +
     
 +
'''End''' 
 +
 
 +
'''Public''' Sub PictureBox1_Drop() 
 +
 
 +
  PictureBox1.Picture = Drag.Data.Picture 
 +
 
 +
'''End'''
 +
 
 +
 
 +
In questo secondo esempio, invece, si presuppone che sul ''Form'' vi sia su un lato un oggetto ''VPanel'', all'interno del quale sono presenti tre ''PictureBox''. Nell'IDE (per fare prima) viene assegnato a ciascuna di tali tre ''PictureBox'' il medesimo nome di Gruppo (ad esempio: pb). Quindi viene assegnata ancora a ciascuna di dette ''PictureBox'' una diversa immagine, che sarà oggetto del ''Drag-Drop''.
 
<BR>Sul ''Form'', inoltre, viene posto anche un oggetto ''ScrollView'', all'interno del quale è posta una sola ''PictureBox'' (dato che la ''ScrollView'' non è in grado di supportare in modo autonomo un'immagine), che così avrà il nome ''PictureBox4'', e che avrà il compito di ricevere l'immagine trascinata.
 
<BR>Sul ''Form'', inoltre, viene posto anche un oggetto ''ScrollView'', all'interno del quale è posta una sola ''PictureBox'' (dato che la ''ScrollView'' non è in grado di supportare in modo autonomo un'immagine), che così avrà il nome ''PictureBox4'', e che avrà il compito di ricevere l'immagine trascinata.
  
 
Il ''Drag-Drop'' richiede che:
 
Il ''Drag-Drop'' richiede che:
 
* l'oggetto (in questo caso lo ''ScrollView''), nel quale verrà effettuato il rilascio dell'icona dell'immagine trascinata, abbia la sua proprietà ''.Drop'' posta a <FONT color=Darkred>''True''</font>;
 
* l'oggetto (in questo caso lo ''ScrollView''), nel quale verrà effettuato il rilascio dell'icona dell'immagine trascinata, abbia la sua proprietà ''.Drop'' posta a <FONT color=Darkred>''True''</font>;
* l'oggetto da quale viene ''prelevata'' e trascinata l'immagine, e quindi quello al quale sarà applicato l'evento che scatena il ''prelevamento'' dell'immagine da trascinare, deve essere quello che <SPAN style="text-decoration:underline">contiene</span> l'immagine (in questo caso le tre ''PictureBox'' poste nell'oggetto ''VPanel''). Se gli oggetti sono più di uno (come nel nostro esempio), gli oggetti contenenti le ''Picture'' vanno raggruppati con il nome di un medesimo Gruppo;
+
* l'oggetto, dal quale viene ''prelevata'' e trascinata l'immagine, e quindi quello al quale sarà applicato l'evento che scatena il ''prelevamento'' dell'immagine da trascinare, deve essere quello che <SPAN style="text-decoration:underline">contiene</span> l'immagine (in questo caso le tre ''PictureBox'' poste nell'oggetto ''VPanel''). Se gli oggetti sono più di uno (come nel nostro esempio), gli oggetti contenenti le ''Picture'' vanno raggruppati con il nome di un medesimo Gruppo;
 
* l'evento che scatena il ''prelevamento'' dell'immagine da trascinare è <FONT color=darkred>''_MouseDrag()''</font>;
 
* l'evento che scatena il ''prelevamento'' dell'immagine da trascinare è <FONT color=darkred>''_MouseDrag()''</font>;
 
* all'interno della routine di questo evento si porrà la riga di comando: ''Drag.Icon = Last.Picture'', affinché durante il trascinamento appaia in prossimità del puntatore del mouse l'icona dell'immagine che si sta trascinando. Inoltre, sarà posta quest'altra riga: ''Last.Drag(Last.Picture.Image)'' per avviare il processo di ''trascinamento'', indicando nell'argomento del metodo ''Drag'' che i dati oggetto della procedura di ''Drag'' sono afferenti ad un'immagine (e non un testo);
 
* all'interno della routine di questo evento si porrà la riga di comando: ''Drag.Icon = Last.Picture'', affinché durante il trascinamento appaia in prossimità del puntatore del mouse l'icona dell'immagine che si sta trascinando. Inoltre, sarà posta quest'altra riga: ''Last.Drag(Last.Picture.Image)'' per avviare il processo di ''trascinamento'', indicando nell'argomento del metodo ''Drag'' che i dati oggetto della procedura di ''Drag'' sono afferenti ad un'immagine (e non un testo);
 
* il rilascio dell'immagine all'interno dell'altro oggetto previsto (nel nostro esempio è una ''ScrollView'', che contiene una ''PictureBox'', che accoglierà e mostrerà effettivamente in vero l'immagine) è effettuato dall'evento <FONT color=darkred>''_Drop()''</font> dell'oggetto ricevente;
 
* il rilascio dell'immagine all'interno dell'altro oggetto previsto (nel nostro esempio è una ''ScrollView'', che contiene una ''PictureBox'', che accoglierà e mostrerà effettivamente in vero l'immagine) è effettuato dall'evento <FONT color=darkred>''_Drop()''</font> dell'oggetto ricevente;
* nella routine del ''Drop'' si assegnerà alla ''PictureBox'', presente all'interno dell'oggetto che scatena il predetto ''Drop'' (nel nostro esempio la ''ScrollView'', i dati dell'immagine oggetto del ''Drag''.
+
* nella routine dell'evento ''Drop'' si assegnerà alla ''PictureBox'', presente all'interno dell'oggetto che scatena il predetto ''Drop'' (nel nostro esempio la ''ScrollView''), i dati dell'immagine oggetto del ''Drag''.
 
  '''Public''' Sub Form_Open()   
 
  '''Public''' Sub Form_Open()   
 
        
 
        

Versione delle 14:52, 9 mag 2018

Mostriamo di seguito un paio di codici essenziali per effettuare il Drag-Drop di un'immagine da un oggetto ad un altro posti sul medesimo Form.

Nel primo esempio, semplicissimo, sono poste sul Form due Oggetti PictureBox: si provvederà a effettuare il Drag and Drop da una PictureBox all'altra.
In particolare:

  • la PictureBox, nella quale verrà effettuato il rilascio dell'icona dell'immagine trascinata, deve avere la sua proprietà .Drop posta a True;
  • la PictureBox, dalla quale viene prelevata e trascinata l'immagine (e quindi quella alla quale sarà applicato l'evento che scatena il prelevamento dell'immagine da trascinare), deve essere quella che ovviamente contiene l'immagine;
  • l'evento che scatena il prelevamento dell'immagine da trascinare è _MouseDrag();
  • all'interno della routine di questo evento si porrà la riga di comando: Drag.Icon = Last.Picture, affinché durante il trascinamento appaia in prossimità del puntatore del mouse l'icona dell'immagine che si sta trascinando. Inoltre, sarà posta quest'altra riga: Last.Drag(Last.Picture.Image) per avviare il processo di trascinamento, indicando nell'argomento del metodo Drag che i dati oggetto della procedura di Drag sono afferenti ad un'immagine (e non un testo);
  • nella routine dell'evento Drop si assegnerà all'altra PictureBox, che scatena il predetto Drop, i dati dell'immagine oggetto del Drag.
Public Sub Form_Open()  
  
 PictureBox1.Drop = True  
  
End
 

Public Sub PictureBox2_MouseDrag()  
  
  Drag.Icon = Last.Picture    
  Last.Drag(Last.Picture.Image)    
     
End  
 
Public Sub PictureBox1_Drop()  
 
 PictureBox1.Picture = Drag.Data.Picture  
 
End


In questo secondo esempio, invece, si presuppone che sul Form vi sia su un lato un oggetto VPanel, all'interno del quale sono presenti tre PictureBox. Nell'IDE (per fare prima) viene assegnato a ciascuna di tali tre PictureBox il medesimo nome di Gruppo (ad esempio: pb). Quindi viene assegnata ancora a ciascuna di dette PictureBox una diversa immagine, che sarà oggetto del Drag-Drop.
Sul Form, inoltre, viene posto anche un oggetto ScrollView, all'interno del quale è posta una sola PictureBox (dato che la ScrollView non è in grado di supportare in modo autonomo un'immagine), che così avrà il nome PictureBox4, e che avrà il compito di ricevere l'immagine trascinata.

Il Drag-Drop richiede che:

  • l'oggetto (in questo caso lo ScrollView), nel quale verrà effettuato il rilascio dell'icona dell'immagine trascinata, abbia la sua proprietà .Drop posta a True;
  • l'oggetto, dal quale viene prelevata e trascinata l'immagine, e quindi quello al quale sarà applicato l'evento che scatena il prelevamento dell'immagine da trascinare, deve essere quello che contiene l'immagine (in questo caso le tre PictureBox poste nell'oggetto VPanel). Se gli oggetti sono più di uno (come nel nostro esempio), gli oggetti contenenti le Picture vanno raggruppati con il nome di un medesimo Gruppo;
  • l'evento che scatena il prelevamento dell'immagine da trascinare è _MouseDrag();
  • all'interno della routine di questo evento si porrà la riga di comando: Drag.Icon = Last.Picture, affinché durante il trascinamento appaia in prossimità del puntatore del mouse l'icona dell'immagine che si sta trascinando. Inoltre, sarà posta quest'altra riga: Last.Drag(Last.Picture.Image) per avviare il processo di trascinamento, indicando nell'argomento del metodo Drag che i dati oggetto della procedura di Drag sono afferenti ad un'immagine (e non un testo);
  • il rilascio dell'immagine all'interno dell'altro oggetto previsto (nel nostro esempio è una ScrollView, che contiene una PictureBox, che accoglierà e mostrerà effettivamente in vero l'immagine) è effettuato dall'evento _Drop() dell'oggetto ricevente;
  • nella routine dell'evento Drop si assegnerà alla PictureBox, presente all'interno dell'oggetto che scatena il predetto Drop (nel nostro esempio la ScrollView), i dati dell'immagine oggetto del Drag.
Public Sub Form_Open()  
     
   ScrollView1.Drop = True  
     
End
     
     
Public Sub pb_MouseDrag()  
      
   Drag.Icon = Last.Picture    
   Last.Drag(Last.Picture.Image)    
      
End  
     
Public Sub ScrollView1_Drop()  
      
  PictureBox4.Picture = Drag.Data.Picture  
     
End


Far mostrare l'immagine nel medesimo punto del suo rilascio

Può darsi il caso in cui il contenitore, ove verrà rilasciata e fatta dunque apparire l'immagine trascinata, sia più ampio dell'immagine medesima; e che pertanto questa possa essere rilasciata in un punto qualsiasi a scelta di quel contenitore.
Per assicurare che l'immagine dopo il suo rilascio venga mostrata nel punto esatto (ossia alle esatte coordinate) in cui è stata rilasciata, bisognerà utilizzare le proprietà .X ed .Y della Classe Drag.


Mostriamo un esempio simile al precedente, in cui su un Form v'è una PictureBox, contenente un'immagine che dovrà essere trascinata all'interno di un contenitore: una ScrollView.

Public Sub Form_Open()

  ScrollView1.Drop = True

End


Public Sub PictureBox1_MouseDrag()
  
  If Mouse.Left Then    
    Drag.Icon = Last.Picture    
    Last.Drag(Last.Picture.Image)  
  Endif
 
End


Public Sub ScrollView1_Drop()

 Dim pb As PictureBox
 
' Poiché la "ScrollView" non è in grado di supportare in modo autonomo un'immagine,
' allora creo una "PictureBox" all'interno della "ScrollView" all'atto del "_Drop()" .
' Le assegno coordinate con la proprietà "Drag.X" e "Drag.Y", l'immagine prelevata e trascinata
' con il mouse, e le medesime dimensioni della predetta immagine trascinata e rilasciata:
   With pb = New PictureBox(ScrollView1)
     .X = Drag.X
     .Y = Drag.Y
     .Picture = Drag.Data.Picture
     .W = Drag.Data.Picture.W
     .H = Drag.Data.Picture.H
   End With
 
End