Ondersteuning voor de uitsleepbeweging

Adobe AIR 1.0 of hoger

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 .