Impossibile ottenere i dati di file dagli appunti utilizzando Flex
-
23-08-2019 - |
Domanda
Data: un flex TileList con il seguente evento:
<mx:nativeDragDrop>
<![CDATA[
if(event.clipboard.hasFormat(ClipboardFormats.FILE_LIST_FORMAT)) {
var files:Array = event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
for each(var file:File in files)
{
// file.data is null here!
}
this.listData.refresh();
}
]]>
</mx:nativeDragDrop>
Sto cercando di creare un elenco di miniature da file JPEG che mi trascina in questo TileList. Image.source può usare l'url per visualizzare l'immagine, ma ho bisogno di scalare l'immagine verso il basso prima (hi foto rez) ho già la parte di scala fatto salvo che ho bisogno BitmapData dal file e ha nullo per file.data.
Inoltre, ho provato questo:
var x:URLRequest = new URLRequest(value.file.url); // this is a local file (e.g. file:///C:/somefile.jpg)
var b:Bitmap = new Bitmap(x.data as BitmapData);
dati è anche nulli! Così frustrante. Qualsiasi aiuto sarebbe apprezzato.
Soluzione
Presumo che ciò è una parte di un'applicazione AIR. (Accesso al clipboard da una pianura Flex app non è possibile.)
Non ho esperienza con l'aria, ma il vostro secondo blocco di codice è chiaramente sbagliato. Un esempio URLRequest
non fa nulla per sé, non è che un oggetto statico memorizzare i dettagli della richiesta. Al fine di recuperare i dati da tale URL, è necessario creare un Loader
, e passa la richiesta a quest'ultima loader in questo modo:
var req:URLRequest = new URLRequest(value.file.url); // this is a local file (e.g. file:///C:/somefile.jpg)
var ldr:Loader = new Loader();
ldr.addEventListener(Event.COMPLETE, function(event:Event):void {
var b:Bitmap = event.target.content as Bitmap;
});
ldr.load(req);
Naturalmente, dovreste compilare il gestore Event.COMPLETE
. Si noti che la classe Loader
può essere utilizzato per caricare SWF e di immagine degli oggetti, per tutti tutto il resto, dovreste usare URLLoader
e analizzare i dati da soli.
Per quanto riguarda il blocco nativeDragDrop
, ecco un frammento della :
In genere un gestore per il nativeDragEnter o nativeDragOver evento valuta essendo i dati trascinato, insieme alle azioni di trascinamento consentito, per determinare se un oggetto interattivo può accettare una goccia. Per specificare che un oggetto interattivo è un obiettivo idoneo, l'evento conduttore deve chiamare il NativeDragManager.acceptDrop () funzione, passando un riferimento a l'oggetto. Se l'utente rilascia il pulsante del mouse sulla designato oggetto, l'oggetto diventa goccia bersaglio e invia il evento nativeDragDrop.
Stai chiamando NativeDragManager.acceptDrop()
correttamente?