Home

Jinten Blog

[flex]任意のタイミングでAlertを消す

fxug - フォーラム

ここによると、

alert = Alert.show("hogehoge");

で開いたAlertは、

PopUpManager.removePopUp(alert);

で消せるらしいです。

確かにリファレンスを見ると、Alert.show()でAlert型が戻り値になってますね。戻り値あったんだ・・・。この関数。

というかそれ以前にAlertがPopupManagerで開かれていることを知らなかった・・・。
FlexFrameworkのソースって読めるんですよね。やっぱソースとかしっかり読んで勉強するべきなのかなぁ・・・。

[IDE]ActionScript3.0(Flex3・AIR)の開発環境構築(2)

前回の続きです。

前回はFlashDevelopのインストールから、Flex3のSDKを適応し、
コード補完をできるようにするところまででした。

今回は、AIRの開発用のProjectTempleteを作ります。

まずは、FlashDevelopをインストールしたフォルダを確認してください。
特に変更せずにインストールしていれば、
(Windowsなら)C:\Program Files\FlashDevelop\だと思います。
そこからさらにもぐって、
C:\Program Files\FlashDevelop\FirstRun\Templates\ProjectTemplates\
を確認します。
[ProjectTemplates]フォルダ内には、
[00 ActionScript 2 - Empty Project]~[08 HaXe - Default Project]までの
プロジェクトテンプレートファイルがあります。
どれでも良いですが、とりあえず[06 ActionScript 3 - Default Project]をコピーして、
[09 Air - Default Project]という名前にリネームします。
これで、Air用の新しいプロジェクトができました。

FlashDevelop再起動後にnew Projectで確認できると思います。

次はAirプロジェクトのコンパイル設定です。
swfをAirアプリにするためには、application descriptor fileというxmlファイルが必要です。
new Projectの際に自動でこのファイルができるように、
[09 Air - Default Project]フォルダ内にapplication.xmlというファイルを作っておきましょう。

< ?xml version="1.0" encoding="UTF-8"?>

  hoge

  
    hoge.swf
  

これで新規プロジェクトの際には、自動的にapplication.xmlというファイルができることになります。

次にコンパイルのオプションを設定します。
[09 Air - Default Project]フォルダ内の Project.as3proj というファイルをメモ帳で開いてみてください。
中身はXML形式で書かれています。
まず、build という項目に以下を追記します。


  

続いて、
postbuildCommand という項目を以下のように修正します。


  “C:pathtoflex3_sdkbinadl.exe” application.xml

adlへのパスは環境に合わせてください。

これで設定は終了です。
FlashDevelopを再起動し、Airプロジェクトを新規で作ってください。
自動で作られたapplicaiton.xml内のrootContentで指定するswfを適当に調整し、
F8でAirアプリの完成です。

[IDE]ActionScript3.0(Flex3・AIR)の開発環境構築(1)

Flex3の開発環境といえば、FlexBuilder3。
ですが、使用期限ももう限界です。

僕は少し前からFlashDevelop3.0に切り替えました。
AIRの開発に他の人は何を使ってるんだろう・・・。
ここを見ながら設定するとAIRの開発に問題無しです。

若干コード補完がおかしいときがありますが、
体感的にはFlexBuilderよりも軽いし、無料だし。

ほぼそのままですが、開発環境の構築手順を。

まずはFlashDevelopをここからダウンロードします。
2007年8月11日現在、最新版はFlashDevelop 3.0.0 Beta2のようです。
そして、インストール。
FlashDevelopの起動には「.NET Framework 3.0」が必要なので、インストール前に入れておきましょう。
インストール後

英語ですが、普通に進めれば問題無くインストールできると思います。
うまくインストールできたら文字コードを設定します。
これをしておかないと、FlexBuilderからのファイルとかを移行したときに日本語が化けます。
メニューから、
Tools -> Program Settings -> その他 -> Default CodePage と選択して、
ここの数値を「1252」から「65001」に変更します。これでUTF-8になるようです(細かいことはわかってない)。
情報元はここ

