Adobe Flex 3 ヘルプ

SWFLoader コントロール

SWFLoader コントロールを使用すると、1 つの Flex アプリケーションを SWF ファイルとして別の Flex アプリケーションにロードすることができます。Loader コントロールには、そのコンテンツを拡大 / 縮小するためのプロパティが実装されています。また、表示するコンテンツに合わせて、Loader コントロールのサイズが自動的に変わるようにすることも可能です。デフォルトでは、SWFLoader コントロールのサイズに合うようにコンテンツが拡大 / 縮小されます。また、プログラムを使用して要求時にコンテンツをロードし、ロード操作の進行状況を監視できます。

SWFLoader コントロールではさらに、GIF、JPEG、PNG、SVG、または SWF ファイルの内容をアプリケーションにロードすることができます。この場合の SWF ファイルには、Flex アプリケーションや、SWF、GIF、JPEG、または PNG を表す ByteArray は含まれません。

注意: Image コントロールについて詳しくは、Image コントロールを参照してください。SWFLoader コントロールを使用して Flex アプリケーションをロードすることについて詳しくは、アプリケーションクラスの外部化を参照してください。

注意: Flex には、GIF、JPEG、PNG、SVG、または SWF ファイルをロードするための Image コントロールも用意されています。通常、静止グラフィックファイルと SWF ファイルをロードするには Image コントロールを使用し、Flex アプリケーションを SWF ファイルとしてロードするには SWFLoader コントロールを使用します。Image コントロールは、カスタムセルレンダラーとアイテムエディタでも使用できるように設計されています。

SWFLoader コントロールはフォーカスを取得できません。ただし、SWFLoader コントロール内にロードしたコンテンツ自体は、フォーカスの取得やフォーカス操作が可能です。

SWFLoader コントロールの作成

SWFLoader コントロールは、次の例に示すように、<mx:SWFLoader> タグを使用して MXML 内で定義します。MXML の他の場所(別のタグ内または ActionScript ブロック内)にあるコンポーネントを参照する場合は、id 値を指定します。

<?xml version="1.0"?>
<!-- controls\swfloader\SWFLoaderSimple.mxml-->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:SWFLoader id="loader1" source="FlexApp.swf"/> 
</mx:Application>

前の例で実行する SWF ファイルは以下のとおりです。

Image コントロールと同様に、Embed ステートメントと SWFLoader コントロールを併用しても、次の例に示すように、イメージをアプリケーションに埋め込むことができます。

<?xml version="1.0"?>
<!-- controls\swfloader\SWFLoaderSimpleEmbed.mxml-->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:SWFLoader id="loader1" source="@Embed(source='flexapp.swf')"/> 
</mx:Application>

前の例で実行する SWF ファイルは以下のとおりです。

SWFLoader コントロールを SVG ファイルで使用する場合、Embed ステートメントを使用してのみファイルをロードできます。実行時に SVG ファイルをロードすることはできません。埋め込みリソースについて詳しくは、イメージの読み込みについておよびアセットの埋め込みで、Image コントロールについての説明を参照してください。

この手法は、主に、アプリケーションにグラフィックやアニメーションを追加する SWF ファイルを扱うものです。複雑な操作を実装した SWF ファイルには向いていません。複雑な操作を要求する SWF ファイルを読み込む場合は、カスタムコンポーネントを作成することをお勧めします。カスタムコンポーネントの詳細については、『Adobe Flex 3 コンポーネントの作成と拡張』を参照してください。

ロードした Flex アプリケーションの操作

FlexApp.mxml ファイルを使用した次の例では、2 つの Label コントロール、1 つの変数、および変数を変更する 1 つのメソッドを定義する単純な Flex アプリケーションを示します。

<?xml version="1.0"?>
<!-- controls\swfloader\FlexApp.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    height="200" width="200">

    <mx:Script>
        <![CDATA[
            [Bindable]
            public var varOne:String = "This is a public variable";

            public function setVarOne(newText:String):void {
                varOne=newText;
            }
        ]]>
    </mx:Script>

    <mx:Label id="lblOne" text="I am here"/>
    <mx:Label text="{varOne}"/>

    <mx:Button label="Nested Button" click="setVarOne('Nested button pressed.');"/>

</mx:Application>

前の例で実行する SWF ファイルは以下のとおりです。

次の例に示すように、この例をまず FlexApp.SWF ファイルにコンパイルし、次に SWFLoader コントロールを使用して、このファイルを別の Flex アプリケーションにロードします。

