【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷


Apollo改めAIRプログラミング入門(1)

AIRアプリはドラッグ&ドロップでこんなことまで!

クラスメソッド
横田聡
2007/7/12


リニューアル第1回目はApolloがAIRになってからの新機能として、直感的にファイル/データをドラッグ&ドロップする方法を紹介

 Adobe AIRベータ版がリリースされた!

- PR -

 2007年6月11日、Adobe AIR(Adobe Integrated Runtime)の公開ベータ版がAdobe Labsのサイトよりリリースされました。いままでApolloというコードネームでしたが、今後AIRという名前になります。

編集部注:今回より、連載「Apolloプログラミング入門」は本連載「Apollo改めAIRプログラミング入門」にリニューアルしました。この連載をより深く理解するためには、連載「Apolloプログラミング入門」も併せてご覧ください。

 連載中に新しいバージョンが出ましたので、AIRベータ版の新機能をご紹介しようと思います。今回は、ドラッグ&ドロップに注目して2つのサンプルを作成します。

 デスクトップとドラッグ&ドロップでイロイロやりとりする

 一般的なWebアプリケーションでは、Webブラウザ内からデスクトップにファイルをドラック&ドロップしたり、その逆にデスクトップ上のファイルをブラウザ上のアプリにドラッグ&ドロップしたりすることはできませんでした。しかし、AIRを用いることによって、このような動きが実現できます。

 ちなみに、Flexアプリでは、コンポーネント間のドラッグ&ドロップの制御が簡単にできます。AIRでも、Flexと同じようにドラッグ&ドロップの制御ができるようになりました。

ドラッグ&ドロップできるファイル/データの種類

 AIRでは、ビットマップデータ、ファイル、テキスト、URL文字列、シリアライズされたオブジェクト、オブジェクトの参照などをドラッグ&ドロップするデータとして扱えます。

 例えば、AIRアプリ内に表示してあるチャートをワードに張り付けたり、AIRアプリ内のテキストをエクセルに張り付けたり、デスクトップ上のエクセルをAIRアプリ内のデータグリッドに張り付けることができます。

 画像ファイルをAIRアプリにドラッグインしてみる

 下記のサンプルは、デスクトップ上の画像をAIRアプリ内にドロップする例です。

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
                        layout="vertical"
                        applicationComplete="initApp()" >
    <mx:Script>
    <![CDATA[
        import mx.controls.Image;
        import mx.controls.Label;
        import flash.filesystem.File;
        import flash.desktop.TransferableFormats;
        import flash.desktop.TransferableData;
        import flash.desktop.DragManager;

        private function initApp():void{
            hello.addEventListener(
                NativeDragEvent.NATIVE_DRAG_ENTER, onDragIn);
            hello.addEventListener(
                NativeDragEvent.NATIVE_DRAG_DROP, onDrop);
        }
        private function onDrop(event:NativeDragEvent):void{
            trace("Drop");
            var dropfiles:Array = event.transferable.
            dataForFormat(
                TransferableFormats.FILE_LIST_FORMAT) as Array;
            for each (var file:File in dropfiles){
                if(file.extension == "png"){
                    var i:Image = new Image();
                    i.source = file.nativePath;
                    this.addChild(i);
                }
            }
        }
        private function onDragIn(event:NativeDragEvent):void{
            trace("DragIn");
            DragManager.acceptDragDrop(hello);
        }
    ]]>
    </mx:Script>
    <mx:Label id="hello" text="Drop" fontSize="25"/>
</mx:WindowedApplication>

AIRベータ版の変更点の代表例

 AIRベータ版からは、ルートタグがWindowedApplicationになっています。また、FlexのApplicationタグと同じように、画面の初期化後の処理として、initAppメソッドが呼ばれています。

<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
                        layout="vertical"
                        applicationComplete="initApp()" >

 このLabelコンポーネントにデスクトップから画像ファイルをドロップします。

    <mx:Label id="hello" text="Drop" fontSize="25"/>

 initAppメソッドでは、helloとID名の付いたLabelコンポーネントにイベント登録をしています。NativeDragEventクラスは、デスクトップアプリとの間でドラッグ&ドロップが起こったときに発生するイベントです。ドラッグ開始時とドロップ時にイベントが発生し、それぞれonDragInメソッドとonDropメソッドが呼ばれています。

            hello.addEventListener(
                NativeDragEvent.NATIVE_DRAG_ENTER, onDragIn);
            hello.addEventListener(
                NativeDragEvent.NATIVE_DRAG_DROP, onDrop);

デスクトップアプリとのドラッグ&ドロップによって発生するイベントの種類

 デスクトップアプリとの間でのドラッグ&ドロップによって発生するイベントの種類は以下のようなものがあります。

表1 NativeDragEventクラスのプロパティ
プロパティ名 説明
NATIVE_DRAG_START ドラッグの開始時に呼ばれる
NATIVE_DRAG_COMPLETE ドラッグの終了時に呼ばれる
NATIVE_DRAG_ENTER 対象物の境界内に入ると呼ばれる
NATIVE_DRAG_DROP 対象物にドロップすると呼ばれる
NATIVE_DRAG_EXIT 対象物の境界外に出ると呼ばれる
NATIVE_DRAG_OVER 対象物に境界内で常に呼ばれる

ドロップできる? できない?

 デスクトップ上のファイルをLabelであるhello上にドラッグすると、ドラッグ中に表示されるアイコンに青い表示が現れます。これは、ドロップ可能であること表しています。あるオブジェクト上でドロップ可能にするには、DragManagerクラスのacceptDragDropメソッドを用います。

            DragManager.acceptDragDrop(hello);

 以下は、デスクトップ上のファイルをドラッグしている途中を表しています。ドロップできる場所とできない場所が移動中のアイコンで分かります。

画面1 ドロップできない場所(赤いNGアイコン付き)
画面1 ドロップできない場所(赤いNGアイコン付き)

画面2 ドロップできる場所を通過中(青いOKアイコン付き)
画面2 ドロップできる場所を通過中(青いOKアイコン付き)

  1/3

 INDEX
Apollo改めAIRプログラミング入門(1)
Page1
Adobe AIRベータ版がリリースされた!
デスクトップとドラッグ&ドロップでイロイロやりとりする
画像ファイルをAIRアプリにドラッグインしてみる
  Page2
ラベルをテキストファイルとしてドラッグアウトしてみる
  Page3
エクセルファイルとしてもドラッグアウトしてみる
AIRはエンタープライズ業務でも役立つ!


ホワイトペーパーTechTargetジャパン

リッチクライアント & 帳票 フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
@IT Special PR:Adobe AIR/Flex/Flash−@IT研究所
開発ツール無料体験版ダウンロード

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  直属上司が海外にいるのエンジニアに見る
【実例】場所に捉われないワークスタイル

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?