Prise en charge du mouvement de glissement vers l’extérieur

Adobe AIR 1.0 et les versions ultérieures

Pour prendre en charge le mouvement de glissement vers l’extérieur, vous devez créer un objet Clipboard en réponse à un événement mouseDown et l’envoyer à la méthode NativeDragManager.doDrag() . Votre application peut alors écouter l’événement nativeDragComplete sur l’objet initiateur pour déterminer la marche à suivre lorsque l’utilisateur termine ou abandonne le mouvement.

Préparation des données à transférer

Pour préparer les données ou un objet à faire glisser, créez un objet Clipboard et ajoutez les informations à transférer dans un ou plusieurs formats. Vous disposez des formats de données standard pour transmettre des données susceptibles d’être converties automatiquement en formats Presse-papiers natifs, ainsi que des formats définis par l’application pour transmettre des objets.

Si la conversion d’informations à transférer dans un format déterminé mobilise un volume élevé de ressources de calcul, vous pouvez indiquer le nom d’une fonction de gestionnaire qui exécutera la conversion. La fonction est appelée sous réserve que le composant ou l’application qui reçoit les données lise le format correspondant.

Pour plus d’informations sur les formats du Presse-papiers, voir Formats de données Clipboard .

L’exemple suivant illustre la création d’un objet Clipboard qui comporte une image bitmap en plusieurs formats : un objet Bitmap, un format d’image bitmap natif et un format de liste de fichiers contenant le fichier source de l’image bitmap :

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

Démarrage d’une opération de glissement vers l’extérieur

Pour démarrer une opération de glissement, appelez la méthode NativeDragManager.doDrag() en réponse à un événement mouse down. La méthode doDrag() est statique et gère les paramètres suivants :

Paramètre

Description

initiator

Objet où débute le glissement, qui distribue les événements dragStart et dragComplete . Il doit impérativement être interactif.

clipboard

Objet Clipboard contenant les données à transférer. L’objet Clipboard est référencé dans l’objet NativeDragEvent distribué lors de la séquence glisser-déposer.

dragImage

(Facultatif) Objet BitmapData à afficher lors du glissement. L’image peut stipuler une valeur alpha . (Remarque : Microsoft Windows applique systématiquement un fondu alpha fixe aux images glissées.)

offset

(Facultatif) Objet Point qui stipule le décalage de l’image glissée par rapport à la zone sensible de la souris. Utilisez des coordonnées négatives pour déplacer l’image vers le haut et la gauche par rapport au curseur de la souris. Si vous ne définissez pas de décalage, l’angle gauche de l’image glissée est placé sur la zone sensible de la souris.

actionsAllowed

(Facultatif) Objet NativeDragOptions qui indique les actions (copie, déplacement ou liaison) gérées par l’opération de glissement. Si vous n’indiquez aucun argument, toutes les actions sont autorisées. L’objet DragOptions est référencé dans les objets NativeDragEvent pour permettre à la cible potentielle d’un glissement de vérifier si les actions autorisées sont compatibles avec l’objectif du composant cible. Par exemple, un composant « trash » est susceptible de n’accepter que les mouvements de glissement qui autorisent l’action de déplacement.

L’exemple suivant illustre le démarrage d’une opération de glissement d’un objet bitmap chargé à partir d’un fichier. L’exemple charge une image et, lors d’un événement mouseDown , démarre l’opération de glissement.

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

Achèvement d’un transfert par glissement vers l’extérieur

Lorsqu’un utilisateur dépose l’élément glissé en relâchant la souris, l’objet initiateur distribue un événement nativeDragComplete . Vous pouvez vérifier la propriété dropAction de l’objet événement, puis exécuter l’action appropriée. Par exemple, si l’action correspond à NativeDragAction.MOVE, , vous pourriez supprimer l’élément source de son emplacement d’origine. L’utilisateur peut abandonner un mouvement de glissement en relâchant le bouton de la souris lorsque le curseur figure en dehors d’une cible de dépôt appropriée. Le gestionnaire de glissement définit la propriété dropAction d’un mouvement abandonné sur NativeDragAction.NONE .