C#にFlash(swfファイル)を埋め込む

chakemiです。買っちゃいました、Mac Book air!! 当然、Windows7 OSも忘れてません!今夜中にBootCampできるかな~?

本日は、C#で作成したアプリケーションにアクティブXを使って、 Flashのswfファイルを埋め込んでみたいと思います。

開発環境

  • VisualStudio2008
  • FlashDevelop3
  • FlashPlayer 10.2.153.1

アクティブX使うんで、IEでAdobeのサイトからバージョン確認してます。

まず、新規プロジェクトを作成したら、メニューの「ツール」から「ツールボックス アイテムの選択」をクリック ダイアログが表示されるので、「COMコンポーネント」タブを選択します。 「Shockwave Flash Object」にチェックを入れます。

ツールボックス内に「Shockwave Flash Object」コントロールが表示されたと思います。 これをフォームへドラッグ&ドロップして配置します。

ソリューションエクスプローラーの参照設定にAxShockwaveFlashObjectsとShockwaveFlashObjectsが追加されたと思います。 あとはプロパティウィンドウで埋め込むswfファイルのサイズ等に合わせておきます。

実行ファイルとswfファイルを同じディレクトリに配置して、実行ファイルのパスから、swfファイルのフルパスを生成するようにしてます。 また、LoadMovie()メソッドですが、第一引数はレイヤのindex番号、第二引数がswfファイルのPathのようです。

1
2
3
4
5
6
7
8
9
10
11
12
using System.IO;
~省略~

public Form1()
{
    InitializeComponent();

    //Flashの読み込み
    String swfPath = Directory.GetCurrentDirectory() + .DirectorySeparatorChar + "test.swf";
    axShockwaveFlash1.LoadMovie(0, swfPath);

~省略~

とりあえず、適当なswfファイルを作成して埋めこんでみます。 「四角いボタンのようなものをクリックすると数字をカウントアップする」だけの簡単なものです。

test.swf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package
{
     import flash.display.*;
     import flash.events.*;
     import flash.text.*;

     /**
     * ...
     * @author ...
     */
     [SWF(backgroundColor=0xFFFFFF, width=320, height=240)]
     public class  test extends Sprite
     {
          private var button:SimpleButton;
          private var text:TextField;
          private var count:int;

          public function test(){

               text = new TextField();

               text.x = 20;
               text.y = 20;
               addChild(text);

               count = 0;

          button = new SimpleButton();

          addChild(button);
          button.x = 135;
          button.y = 95;
          button.upState = drawButton(0xFFCC00);
          button.overState = drawButton(0xCCFF00);
          button.downState = drawButton(0x00CCFF);
          button.hitTestState = button.upState;
          button.addEventListener(MouseEvent.CLICK, buttonClick);

          addChild(button);
          }

          private function buttonClick(e:MouseEvent):void {
               count++;
               text.text = count.toString();
          }

          private function drawButton(color:uint):Shape {
               var rect:Shape = new Shape();
               rect.graphics.beginFill(color);
               rect.graphics.drawRect(0, 0, 50, 50);
               rect.graphics.endFill();
               return rect;
          }
     }

}

無事にswfファイルが読み込まれました! 次回は、C#-ActionScript間でデータのやり取りをおこなってみたいと思います。

Comments