それでは、ここからはAIRのBeta1とかFlex3用のプロジェクトを作る設定です。

まずはFlex3のSDKを設定します。
先ほどと同様に、Tools -> Program Settings から、
plugins -> AS3Context -> settings
と選択していきます。
すると、「AS3Contexet」というタイトルのウインドウが出るはずなので、
その中の、AS3項目内「Flex 2 SDK Location」にFlex3のSDKを設定します。
(SDKの設定なので、mxmlcのあるフォルダの上のフォルダを設定)

続いてコード補完用のファイルを設定します。
まずは、このページのはじめの書き込みの「Update: Flex 3/AIR Intrinsic Classes 」という部分から「flex3_intrinsic.zip」というファイルをダウンロードしてください。

先ほどの、「AS3Context」ウインドウをもう一度開き、
今度は、「AS3 Classpath」というところを先ほどダウンロードしてきたflex3_intrinsic.zipを解凍したものを設定します。

一度、FlasDevelopを再起動し、
新しいProjectを作ってみましょう。

project -> new Project

で開いたウインドウからProject名などは適当に。Templeteは「ActionScript3 - Default Project」で。
すると、
新しいプロジェクト(AS3 Default)
こんな感じに自動でファイルが作られます。

F8押すか、
Project -> Build Project
で、コンパイルできるはずです。

適当にFlex3で新しく追加されたクラスなどを書いてみてください。
コード補完は Ctl + space です。

コレでFlex3と同様のswfをコンパイルできるようになりました。
が、しかし、AIRの開発を行うためにはもう少し設定を続けなければいけません。

続く。

[AS3]外部データをロード。そしてキャッシュしない(1)

ActionScriptから外部のリソースをロードするには、

var uloader:URLLoader = new URLLoader();
uloader.addEventListener(Event.COMPLETE, completeHandler);
var ureq:URLRequest = new URLRequest("http://www.hogehoge.com/resource.txt");
uloader.load(ureq);

普通こんな感じですね。
それで、

private function completeHandler(e:Event):void{
    var resource_txt:String = e.target.data;
}

こんな感じで受け取ります。
ただしコレだとロードしたデータがキャッシュされてしまいます。

開発の途中でキャッシュのせいで予想した結果が返ってこなくて、
無駄な時間をすごしたことも数知れず。

キャッシュしないようにするためには、

var uloader:URLLoader = new URLLoader();
uloader.addEventListener(Event.COMPLETE, completeHandler);
var header:URLRequestHeader = new URLRequestHeader("pragma", "no-cache");
var ureq:URLRequest = new URLRequest("http://www.hogehoge.com/resource.txt");
ureq.requestHeaders.push(header);
uloader.load(ureq);

こんな感じになります。
URLRequestHeaderでpragma:no-cacheというものを渡してあげます。
すると、ブラウザがキャッシュをしなくなります。

ただしIEの場合、
どうも一度アプリケーションを終了するまではno-cache指定していてもキャッシュしてしまう様子です。
[HOWTO] Internet Explorer でキャッシュを無効にする
ここによると、

Pragma: no-cache は、セキュリティで保護された接続で使用された場合にのみ、キャッシュを実行しません。Pragma: no-cache META タグが、セキュリティで保護されていないページで使用された場合、Expires: -1 とまったく同じ働きをします。そのページはキャッシュされますが、直ちに期限が切れるものとしてマークされます。

だそうです。
つまり、no-cacheでもキャッシュされます。なのでリロードしてもキャッシュから読まれてしまいます。
一度アプリケーションを終了すればキャッシュが消えます。
開発時にIEを使っていて、外部のテキストとかを読み込む場合には要注意ですね。
IE使いづらい!

[Flex]ブラウザのポップアップブロックを回避する

navigateToURLを使って新しいウインドウを開く場合には、
ブラウザのポップアップブロックに引っかかるときがある。

