드래그아웃 동작 지원

Adobe AIR 1.0 이상

드래그아웃 동작을 지원하려면 mouseDown 이벤트에 대한 응답으로 클립보드 객체를 만들어 이를 NativeDragManager.doDrag() 메서드로 보내야 합니다. 응용 프로그램은 시작 객체에서 nativeDragComplete 이벤트를 수신하여 사용자가 해당 동작을 완료하거나 중단할 때 어떤 조치를 취할 것인지를 결정합니다.

전송할 데이터 준비

드래그할 데이터 또는 객체를 준비하려면 Clipboard 객체를 만들고 하나 이상의 포맷으로 전송할 정보를 추가합니다. 기본 클립보드 포맷으로 자동 변환될 수 있는 데이터를 전달하기 위해 표준 데이터 형식을 사용하고, 객체를 전달하기 위해 응용 프로그램에서 정의한 형식을 사용할 수 있습니다.

특정 포맷으로 전송할 정보를 변환하는 계산 비용이 높은 경우 변환을 수행하는 핸들러 함수의 이름을 제공할 수 있습니다. 이 함수는 수신 구성 요소 또는 응용 프로그램이 연관된 포맷을 읽는 경우에만 호출됩니다.

클립보드 포맷에 대한 자세한 내용은 클립보드 데이터 형식을 참조하십시오.

다음 예제에서는 비트맵 객체, 기본 비트맵 포맷 및 비트맵이 처음 로드된 파일이 포함된 파일 목록 포맷 등, 여러 가지 포맷의 비트맵이 포함된 클립보드 객체를 만드는 방법을 보여 줍니다.

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

드래그아웃 작업 시작

드래그 작업을 시작하려면 마우스 클릭 이벤트에 대한 응답으로 NativeDragManager.doDrag() 메서드를 호출합니다. doDrag() 메서드는 다음과 같은 매개 변수를 사용하는 정적 메서드입니다.

매개 변수

설명

initiator

드래그가 시작되는 객체로 dragStartdragComplete 이벤트를 전달합니다. 시작자는 대화형 객체여야 합니다.

clipboard

전송될 데이터가 포함된 Clipboard 객체입니다. Clipboard 객체는 끌어 놓기 시퀀스 중에 전달되는 NativeDragEvent 객체에서 참조됩니다.

dragImage

(선택적) 드래그 중에 표시할 BitmapData 객체입니다. 이미지는 alpha 값을 지정할 수 있습니다. (참고: Microsoft Windows는 항상 고정 alpha 페이드를 드래그 이미지에 적용합니다.)

offset

(선택적) 마우스 핫스팟으로부터 드래그 이미지의 오프셋을 지정하는 Point 객체입니다. 마우스 커서의 위와 왼쪽으로 드래그 이미지를 이동하려면 음수 좌표를 사용합니다. 오프셋이 제공되지 않은 경우 드래그 이미지의 왼쪽 위 모서리가 마우스 핫스팟 위치에 배치됩니다.

actionsAllowed

(선택적) 드래그 동작에 유효한 작업(복사, 이동 또는 연결)을 지정하는 NativeDragOptions 객체입니다. 인수를 지정하지 않으면 모든 작업이 허용됩니다. DragOptions 객체는 허용된 작업이 대상 구성 요소의 목적에 부합되는지를 잠재적인 드래그 대상이 검사할 수 있도록 NativeDragEvent 객체에서 참조됩니다. 예를 들어 “trash” 구성 요소는 이동 작업을 허용하는 드래그 동작만을 허용할 수 있습니다.

다음 예제에서는 파일에서 로드된 비트맵 객체에 대해 드래그 작업을 시작하는 방법을 보여 줍니다. 이 예제에서는 이미지를 로드하고 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); 
    } 
} 
}

드래그아웃 전송 완료

사용자가 마우스를 놓음으로써 드래그된 항목을 드롭하면 시작자 객체는 nativeDragComplete 이벤트를 전달합니다. 이벤트 객체의 dropAction 속성을 검사한 다음 적절한 작업을 수행할 수 있습니다. 예를 들어 NativeDragAction.MOVE 작업의 경우 원래 위치에서 소스 항목을 제거할 수 있습니다. 커서가 유효한 드롭 대상 외부에 있을 때 마우스 버튼을 놓으면 드래그 동작이 중단됩니다. 드래그 관리자는 중단된 동작의 dropAction 속성을 NativeDragAction.NONE으로 설정합니다.