feb19.jp

Nobuhiro Takahashi
Designer / Engineer

AIR でファイルがドラッグアンドドロップされたことを NativeDragEvent で検知する

AIR でファイルがドラッグアンドドロップされたことを NativeDragEvent で検知する

最近また AIR が楽しい気がして触っているのですが、 Google で AIR 関連記事を探すと、 AIR beta 版の頃(または Apollo だった頃)の記事が上位にきて、すでに廃止された作法、API を使っていたりするのでちょっと困っています。

自分の中で整理するために、しばらくこのブログで基礎的な AIR の記事をアップしていきます。というか割と AIR 忘れたのでメモです。

まずは基本のドラッグアンドドロップ。
ちなみに Flash CS4 (CS3) で作っているという想定です。

デスクトップとかからファイルをステージ上に配置した MovieClip インスタンス「droparea」にドラッグアンドドロップする方法です。

// MovieClip インスタンスに MouseEvent のように NativeDragEvent を設定
droparea.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, nativeDragEnterHandler);
droparea.addEventListener(NativeDragEvent.NATIVE_DRAG_EXIT, nativeDragExitHandler);
droparea.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, nativeDragDropHandler);
 
// ドラッグしたまま droparea の上に来たとき
function nativeDragEnterHandler(event:NativeDragEvent):void
{
	droparea.alpha = 0.6;
	
	// ドラッグしているアイテムはファイルかどうか
	var clipboard:Clipboard = event.clipboard;
	if (clipboard.hasFormat(ClipboardFormats.FILE_LIST_FORMAT))
	{
		// droparea の上でのドロップを許可する
		NativeDragManager.acceptDragDrop(droparea);
	}
}
 
// ドラッグしたまま droparea から外れたとき
function nativeDragExitHandler(event:NativeDragEvent):void
{
	droparea.alpha = 1.0;
}
 
// ファイルをドロップしたとき
function nativeDragDropHandler(event:NativeDragEvent):void
{
	droparea.alpha = 1.0;
	
	// ドロップしたアイテムを取り出す
	var clipboard:Clipboard = event.clipboard;
	var files:Array = clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
	
	// ドロップしたアイテムのうち、一つめのファイル
	var file:File = files[0];
	trace(file.name);
}

ちなみに複数の File インスタンスを得るには最後の取り出しのところを、

for each (var file:File in files)
{
	trace(file.name);
}

for each は楽ちんですね。

Tweet Share Bookmark

Navigation

prev: AS3 の演算子 ||= について
next: Adobe CS5 ティザーサイトオープン

Recently Entries