Uso della classe Clipboard

Da Gambas-it.org - Wikipedia.

La Classe Clipboard consente di gestire gli appunti memorizzati (ossia la clipboard) di sistema.


L'uso della Classe Clipboard può avvenire per copiare negli appunti di sistema mediante la sua funzione .Copy() un testo oppure un'immagine. Successivamente attraverso la funzione .Paste() potranno essere restituiti i dati precedentemente copiati. Nel caso sia stata copiata un'immagine, verrà restituita un'immagine di tipo Image.


Copia di dati all'interno dello stesso applicativo Gambas

Si potranno copiare dati presenti in un oggetto dell'applicativo Gambas per immetterli in un altro oggetto dello stesso applicativo.

Poniamo come esempio il caso in cui sul Form si abbiano due PictureBox, in una delle quali è presente un'immagine. Si intende semplicemente far mostrare all'applicativo nella seconda PictureBox l'immagine presente nella prima PictureBox, attraverso la copia negli appunti del sistema dell'immagine da assegnare poi alla seconda PictureBox:

Public Sub Button1_Click()
  
' Facciamo una copia dell'immagine negli appunti (clipboard) di sistema:
   Clipboard.Copy(PictureBox1.Picture.Image)
 
End


Public Sub PictureBox2_MouseUp()

 Dim i As Image
   
' Assegnamo ad una variabile di tipo "Image" la copia dell'immagine posta negli appunti di sistema:
   i = Clipboard.Paste()
   
' Assegnamo l'immagine alla seconda "PictureBox" presente nel Form:
   PictureBox2.Picture = i.Picture

End


Volendo invece fare l'esempio con un testo, poniamo il caso di avere un ValueBox ed una Label. Intendiamo copiare il contenuto del ValueBox nella Label attraverso l'uso della Classe Clipboard:

Public Sub ValueBox1_MouseUp()

  Clipboard.Copy(CStr(ValueBox1.Value))

End


Public Sub Label1_MouseUp()

  Label1.Text = Clipboard.Paste()

End


Copia di dati dall'esterno dell'applicativo Gambas all'interno dell'applicativo medesimo

Si potranno, inoltre, copiare dati stringa e dati immagine presenti all'esterno dell'applicativo Gambas per immetterli in un oggetto dello stesso applicativo. Pertanto, in questo caso avremo la copia, a seconda dei casi, di un testo o di un'immagine da un programma Gambas in un altro programma Gambas.

Copiare del testo da un programma Gambas in un altro programma Gambas

Poniamo come esempio il caso in cui si intende copiare un testo, presente in un altro programma Gambas, all'interno dell'applicativo Gambas principale. In tal caso basterà evidenziare la riga di testo prescelta, premere i tasti ctrl+C oppure usare l'opzione Copy presente nella finestra menu del tasto destro del mouse; quindi usare la semplice funzione .Paste() della Classe Clipboard:

Public Sub Label1_MouseUp()

  Label1.Text = Clipboard.Paste()

End

Copia da un programma non-Gambas in un programma Gambas

Si potranno copiare dati stringa o immagine anche da un programma non-Gambas esterno in un applicativo Gambas. Anche in tali casi la copia avverrà usando i tasti ctrl+C oppure l'opzione Copy (oppure Copia se in italiano) presente nella finestra menu del tasto destro del mouse. |1|

Copia di dati stringa

Si potrà copiare un testo anche da un programma non-Gambas esterno in un applicativo Gambas. In tal caso, però, si è notato che nella maggior parte dei casi si otterrà come risultato finale non solo il testo copiato, ma anche altri dati estranei, come ad esempio dati relativi al codice di formattazione del testo medesimo ed imposti dal programma esterno non-Gambas (esempio: Gedit) che sta mostrando il testo. Copiando da un sorgente HTML, verrà riportato nell'applicativo gambas anche il codice HTML della riga relativa al testo copiato.
Eccezione fa il risultato della copia di un testo da LibreOffice, che restituisce nell'applicativo Gambas il semplice e puro testo precedentemente copiato in LibreOffice.

Copia di un'immagine

Si potrà infine anche copiare un'immagine a un programma esterno, visualizzatore di immagini, in un programma Gambas. Si cliccherà sull'immagine con il tasto destro del mouse e si copierà l'immagine scegliendo la consueta opzione Copy (oppure Copia se in italiano). Quindi il codice nell'applicativo Gambas che dovrà ricevere l'immagine potrà essere il seguente:

Public Sub PictureBox1_MouseUp()

 Dim s As String
 
' Assegnamo ad una variabile di tipo stringa la copia dell'immagine presente negli appunti di sistema:
   s = Clipboard.Paste()

' Viene ricostruita e salvata l'immagine partendo dai dati presenti nella variabile di tipo stringa:
   File.Save("/tmp/immagine", s)

   PictureBox1.Picture = Picture.Load("/tmp/immagine")

End


Note

[1] Dalla Mailing List internazionale di Gambas al riguardo è stato precisato che non è possibile ottenere in un applicativo Gambas il testo solo e semplicemente evidenziato in un programma esterno, perché il testo non è evidenziato negli appunti desktop, ma solo nel buffer degli appunti del server grafico X. Ed invece la Classe Clipboard del componente qt4 riconosce solo gli appunti di desktop. La soluzione, dunque, risiede nell'ottenere il testo evidenziato (che si intende copiare) all'interno degli appunti (clipboard) di desktop.