- 2007-07-15 (Sun) 5:18
- AIR
まずはサンプル。
package{
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.events.NativeDragEvent;
import flash.desktop.DragManager;
public class Main extends Sprite{
private var drop_target:Sprite = new Sprite();
public function Main(){
drop_target.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, DaDEnterHandler);
drop_target.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, DaDDropHandler);
addChild(drop_target);
changeColor(0x000000);
}
public function DaDEnterHandler(nde:NativeDragEvent):void{
DragManager.acceptDragDrop(nde.target as DisplayObject);
changeColor(0x888888);
}
public function DaDDropHandler(nde:NativeDragEvent):void{
changeColor(0xFFFFFF);
}
private function changeColor(color:uint):void{
drop_target.graphics.beginFill(color);
drop_target.graphics.drawRect(0, 0, 100, 100);
drop_target.graphics.endFill();
}
}
}
こんな感じ。
まずは、イベントハンドラ。
drop_target.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, DaDEnterHandler);
drop_target.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, DaDDropHandler);
これで、例えばデスクトップとかAIRアプリ外から、AIRアプリの中にドラッグされてきたものが、
DisplayObject上に乗ると、NATIVE_DRAG_ENTERイベントを受け取ることができるようになり、
ドロップされると、NATIVE_DRAG_DROPイベントを受け取ることができるようになる。
でもこのままだと、NATIVE_DRAG_DROPが発行されないっぽい。
ドロップ時にNATIVE_DRAG_DROPイベントを発行するには、
DragManager.acceptDragDrop(nde.target as DisplayObject);
これで指定してやる。
上のサンプルだったら、
DragManager.acceptDragDrop(drop_target);
でもOK。これで、ドロップのイベントもちゃんと発行される。
ちなみに、NativeDragEventはデフォルトではバブリングされない。
なので、acceptDragDropで指定したところ以外にはイベントは届かない。
それからDragManagerは同名のクラスがあって、
flash.desktop.DragManager
と
mx.managers.DragManager
だけど、AIRアプリの中からデスクトップへD&Dとか、
ブラウザからURLをAIRアプリにD&Dとかのときには、
flash.desktop.DragManagerを使う。
- Newer: [AIR]AIRアプリとCookie
- Older: [AIR]ActionScriptだけでAIRアプリ
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://www.jinten.net/blog/archives/9/trackback
- Listed below are links to weblogs that reference
- [Tips][AIR]AIRアプリの外から中へのドラッグ&ドロップ from Jinten Blog