Al contrario di quello che abbiamo visto in questo post, nel caso di oggi ci dobbiamo interfacciare con altri programmi, non scritti da noi, o con il sistema operativo stesso.
Il drag and drop può essere suddiviso in due tipi di operazioni diverse: i dati entrano nel nostro programma oppure i dati escono dal nostro programma.
Dati in entrata
Ora esaminiamo il caso che i dati entrino nel nostro programma, per esempio l'utente trascina un'icona del desktop di un'immagine per importarla nel nostro programma.L'oggetto che contiene il codice per l'importazione può essere qualsiasi cosa a parte una card o uno stack; questo ci permette di definire quali parti della finestra del nostro programma possano importare dati dall'esterno. Potremmo scegliere un elemento rettangolare opaco, come il seguente:
A questo punto dobbiamo capire cosa fare con i dati importati: se vogliamo importare un'immagine, dobbiamo controllare che ci sia un'immagine; se vogliamo importare dei testi, dobbiamo controllare che ci siano dei testi; se vogliamo importare altri tipi di file, basterà implementare dei controlli sul nome del file o sul percorso.
Quando l'utente prova a trascinare un'icona dentro al nostro programma, attiva il messaggio DragEnter. Questo messaggio ci può essere utile per fare dei controlli e impostare il tipo di azione che vogliamo imporre. Quando l'utente usa il drag end drop abbiamo il simbolo dell'icona che cambia a seconda del tipo di DragAction vogliamo fare: move, copy, link, none.
![]() | ![]() | ![]() | ![]() |
| none | move | copy | link |
Nell'esempio che analizzeremo, cercheremo di importare le immagini, anche più d'una alla volta.
Prima di tutto controlliamo che i dati siano delle immagini nel messaggio DragEnter:
on dragEnter if "image" is in keys(the dragData) or "files" is in keys(the dragData) then set the foregroundcolor of the target to "green" set the dragAction to "copy" else set the dragAction to "none" end ifend dragEnter
on dragLeave set the foreGroundColor of the target to emptyend dragLeave
Abbiamo imposto che se l'insieme dei dati che trasciniamo col mouse contiene delle immagini, allora si prosegue, il quadrato che ha il codice per importare diventerà col bordo verde. Inoltre se il mouse abbandona il quadrato senza rilasciare i dati, il quadrato ritorna nero (messaggio dragLeave).
L'analisi dei dati trasportati avviene controllando dragData, questo speciale contenitore di dati è un array che può contenere varie voci:
- text: se i dati contengono del testo
- html: contiene i testi formattati come html
- rtf: contiene il testo in fromato RTF The styled text being dragged, in the same format as the RTFText
- unicode: testo formato unicode
- image: i dati dell'immagine (JPEG, GIF, BMP)
- files: percorso completo dei file, comprensivi del nome, uno per riga.
- styles: testo con la formattazione Livecoe
- private: un sistema interno che potete impostare voi, valido solo fra applicazioni Livecode.
Ora dobbiamo mettere il codice per far apparire le immagini dentro al programma, quando l'utente rilascia le icone nella zona corretta; ecco il codice:
on dragDrop put "gif,jpg,bmp" into immagini if "files" is in keys(the dragData) then # è una lista di immagini repeat for each line theLine in the dragData["files"] set itemdel to "." put the last item of theLine into testfile set itemdel to "," if lower(testfile) is among the items of immagini then import paint from file theLine end if end repeat else #è un'immagine portata da un programma create image put the dragData["image"] into last image end if set the foreGroundColor of the target to emptyend dragDrop
Come vedete anche qui ho messo un piccolo controllo per vedere se le immagini sono proprio immagini, basandomi semplicemente sull'estensione.
Se tutto è stato fatto a dovere, otterrete una cosa del genere:
Dati in uscita
Per i dati in uscita basta usare il messaggio DragStart, ad esempio per un campo di testo potete mettere:on dragStart set the dragData to the selectedText of meend dragStart







Nessun commento:
Posta un commento