ホーム >> 左脳ActionScript3 >> フリーの AIR 開発環境 >> AIRプログラミング >> ドラッグ&ドロップ >> アプリケーションへのドロップ
アプリケーションへのドロップ
まずは、アプリへドラッグされてきた物の判別をするコードを書いてみましょう。
ドロップを受け付ける Sprite ベースのクラスを作成します。

drop.as:ドロップを受け付けるSpriteクラス。

package  
{
    import flash.desktop.Clipboard;
    import flash.display.Sprite;
    import flash.events.NativeDragEvent;
    /**
     * ...
     * @author 
     */
    public class drop extends Sprite
    {
        public function drop() 
        {
            graphics.beginFill(0xf0f0c0);
            graphics.moveTo(0, 0);
            graphics.lineTo(100, 0);
            graphics.lineTo(100, 100);
            graphics.lineTo(0, 100);
            graphics.endFill();
            //
            addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, onDrag);
        }
        private function onDrag(e:NativeDragEvent):void 
        {
            var c:Clipboard = e.clipboard;
            trace(c.formats);
        }
    }
}
addEventListener で、NativeDragEvent.NATIVE_DRAG_ENTER を監視し、ドラッグされ最初に領域内に進入してきた瞬間に 関数onDrag を呼び出す指定をしています。

これで、矩形へドラッグされてきた物の形式を知る事が出来るようになりました。 ドロップしなくとも、ドラッグだけで形式を知る事ができます。


データ形式

ブラウザから、リンクやページ内容の一部、エクスプローラーからファイルなど、色々ドラッグしてみましょう。
通常の操作ならば、大体以下の4つのうちのどれかがトレースされる事になるハズです。
air:html,air:text
air:url,air:text
air:text
air:file list

カンマで区切られた文字列があります。これは可能なフォーマットが複数ある事を示しています。
HTMLやURLは基本的に文字列なので、データとして取得できる形が複数列挙される事になります。

AIR では、これらの文字列が flash.desktop.ClipboardFormats で定義されていて、対応は以下の通りです。→詳細
HTML型air:htmlClipboardFormats.HTML_FORMAT
URL型air:htmlClipboardFormats.URL_FORMAT
TEXT型air:htmlClipboardFormats.TEXT_FORMAT
画像air:bitmapClipboardFormats.FILE_LIST_FORMAT
ファイルリストair:file listClipboardFormats.BITMAP_FORMAT


データ判別

ここまでで、ドラッグされて来たデータ形式を知る事が出来るのようになりました。 しかし、複数あるかもしれないフォーマット配列の中から該当のデータ形式を探すのは難しくありませんが面倒ですね。
この記述を簡単にするのが Clipboard.hasFormat で、指定した形式が含まれていれば真を返すという便利なものです。

これを用いて、関数onDrag を書き換えてみると、以下のようになります。

private function onDrag(e:NativeDragEvent):void 
{
    var c:Clipboard = e.clipboard;
    if (    c.hasFormat(ClipboardFormats.TEXT_FORMAT)   )
    {
        trace("text!");
    }
    else if (   c.hasFormat(ClipboardFormats.FILE_LIST_FORMAT)  )
    {
        trace("File!");
    }
    else
    {
        trace("unknown!");
    }
}
テキスト形式を含んでいるかファイルリスト形式の場合は、それぞれのメッセージトレース出来る様になりました。

ここで「HTML形式やURL形式を判別」しない理由は、ドロップされた時にデータを判別する機会があるので、この段階でする必要が無いだけです。しかし、データ受け入れ前にデータを判別できるので、データによって表示を変えるなどの工夫をする場合は、ここで判別する必要があります。
また、そのようなコードを書く場合は、複数の形式があるデータの判定を先に記述(TEXT_FORMATの判定を後に)しないといけなせん。



>> ドロップ受け入れ
ホーム >> 左脳ActionScript3 >> フリーの AIR 開発環境 >> AIRプログラミング >> ドラッグ&ドロップ >> アプリケーションへのドロップ