navigateToURLでは無く、JavaScriptを使ってウインドウを開いてやれば良いらしい。

< ?xml version="1.0" encoding="utf-8"?>
< mx :Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
  
    < ![CDATA[
      import flash.net.navigateToURL;

      private function openNewWindow( event:MouseEvent, url:String, winName:String, w:int, h:int, toolbar:int, location:int, directories:int, status:int, menubar:int, scrollbars:int, resizable:int):void{
        var fullURL:String = "javascript:var myWin;" + "if(!myWin || myWin.closed)" + "{myWin = window.open('" + url + "','" + winName + "','" + "width=" + w + ",height=" + h  + ",toolbar=" + toolbar + ",location=" + location + ",directories=" + directories + ",status=" + status + ",menubar=" + menubar + ",scrollbars=" + scrollbars + ",resizable=" + resizable + ",top='+((screen.height/2)-(" + h/2 + "))+'" + ",left='+((screen.width/2)-(" + w/2 + "))+'" + "')}" + "else{myWin.focus();};void(0);";
        var u:URLRequest = new URLRequest(fullURL);
        navigateToURL(u,"_self");
      }
    ]]>
  
  
  
< /mx>

メニューバーやツールバーの有無は0,1のフラグで渡す。
FireFoxとOperaとIEでは確かめてみたけど、確かにウインドウが開いた。
設定によると思うけど、FireFoxでは新しいタブとして開いた。

こういう場合を考えると、やっぱりwidthとheightは設定するべきじゃないなぁ。
ブラウザ全体のサイズが調整されてしまう。

[情報元]Adobe Flex cookbook beta

[AIR]AIRのアプリをサーバーに置くときの設定

  • 2007-07-21 (Sat)
  • AIR

備忘録的にメモ。

Apacheのhttpd.confか.htaccessに、

AddType application/vnd.adobe.air-application-installer-package+zip air

を、加えてやる。

[情報元]Flex Coderさん

[AIR]AIRアプリとCookie

  • 2007-07-19 (Thu)
  • AIR

聞き捨てならない話。

AIR は IE や Safari とかとは cookie を共有できるよー。
でも Firefox は無理だよー。
らしい。

kunzo.logさんより

むしろ、cookieはどれとも共有できないと思ってた。
すごい微妙だ。

セキュリティ上の問題で~とかなって、
大手のサイトとかでAIRアプリからのアクセスをはじいたりするような予感。

AIRでアクセスした場合のuserAgentは今のところ、

AppleWebKit/420+ (KHTML, like Gecko) Safari/419.3 Apollo/1.0.Beta1

らしい。(Geek Glueさんより)

AIRアプリは危険!みたいな記事が出回るんだろうなぁ・・・。

[Tips][AIR]AIRアプリの外から中へのドラッグ&ドロップ

  • 2007-07-15 (Sun)
  • 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を使う。

[AIR]ActionScriptだけでAIRアプリ

  • 2007-07-15 (Sun)
  • AIR

いろんなサンプルが出てるけど、
FlexFramework使ったやつばっかり。
個人的には、無駄にアプリのサイズが増えるので、
ActionScriptだけで作りたい。
で、ちょっと迷ったけど、普通に

package{
  import flash.display.Sprite;
  public class Main extends Sprite {
    public function Main(){
    }
  }
}

これで、いつもどおりにamxmlc して swf を作って、
adl or adt してやればAIRのアプリができる。

AIRおもしろそう

  • 2007-07-13 (Fri)
  • AIR

AIRなイベントにも参加したことだし、
そろそろ本気でAIRしようと思います。

AIRって、いちいちインストールしなきゃならないし、
なんかネットに転がってるサンプルとかもめんどくさくて試してなかったりしたんだけど、

AIR Launcher

ants Labさんでこんなん公開されてました。すごい。
インストールせずに試せる。

Home

Search
Google
Feeds
Meta
Advertisement

Return to page top