Voor ondersteuning van de uitsleepbeweging moet u een Clipboard-object maken als reactie op de gebeurtenis
mouseDown
en deze naar de methode
NativeDragManager.doDrag()
verzenden. Uw toepassing kan vervolgens naar de gebeurtenis
nativeDragComplete
van het initiatorobject luisteren om te bepalen welke actie moet worden uitgevoerd wanneer de gebruiker de beweging voltooit of annuleert.
Gegevens voorbereiden voor overdracht
Om gegevens of een object voor te bereiden op slepen, maakt u een Clipboard-object en voegt u de gegevens die moeten worden overgebracht toe in een of meer indelingen. U kunt de standaardgegevensindelingen gebruiken voor het doorgeven van gegevens die automatisch kunnen worden omgezet in eigen klembordindelingen en toepassingsspecifieke indelingen gebruiken voor het doorgeven van objecten.
Als het een grote belasting voor de processor is om de gegevens die moeten worden overgebracht, te converteren naar een bepaalde indeling, kunt u de naam opgeven van een handlerfunctie die de conversie uitvoert. Deze functie wordt alleen opgeroepen als de ontvangende component of toepassing de bijbehorende indeling leest.
Zie
Klembordgegevensindelingen
voor meer informatie over de indelingen voor klembordgegevens.
In het volgende voorbeeld wordt een Clipboard-object gemaakt dat een bitmap in diverse indelingen bevat: een bitmapobject, een native bitmapindeling en een bestandenlijstindeling die het bestand bevat waaruit de bitmap oorspronkelijk is geladen:
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;
}
Uitsleepbewerkingen starten
Om een sleepbewerking te starten, roept u de methode
NativeDragManager.doDrag()
op als reactie op het indrukken van de muis. De methode
doDrag()
is een statische methode met de volgende parameters:
Parameter
|
Beschrijving
|
initiator
|
Het object van waaruit wordt gesleept en dat de gebeurtenissen
dragStart
en
dragComplete
verzendt. De initiator moet een interactief object zijn.
|
klembord
|
Het Clipboard-object dat de gegevens bevat die moeten worden overgedragen. Naar het Clipboard-object wordt verwezen in de NativeDragEvent-objecten die worden verzonden tijdens het slepen en neerzetten.
|
dragImage
|
(Optioneel) Een BitmapData-object dat tijdens het slepen wordt weergegeven. De afbeelding kan een
alfa
-waarde opgeven. (Opmerking: Microsoft Windows past altijd een vaste alfa-vervaging toe bij het verslepen van afbeeldingen.)
|
offset
|
(Optioneel) Een Point-object waarmee de afstand van de sleepafbeelding vanaf de hotspot van de muis wordt opgegeven. Gebruik negatieve coördinaten om de sleepafbeelding naar boven en naar links ten opzichte van de muiscursor te verplaatsen. Als er geen afstand is opgegeven, wordt de linkerbovenhoek van de sleepafbeelding op de hotspot van de muis geplaatst.
|
actionsAllowed
|
(Optioneel) Een NativeDragOptions-object waarmee de acties (kopiëren, verplaatsen of koppelen) worden opgegeven die geldig zijn voor de sleepbewerking. Als er geen argument is opgegeven, zijn alle acties toegestaan. In NativeDragEvent-objecten wordt naar het DragOptions-object verwezen om het mogelijk te maken dat een sleepdoel controleert of de toegestane acties compatibel zijn met de functie van de doelcomponent. Een “prullenbak”-component accepteert bijvoorbeeld alleen sleepbewegingen voor een verplaatsingsactie.
|
In het volgende voorbeeld ziet u hoe u een sleepbewerking start voor een bitmapobject dat uit een bestand is geladen. In het voorbeeld wordt een afbeelding geladen en wordt de sleepbewerking gestart bij de gebeurtenis
mouseDown
.
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);
}
}
}
Uitsleepoverdrachten voltooien
Wanneer een gebruiker het gesleepte item neerzet door de muisknop los te laten, verzendt het initiatorobject de gebeurtenis
nativeDragComplete
. U kunt de eigenschap
dropAction
van het gebeurtenisobject controleren en vervolgens de juiste actie uitvoeren. Als de actie bijvoorbeeld
NativeDragAction.MOVE,
is, kunt u het bronitem op de bronlocatie verwijderen. De gebruiker kan een sleepbeweging annuleren door de muisknop los te laten terwijl de cursor zich buiten een geschikt neerzetdoel bevindt. De sleepbeheerder stelt de eigenschap
dropAction
voor een geannuleerde beweging in op
NativeDragAction.NONE
.
|
|
|