Flashはデジタルサイネージの分野でも広く使われている。ただ、元がウェブ向けの技術なので、OSネイティブの動作と連動しづらい部分もある。この問題を改善する方法としてC#でまずアプリを作って、そこにFlash(swf)を埋め込むという方法がある。
C#はMicrosft推奨のアプリ作成方法なので、OS側(Windows)の機能の十分な活用が可能になる。Flash(swf)がUIレイヤーとなりキレイなアニメーションを担当し足回りはC#で固める、というイメージだ。
ここでは、基本のキとして、C#のプログラムにFlash(swf)を埋め込む方法を紹介する。
ちなみに先日紹介したNativeProcessも似た問題の違う解決方法となる。NativeProcessは連携アプリとAIRの二種のアプリを同時起動させて連動させる方法だ。ここで紹介するのは、C#のWindowsアプリにswfを乗せて再生するので、一つのアプリだけが起動していることになる。
1.準備
1-0
埋め込んで、表示するだけのswfを用意する。
↓これをダウンロードし、展開しておく。EmbedFlash.swfが入っている。
EmbedFlash.zip
ソースコードは最後に記述した。
1-1
Visual C# 2010 Expressを起動し、メニューの「ファイル」から「新しいプロジェクト(P)…」を選択します。
1-2
「新しいプロジェクト」ウィンドウが出たら、「Windows フォーム アプリケーション」を選択し、右下の「OK」ボタンを選択する。
1-3
1-4
緑色の三角、「デバッグ開始」をクリックすると、ウィンドウが立ち上がり、動作確認ができる。
何も設定していないので、真っ白のウィンドウが出るだけだ。
1-5
1-6
デフォルトでは、
C:\Users\<user name>\documents\visual studio 2010\Projects
内に保存される(Windows Vista)。
1-7
C:\Users\<user name>\documents\visual studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\内に先ほどダウンロードした、EmbedFlash.swfを配置する(リリース用ビルドの場合には、Releaseディレクトリ内に配置する)。
1-8
Visual C# 2010 Expressに戻る。
このままだと、基本機能しかメニューに出てこないので、メニューの「ツール/設定/上級設定」を選択する。
1-9
とりあえず、準備完了。
2.制作
2-1
それぞれのメニュー内の項目も増えている。「ツール/ツールボックス アイテムの選択」を選択する。
2-2
「ツールボックス アイテムの選択」ウィンドウが出てくる。上のタブから「COM コンポーネント」を選択後、下のほうまでスクロールすると、「Shockwave Flash Object」が現れるので、チェックボックスを選択し、「OK」を選択する。
2-3
2-4
下のほうに、「Shockwave Flash Object」が追加されているのを確認し、メニュー項目をドラッグして、ウィンドウ内に持ってくる。
2-5
ドロップすると、四角いエリアが表示される。これが、Flash(swf)が埋め込まれるエリアだ。
2-6
右側にある「ソリューションエクスプローラー」を右クリックして「コードの表示」を選択する。
2-7
「using System.Windows.Forms;」の次の行に
[sourcecode language=”csharp”]
using System.IO;
[/sourcecode]
を書く。
「InitializeComponent();」の次の行に
[sourcecode language=”csharp”]
String swfPath = Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "EmbedFlash.swf";
axShockwaveFlash1.LoadMovie(0, swfPath);
[/sourcecode]
を書く。
ファイルのパスは相対パスではだめで、絶対パスでないといけないので「Directory.GetCurrentDirectory()」でC#アプリのあるディレクトリを取得している。そこに、さらに「Path.DirectorySeparatorChar」で、セパレーター(\)を追加している。
セパレーターを直接書く方式
[sourcecode language=”csharp”]
Directory.GetCurrentDirectory() + "\\EmbedFlash.swf";
[/sourcecode]
でもかまわない。
次の行は、axShockwaveFlash1にswfのパスを渡し、ロードムービーさせている。
[sourcecode language=”csharp”]
axShockwaveFlash1.LoadMovie(0, swfPath);
[/sourcecode]
「axShockwaveFlash1」は、Flashを配置するエリアのことで、2-5でツールをドロップした時点で自動的に命名されている。
2-8
緑色の三角、「デバッグ開始」をクリックすると、ウィンドウが立ち上がり、Flashが埋め込まれているのを確認できる。
3.参考
C#の中にFlashを埋め込む – sappari wiki
http://memo.sappari.org/flash-in-csharp
4.ソースコード
4-1
4-2
▼C#
[sourcecode language=”csharp”]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
String swfPath = Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "EmbedFlash.swf";
axShockwaveFlash1.LoadMovie(0, swfPath);
}
}
}
[/sourcecode]
4-3
▼AS3
[sourcecode language=”as3″]
package
{
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
/**
* …
* @author umhr
*/
[SWF(width = 192, height = 192, backgroundColor = 0xCCCCCC, frameRate = 30)]
public class Main extends Sprite
{
private var _shape:Shape = new Shape();
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
_shape.graphics.beginFill(0xFF0000, 0.5);
_shape.graphics.drawRoundRect(-75, -75, 150, 150, 8, 8);
_shape.graphics.endFill();
_shape.x = 75;
_shape.y = 75;
addChild(_shape);
addEventListener(Event.ENTER_FRAME, enterFrame);
}
private function enterFrame(event:Event):void
{
_shape.rotation ++;
}
}
}
[/sourcecode]
2 Comments
[…] 以前のエントリーC#のアプリにFlash(swf)を埋め込む。は理解していることを前提にしている。 […]
[…] C#のアプリにFlash(swf)を埋め込む。 […]