Unterstützung des Herausziehens

Adobe AIR 1.0 und höher

Damit das „Herausziehen“ unterstützt wird, müssen Sie als Reaktion auf ein mouseDown -Ereignis ein Clipboard-Objekt erstellen und es an die Methode NativeDragManager.doDrag() senden. Die Anwendung kann dann auf das nativeDragComplete -Ereignis des initialisierenden Objekts warten, um zu bestimmen, welche Aktion auszuführen ist, wenn der Benutzer die Bewegung abschließt oder auch abbricht.

Vorbereiten der Daten für die Übertragung

Um Daten oder ein Objekt für eine Ziehoperation vorzubereiten, erstellen Sie ein Clipboard-Objekt und fügen die zu übertragenden Informationen in einem oder mehreren Formaten hinzu. Sie können die Standarddatenformate verwenden, um Daten weiterzuleiten, die dann automatisch in native Clipboard-Formate oder von der Anwendung definierte Formate übersetzt werden können.

Wenn die Konvertierung der zu übertragenden Informationen in ein bestimmtes Format zu rechenintensiv ist, können Sie den Namen einer Prozedurfunktion angeben, die die Konvertierung ausführt. Die Funktion wird nur dann aufgerufen, wenn das verbundene Format von der empfangenden Komponente oder Anwendung gelesen wird.

Weitere Informationen zu Formaten, die in der Zwischenablage verwendet werden können, finden Sie unter Datenformate in der Zwischenablage .

Das folgende Beispiel illustriert die Erstellung eines Clipboard-Objekts, das eine Bitmap in mehreren Formaten enthält: ein Bitmap-Objekt, ein natives Bitmap-Format und ein Dateilistenformat mit der Datei, aus der die Bitmap ursprünglich geladen wurde:

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; 
}

Starten einer Herausziehoperation

Um eine Ziehoperation zu starten, rufen Sie als Reaktion auf ein mouseDown-Ereignis die Methode NativeDragManager.doDrag() auf. Die doDrag() -Methode ist eine statische Methode, die die folgenden Parameter akzeptiert:

Parameter

Beschreibung

initiator

Das Objekt, bei dem die Ziehbewegung anfing, und das die Ereignisse dragStart und dragComplete auslöst. Der Initiator muss ein interaktives Objekt sein.

clipboard

Das Clipboard-Objekt mit den zu übertragenden Daten. In den NativeDragEvent-Objekten, die während der Drag & Drop-Sequenz ausgelöst wurden, wird auf das Clipboard-Objekt verwiesen.

dragImage

(Optional) Ein BitmapData-Objekt, das beim Ziehen angezeigt wird. Das Bild kann einen alpha -Wert angeben. (Hinweis: Unter Microsoft Windows wird den Ziehbildern immer ein fester Alphawert für die Abblendung zugewiesen).

offset

(Optional) Ein Point-Objekt, das den Versatz des Ziehbilds vom Maus-Hotspot angibt. Verwenden Sie negative Koordinaten, um das Ziehbild in Relation zum Mauscursor nach oben und nach links zu versetzen. Wenn kein Versatz angegeben ist, wird die obere linke Ecke des Ziehbilds am Maus-Hotspot positioniert.

actionsAllowed

(Optional) Ein NativeDragOptions-Objekt, das festlegt, welche Aktionen (Kopieren, Verschieben oder Verknüpfen) für die Ziehoperation zulässig sind. Wenn kein Argument angegeben wird, sind alle Aktionen erlaubt. In den NativeDragEvent-Objekten wird auf das DragOptions-Objekt verwiesen, damit ein potentielles Ablageziel überprüfen kann, ob die zulässigen Aktionen mit dem Zweck der Zielkomponente kompatibel sind. Eine Papierkorbkomponente etwa wird wohl nur Ziehbewegungen akzeptieren, die ein Verschieben erlauben.

Das folgende Beispiel zeigt, wie Sie eine Ziehoperation für ein aus einer Datei geladenes Bitmap-Objekt starten: Das Beispiel lädt ein Bild und startet die Ziehoperation aufgrund eines mouseDown -Ereignisses.

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); 
    } 
} 
}

Abschließen einer Herausziehübertragung

Wenn ein Benutzer das gezogene Element ablegt, indem er die Maustaste loslässt, löst das Initiatorobjekt ein nativeDragComplete -Ereignis aus. Sie können die dropAction -Eigenschaft des Ereignisobjekts überprüfen und dann die entsprechende Aktion durchführen. Wenn die Aktion zum Beispiel NativeDragAction.MOVE ist, könnten Sie die Quelle von ihrer ursprünglichen Position entfernen. Der Benutzer kann eine Ziehbewegung abbrechen, indem er die Maustaste loslässt, solange sich der Cursor außerhalb eines zulässigen Ablageziels befindet. Der Ziehmanager setzt die dropAction -Eigenschaft einer abgebrochenen Bewegung auf NativeDragAction.NONE .