<?xml version="1.0"?>
<!-- controls\swfloader\SWFLoaderInteract.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[

            import mx.managers.SystemManager;
            import mx.controls.Label;
            
            [Bindable]
            public var loadedSM:SystemManager;

            // Initialize variables with information from
            // the loaded application.
            private function initNestedAppProps():void {
                loadedSM = SystemManager(myLoader.content);
            }

            // Update the Label control in the outer application
            // from the Label control in the loaded application.
            public function updateLabel():void {
                lbl.text=loadedSM.application["lblOne"].text;
            }

            // Write to the Label control in the loaded application.
            public function updateNestedLabels():void {
                loadedSM.application["lblOne"].text = "I was just updated";
                loadedSM.application["varOne"] = "I was just updated";
            }

            // Write to the varOne variable in the loaded application
            // using the setVarOne() method of the loaded application.
            public function updateNestedVarOne():void {
                FlexApp(loadedSM.application).setVarOne("Updated varOne!");
            }
        ]]>
    </mx:Script>

    <mx:Label id="lbl"/>
    <mx:SWFLoader id="myLoader" width="300"
        source="FlexApp.swf"
        creationComplete="initNestedAppProps();"/>
    
    <mx:Button label="Update Label Control in Outer Application" 
        click="updateLabel();"/>
    <mx:Button label="Update Nested Controls" 
        click="updateNestedLabels();"/>    
    <mx:Button label="Update Nexted varOne" 
        click="updateNestedVarOne();"/>
</mx:Application>

前の例で実行する SWF ファイルは以下のとおりです。

このアプリケーションは実行時に SWF ファイルをロードします。SWF ファイルは埋め込まれません。SWFLoader タグを使用して Flex アプリケーションを埋め込む方法については、アセットの埋め込みを参照してください。

上の例では、SWFLoader コントロールの creationComplete イベントを使用して 2 つの変数を初期化します。1 つめの変数にはロードされた Flex アプリケーションの SystemManager オブジェクトへの参照が格納され、2 つめの変数にはロードされたアプリケーションの Label コントロールへの参照が格納されます。

ユーザーが外側のアプリケーションで最初の Button コントロールをクリックすると、Flex によって、ロードされたアプリケーションの Label コントロールから外側のアプリケーションの Label コントロールにテキストがコピーされます。

ユーザーが 2 つ目の Button コントロールをクリックすると、Flex によって、ロードされたアプリケーションの Label コントロールと varOne 変数にテキストが書き込まれます。

3 つ目の Button コントロールをクリックすると、Flex はロードされたアプリケーションの setVarOne() メソッドを使用して、ロードされたアプリケーションで定義されている varOne 変数にテキストを書き込みます。

アプリケーションクラスの外部化

SWFLoader コントロールを使用してロードするアプリケーションのサイズを縮小するには、ロード対象のアプリケーションによって重複して組み込まれるフレームワーククラスを外部化するようにロード済みのアプリケーションに指示します。この結果、ロード済みアプリケーションには必要とするクラスのみ組み込まれるため、ロード済みアプリケーションのサイズは小さくなり、一方でフレームワークコードと他の依存関係はロード対象のアプリケーションに組み込まれます。

フレームワーククラスを外部化するには、mxmlc コマンドで link-report オプションを使用して、ロード対象のアプリケーションからリンカーレポートを生成します。次に、ロード済みアプリケーションをコンパイルするときに、mxmlc コンパイラで load-externs オプションを使用してこのレポートを指定します。

フレームワーククラスの外部化

  1. ロード対象のアプリケーションのリンカーレポートを生成します。
    mxmlc -link-report=report.xml MyApplication.mxml
    
    
  2. このリンクレポートを使用してロード済みアプリケーションをコンパイルします。
    mxmlc -load-externs=report.xml MyLoadedApplication.mxml
    
    
  3. ロード対象のアプリケーションをコンパイルします。
    mxmlc MyApplication.mxml
    
    

注意: load-externs オプションを使用してロード済みアプリケーションの依存関係を外部化する場合、ロード済みアプリケーションが Adobe Flex の将来のバージョンと互換性がない可能性があります。したがって、アプリケーションの再コンパイルが必要となる場合があります。将来の Flex アプリケーションでアプリケーションを確実にロードできるようにするには、アプリケーションとアプリケーションが必要とするすべてのクラスをコンパイルします。

詳しくは、Flex コンパイラの使用を参照してください。

SWFLoader コントロールのサイズ設定

SWFLoader コントロールは、scaleContent プロパティを使用してサイズ変更の動作を制御できます。scaleContent プロパティを true に設定した場合、コンテンツのサイズがコントロールの境界に合わせて調整されます。ただし、デフォルトでは、イメージの縦横比が維持されます。

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート