vb.netのwindowsフォームからswfファイルへ値を送ってswfファイル内の文字列を変更させる。逆に、swfファイル内からvb.netのwindowsフォームへ値を送ってフォームのメッセージボックスにその値を表示させる。
準備
swfファイルを作成する
右のようなswfファイルをmacromedia の flash8で作成をした。簡単な説明としては、labelと書かれているのはダイナミックテキストになっていて、windowsフォームから送られた値をそこへ入れる予定。そしてボタンと書かれている矩形にはfscommandのイベントをon releaseで設定して、マウスでクリックするとwindowsフォーム側へ値を送るように仕向ける。
windowsフォームにswfファイルを貼り付ける
はじめにvisual studio 2005を起動して新規プロジェクトを作成する。プロジェクトの種類はwindowsアプリケーションで言語はvb.netを選択する。
flash objectの参照設定
swfファイルをwindowsフォームで使えるように参照の追加をする。My Projectの参照から追加ボタンの参照をクリックして参照の追加ウインドを開く。そして、COMタブからshockwave flashを選択する(右画像参照)。これを選択してOKボタンをクリックする。flash9d.ocxというファイルがそれになる。
次にツールボックスに表示されるようにアイテムの追加を行う。メニューバーのツールから、ツールボックス アイテムの選択 をクリックする。COMタブからshockwave flash objectのチェックを入れてからOKボタンをクリックする。
これで、ツールボックスにshockwave flash objectが現れる。
windowsフォームを作成する
swfファイルを貼り付けるwindowsフォームを作成する(右画像)。画面の白い部分がshockwave flash object で、fscommandを実行するボタンを設置しただけのシンプルなフォーム。
プログラムの内容
windowsフォームに貼り付けられたswfファイルへ値を送る
windowsフォーム上にあるボタンをクリックするとswfファイル内にあるlabelの文字を”Hello! from vb.net”に変える処理をする。・・・の前に、swfファイルをwindowsフォーム上で表示させる設定をする。swfファイルを読み込ませるためにはどうやら絶対パスでの指定をしなければならない模様。そのことを考慮してswfファイルを読み込ませる設定をloadイベントに次のコードを記述する。
'swfファイルの場所をフルパスに変換する。 Dim pathStr As String = System.IO.Path.GetFullPath("./sample_flash.swf") 'windowsフォーム上のshockwaveflashにswfファイルの設定をする。 Me.AxShockwaveFlash1.LoadMovie(0, pathStr)
これでwindowsアプリケーションを起動したらswfファイルが読み込まれる。sample_flash.swfは先ほど作成した実験用のswfファイルで、デバッグモードで動作をテストしたりするのでbinの下のdebugフォルダに保存することにした。
さて、デバッグモードで起動するとswfが読み込まれた状態になったので、windowsフォーム上に配置しているbottun1をクリックしたら、swfファイル内のlabelという文字に”Hello! from vb.net”という文字列が表示されるように設定してみる。その方法はとても簡単で、次の一文をbottun1のクリックイベントに記述すれば実現できる。
Me.AxShockwaveFlash1.SetVariable("label.text", "Hello! from vb.net")
引数の1番目は、labelという名前のインスタンスのテキストを指し示していて、引数の2番目は挿入する文字列を指定している。つまり、swf上に配置されているlabel(インスタンス名もlabelにしてある)に “Hello! from vb.net”を挿入するということになる。
結果は右の画像のような感じ。(文字がデカすぎて入りきらなかった・・・)
windowsフォームに貼り付けられたswfファイルからwindowsフォームへ値を送る
次は今までの逆でswfからvb.netへ値を送るようにしてみる。プログラムはswfファイル内に設置されたボタンをクリックすると、windowsフォームのメッセージボックスにその値を表示させるという簡単なもの。swfファイルの”ボタン”にはクリックした時の動作時に次の一文を記述してある。
on (release) { fscommand("set","Hello! from swf") }
fscommandの引数の1番目はこのコマンドを識別するための名前、引数の2番目はその時に送る値という風になっている。この場合だとswfの”ボタン”をクリックしたときにsetという名前のコマンドが”Hello! from swf”という値を送るという感じ。
次に受け取り側での処理。windowsフォーム上に配置しているshockwave flash objectのFSCommandイベントにメッセージを表示させるコードを記述する。swfファイル内でfscommandが実行されるときにこのイベントが発生する模様。で、コードは下記のようになる。
Private Sub AxShockwaveFlash1_FSCommand(ByVal sender As System.Object, ByVal e As AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent) Handles AxShockwaveFlash1.FSCommand If e.command = "set" Then MsgBox(e.args) End If End Sub
コードの内容はe.commandでコマンドの識別を行い、それが”set”というコマンドならばメッセージボックスに送られてきた値を表示させる。
そして、実際にwindowsフォーム上に配置されたswfファイル内の”ボタン”をクリックすると右の画像のようになる。ヽ(´ー`)ノ
サンプルプログラムのダウンロード
上記のプログラムのソースファイル一式は下記よりダウンロードできます。flash_vb_test.slnを開くにはvisual studio 2005が必要です。名称未設定-1.flaを開くにはflash professional8 に互換性があるflashが必要です。
vb_each_swf.zip size:210KB