Stöd för utdragningsgesten

Adobe AIR 1.0 och senare

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.