SWFLoader コントロールを使用すると、1 つの Flex アプリケーションを SWF ファイルとして別の Flex アプリケーションにロードすることができます。Loader コントロールには、そのコンテンツを拡大 / 縮小するためのプロパティが実装されています。また、表示するコンテンツに合わせて、Loader コントロールのサイズが自動的に変わるようにすることも可能です。デフォルトでは、SWFLoader コントロールのサイズに合うようにコンテンツが拡大 / 縮小されます。また、プログラムを使用して要求時にコンテンツをロードし、ロード操作の進行状況を監視できます。
SWFLoader コントロールではさらに、GIF、JPEG、PNG、SVG、または SWF ファイルの内容をアプリケーションにロードすることができます。この場合の SWF ファイルには、Flex アプリケーションや、SWF、GIF、JPEG、または PNG を表す ByteArray は含まれません。
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 コンポーネントの作成と拡張』を参照してください。
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 オプションを使用してこのレポートを指定します。
mxmlc -link-report=report.xml MyApplication.mxml
mxmlc -load-externs=report.xml MyLoadedApplication.mxml
mxmlc MyApplication.mxml
詳しくは、Flex コンパイラの使用を参照してください。
SWFLoader コントロールは、scaleContent プロパティを使用してサイズ変更の動作を制御できます。scaleContent プロパティを true に設定した場合、コンテンツのサイズがコントロールの境界に合わせて調整されます。ただし、デフォルトでは、イメージの縦横比が維持されます。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート