Om du vill ha stöd för utdragningsgesten måste du skapa ett Clipboard-objekt som svar på en
mouseDown
-händelse och skicka det till metoden
NativeDragManager.doDrag()
. Programmet kan sedan avlyssna händelsen
nativeDragComplete
för initieringsobjektet för att ta reda på vilken åtgärd som ska utföras när användaren slutför eller avbryter gesten.
Förbereda data för överföring
Du förbereder data eller ett objekt för dragning genom att skapa ett Clipboard-objekt och lägga till den information som ska överföras i ett eller flera format. Du kan använda standarddataformaten för att skicka data, som kan översättas automatiskt till inbyggda urklippsformat, och programdefinierade format för att skicka objekt.
Om det är resurskrävande att konvertera den information som ska överföras till ett visst format kan du ange namnet på en hanterarfunktion som utför konverteringen. Funktionen anropas bara om mottagande komponent eller program läser det tillhörande formatet.
Mer information om urklippsformat finns i
Format för Clipboard-data
.
I följande exempel visas hur du skapar ett Clipboard-objekt som innehåller en bitmapp i flera format: ett Bitmap-objekt, ett inbyggt bitmappsformat och ett fillisteformat som innehåller filen som bitmappen ursprungligen lästes in från:
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;
}
Starta en utdragningsåtgärd
Du startar en dragningsåtgärd genom att anropa metoden
NativeDragManager.doDrag()
som svar på en mouseDown-händelse. Metoden
doDrag()
är en statisk metod som använder följande parametrar:
Parameter
|
Beskrivning
|
initiator
|
Objektet som dragningen härstammar från, och som skickar händelserna
dragStart
och
dragComplete
. Initieraren måste vara ett interaktivt objekt.
|
clipboard
|
Clipboard-objektet innehåller data som ska överföras. Clipboard-objektet refereras i NativeDragEvent-objekten som skickas under dra och släpp-sekvensen.
|
dragImage
|
(Valfritt) Ett BitmapData-objekt som ska visas under dragningen. Bilden kan ange ett
alfa
-värde. (Obs! Microsoft Windows använder alltid en fast alfatoning när bilder dras.)
|
offset
|
(Valfritt) Ett Point-objekt som anger förskjutningen för dragningsbilden från musens aktiva punkt. Använd negativa koordinater om du vill flytta bilden upp eller åt vänster i förhållande till musmarkören. Om ingen förskjutning anges, placeras dragningsbildens övre, vänstra hörn vid musens aktiva punkt.
|
actionsAllowed
|
(Valfritt) Ett NativeDragOptions-objekt som anger vilka åtgärder (kopiera, flytta eller länka) som kan användas för dragningsåtgärden. Om inga argument anges tillåts alla åtgärder. DragOptions-objektet refereras i objektet NativeDragEvent, vilket gör det möjligt för ett eventuellt dragmål att kontrollera att tillåtna åtgärder är kompatibla med målkomponentens syfte. En ”papperskorgskomponent” kanske bara accepterar dragningsgester som tillåter åtgärden flytta.
|
I följande exempel visas hur du startar en dragningsåtgärd för ett bitmappsobjekt som har lästs in från en fil. Exemplet läser in en bild och, vid en
mouseDown
-händelse, startar en dragningsåtgärd.
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);
}
}
}
Slutföra utdragningsöverföringen
När en användare släpper det dragna objektet genom att släppa upp musknappen skickar initieringsobjektet en
nativeDragComplete
-händelse. Du kan kontrollera egenskapen
dropAction
för händelseobjektet och sedan vidta rätt åtgärd. Om åtgärden till exempel är
NativeDragAction.MOVE
kan du ta bort källobjektet från dess ursprungliga plats. Användaren kan avbryta en dragningsgest genom att släppa upp musknappen medan markören finns utanför ett möjligt släppmål. Draghanteraren ställer in egenskapen
dropAction
för en avbruten gest på
NativeDragAction.NONE
.
|
|
|