Ottenere il percorso di un file trasportato e rilasciato con Drag&Drop

Da Gambas-it.org - Wikipedia.

Per ottenere il percorso, comprensivo del nome di un file, trascinato con la risorsa del Drag&Drop all'interno di un Controllo di testo, utilizza il Metodo ".Paste()" della Classe Drag.

Mostriamo qualche semplice esempio, nel quale sarà possibile vedere in una ListBox il percorso e il nome di un file che sarà stato trascinato con la modalità del Drag&Drop.

Uso della funzione "FromUrl()"

La funzione "FromUrl()" conterrà il Metodo ".Paste()" della Classe Drag, che avrà come suo unico argomento il formato "text/uri-list":

Public Sub Form_Open()

 ListBox1.Drop = True

End


Public Sub Listbox1_Drop()

 ListBox1.Add(FromUrl(Drag.Paste("text/uri-list")[0]))

End


Uso del ".Paste()" della Classe Drag privo di argomento

Se non si intende usare la funzione "FromUrl()", come sopra descritto, sarà opportuno lasciare vuoto il parametro previsto dal Metodo ".Paste()", giacché, se usassimo il formato "text/uri-list", eventuali file aventi nel nome caratteri particolari - come ad esempio il simbolo "+" o il simbolo "§" - questi sarebbero sostituiti nel risultato da uno spazio bianco.
Lasciando invece vuoto quel parametro, i simboli saranno salvaguardati, anche se, però, qualora il nome del file dovesse contenere uno spazio bianco, questo sarebbe riportato con il codice "%20" (sappiamo che il valore esadecimale &H20 corrisponde appunto nella tabella ASCII al carattere dello Spazio Bianco). Per ovviare a ciò useremo la funzione "Replace()".
Va sottolineato che la stringa del percorso, dopo il nome del file, prevede il carattere del "Nuova linea a capo" (&H10, gb.Newline) e del "Ritorno a capo" (&H0D, gb.Cr), seguito da alcuni valori numerici in ASCII. Per eliminare il valore del &H0D, il codice prevederà l'uso della funzione Scan().

Mostriamo un semplice esempio, nel quale sarà possibile vedere in una ListBox il percorso e il nome di un file che sarà stato trascinato con la modlità del Drag&Drop.

Public Sub Form_Open()

 ListBox1.Drop = True

End


Public Sub Listbox1_Drop()

 ListBox1.Add(Replace(Scan(Drag.Paste(), "*//*\r*")[1], "%20", " "))

' oppure: ListBox1.Add(Scan(FromUrl(Drag.Paste()), "*//*\r*")[1])

End