Per supportare il movimento di trascinamento verso esterno, è necessario creare un oggetto Clipboard in risposta a un evento
mouseDown
e inviarlo al metodo
NativeDragManager.doDrag()
. L'applicazione è in grado quindi di intercettare l'evento
nativeDragComplete
sull'oggetto promotore per determinare quale azione intraprendere quando l'utente completa o sospende il movimento.
Preparazione di dati per trasferimento
Per preparare dati o un oggetto da trascinare, creare un oggetto Clipboard e aggiungere le informazioni da trasferire in uno o più formati. È possibile utilizzare i formati di dati standard in modo da passare dati che possano essere trasferiti automaticamente a formati di appunti nativi e a formati definiti dall'applicazione per passare oggetti.
Se richiede notevoli risorse di calcolo per convertire le informazioni da trasferire in un formato particolare, è possibile fornire il nome della funzione di gestore per eseguire la conversione. La funzione viene chiamata se, e solo se, il componente o l'applicazione ricevente legge il formato associato.
Per ulteriori informazioni sui formati degli appunti, vedete
Formati di dati degli Appunti
.
L'esempio seguente mostra come creare un oggetto Clipboard contenente un bitmap in numerosi formati: un oggetto Bitmap, un formato bitmap nativo e un formato di elenco file contenente il file da cui è stato caricato originariamente il bitmap:
import flash.desktop.Clipboard;
import flash.display.Bitmap;
import flash.filesystem.File;
public function createClipboard(image:Bitmap, sourceFile:File):Clipboard{
var transfer:Clipboard = new Clipboard();
transfer.setData("CUSTOM_BITMAP", image, true); //Flash object by value and by reference
transfer.setData(ClipboardFormats.BITMAP_FORMAT, image.bitmapData, false);
transfer.setData(ClipboardFormats.FILE_LIST_FORMAT, new Array(sourceFile), false);
return transfer;
}
Avvio dell'operazione di trascinamento verso esterno
Per avviare un'operazione di trascinamento, chiamate il metodo
NativeDragManager.doDrag()
in risposta a un evento di pressione mouse. Il metodo
doDrag()
è un metodo statico che assume i seguenti parametri:
Parametro
|
Descrizione
|
initiator
|
L'oggetto da cui ha origine il trascinamento e che invia gli eventi
dragStart
e
dragComplete
. Il promotore deve essere un oggetto interattivo.
|
clipboard
|
L'oggetto Clipboard contenente i dati da trasferire. Si fa riferimento all'oggetto Clipboard negli oggetti NativeDragEvent inviati durante la sequenza di trascinamento.
|
dragImage
|
(Opzionale) Un oggetto BitmapData per la visualizzazione durante il trascinamento. L'immagine può specificare un valore
alpha
. (Nota: Microsoft Windows applica sempre una dissolvenza alpha fissa per il trascinamento delle immagini).
|
offset
|
(Opzionale) Un oggetto Point che indica l'offset dell'immagine trascinata dal punto attivo del mouse. Utilizzate coordinate negative per spostare l'immagine di trascinamento verso l'alto e a sinistra in base al cursore del mouse. Se non viene fornito alcun offset, l'angolo superiore sinistro dell'immagine è posizionato nel punto attivo del mouse.
|
actionsAllowed
|
(Opzionale) Un oggetto NativeDragOptions che indica quali azioni (copia, spostamento o collegamento) sono valide per l'operazione di trascinamento. Se non viene fornito alcun argomento, è possibile eseguire tutte le azioni. Si fa riferimento all'oggetto DragOptions in oggetti NativeDragEvent al fine di abilitare una potenziale destinazione di trascinamento per controllare che le azioni consentite siano compatibili con lo scopo del componente di destinazione. Ad esempio, un componente "cestino" potrebbe accettare solo i movimenti di trascinamento che consentono l'azione di spostamento.
|
L'esempio seguente mostra come avviare un'operazione di trascinamento per un oggetto bitmap a partire da un file: L'esempio carica un'immagine e, su un evento
mouseDown
, avvia l'operazione di trascinamento.
package
{
import flash.desktop.NativeDragManager;
import mx.core.UIComponent;
import flash.display.Sprite;
import flash.display.Loader;
import flash.system.LoaderContext;
import flash.net.URLRequest;
import flash.geom.Point;
import flash.desktop.Clipboard;
import flash.display.Bitmap;
import flash.filesystem.File;
import flash.events.Event;
import flash.events.MouseEvent;
public class DragOutExample extends UIComponent Sprite {
protected var fileURL:String = "app:/image.jpg";
protected var display:Bitmap;
private function init():void {
loadImage();
}
private function onMouseDown(event:MouseEvent):void {
var bitmapFile:File = new File(fileURL);
var transferObject:Clipboard = createClipboard(display, bitmapFile);
NativeDragManager.doDrag(this,
transferObject,
display.bitmapData,
new Point(-mouseX,-mouseY));
}
public function createClipboard(image:Bitmap, sourceFile:File):Clipboard {
var transfer:Clipboard = new Clipboard();
transfer.setData("bitmap",
image,
true);
// ActionScript 3 Bitmap object by value and by reference
transfer.setData(ClipboardFormats.BITMAP_FORMAT,
image.bitmapData,
false);
// Standard BitmapData format
transfer.setData(ClipboardFormats.FILE_LIST_FORMAT,
new Array(sourceFile),
false);
// Standard file list format
return transfer;
}
private function loadImage():void {
var url:URLRequest = new URLRequest(fileURL);
var loader:Loader = new Loader();
loader.load(url,new LoaderContext());
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
}
private function onLoadComplete(event:Event):void {
display = event.target.loader.content;
var flexWrapper:UIComponent = new UIComponent();
flexWrapper.addChild(event.target.loader.content);
addChild(flexWrapper);
flexWrapper.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
}
}
Completamento di un trasferimento di trascinamento verso esterno
Quando un utente rilascia l'elemento trascinato rilasciando il mouse, l'oggetto promotore invia un evento
nativeDragComplete
. È possibile verificare la proprietà
dropAction
dell'oggetto evento e intraprendere l'azione appropriata. Ad esempio, se l'azione è
NativeDragAction.MOVE
, è possibile rimuovere l'elemento originario dalla posizione originaria. L'utente può sospendere un movimento di trascinamento rilasciando il pulsante del mouse mentre il cursore si trova all'esterno di un'idonea destinazione di rilascio. Il gestore di trascinamento imposta la proprietà
dropAction
di un movimento sospeso per
NativeDragAction.NONE
.
|
|
|