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
.
|
|
|