Flex Builder 3 で作成する flash の中で、サーバ上の画像ファイルを読み込んで表示をしたいのだが、「Action Script 3.0 逆引きクイックリファレンス」などの書籍に載っているやり方だと上手くいかない。
例えば、こんな感じ。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    initialize="initProc()"
    layout="absolute" width="420" height="250" 
    borderColor="#D7DBDD" color="#000000" 
    backgroundGradientAlphas="[1.0, 1.0]" 
    backgroundGradientColors="[#CAC8C8, #CAC8C8]">
    
    <mx:Script>
    <![CDATA[
    import flash.net.URLRequest;
    import flash.display.*;
    import flash.events.*;
    public var gLoader:Loader    = new Loader();
    private function initProc():void {
        var url:URLRequest    = new URLRequest("http://hogehoge.jp/images/qr_code.gif");
        gLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
        gLoader.load(url);
    }
    private function loadComplete(event:Event):void {
        var loaderInfo:LoaderInfo    = event.target as LoaderInfo;
        var bitmap:Bitmap    = loaderInfo.content as Bitmap;
        addChild(bitmap);
    }
    ]]>
    </mx:Script>
</mx:Application>
しかし、これで Flex Builder 3 で swf ファイルを作成しても、エラーも出ないが画像も表示されない。
ちゃんと画像は読み込まれ、Event.COMPLETE イベントも発生しているのだが、画像は表示されないのである。なんでぇ?
Web 上でググっても、だいたい、上のようなソースで上手くいっているようである。何で上手くいかないのかは謎。
FlexBuilder で吐く flash ファイルではこの書き方は駄目・・・とかいうことなんかなあ?識者の人、是非ご教示ください。
まあ、一応、UIComponent クラスを使ったやり方で表示じたいは出来ているので、問題はないのだが、何故に定番のやり方が上手くいかないのかは気になる。
ちなみに、上手くいっているソースは以下のとおり。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    initialize="initProc()"
    layout="absolute" width="420" height="250" 
    borderColor="#D7DBDD" color="#000000" 
    backgroundGradientAlphas="[1.0, 1.0]" 
    backgroundGradientColors="[#CAC8C8, #CAC8C8]">
    <mx:Script>
    <![CDATA[
    import flash.net.URLRequest;
    import flash.display.*;
    import flash.events.*;
    import mx.core.UIComponent;
    public var gLoader:Loader    = new Loader();
    private function initProc():void {
        var url:URLRequest    = new URLRequest("http://hogehoge.jp/images/qr_code.gif");
        gLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
        gLoader.load(url);
    }
    private function loadComplete(event:Event):void {
        var uic:UIComponent    = new UIComponent;
        uic.addChild(gLoader);
        this.addChild(uic); 
    }
    ]]>
    </mx:Script>
</mx:Application>
いやぁ、ついつい同じ Flex Builder 3 で作る AIR アプリと同じ感覚で、「サーバ上の画像の表示? HTML コンポーネントを使えばすぐですよ」なんて簡単に見積もってしまったが、実際には flash 用には HTML コンポーネントなんて用意されてないし、よって UIComponent クラスなんかも使うの初めてだし・・・厳しいぃ~(^^;