VB.NETとFlashの通信 その1 | てすとぺーじ v0.0.8

Flash AS3.0とVB.NETの連携について記載します。
ここではFlashVarsFSCommandを使用したサンプルを記載します。

この方法では以下の制限があります。
・FLASH→VB.NETへの値の送信はイベントドリブンに行えます。
・VB.NET→FLASHへの値の送信はFLASH起動時に1回しか行えません。

実行環境

 ◆ActionScript3.0 / Adobe Flash CS 5
  ※CS4でも問題なく動作しますが、ActionScript2.0では構文が違うため使用できません。

 ◆Microsoft Visual Studio 2008 Professional(VB.NET)
  .NET Framework 2.0
  ShockWave Flash(Flash.OCX)コンポーネント
  ※2003/2005でも、VB6.0でもほとんど同じだと思います。

 

サンプルプロジェクト

 ここで使用するプロジェクトは以下からダウンロードできます。
 サンプルプロジェクトのダウンロード

 解凍すると以下の構成になっています。

    ./flash_src
       + trx_with_vb.fla       ----> FLASH CS 5.0プロジェクト
       + trx_with_vb.as3prj    ----> Flash Develop用プロジェクト
       + Main.as               ----> ASソースファイル
    ./vb_src
       + FlashSample
       |  + frmMain.vb         ----> メインフォームクラス
       + FlashSample.sln       ----> VB.NETプロジェクトファイル
       + SampleProject.suo 

 

Flash側のソース

◆コマンドの送信
 fscommand関数にてVB.NET側にコマンドを送信することができます。
  fscommand( "コマンド名", "パラメータ" ) となります。
 VB.NET側では xxx_FSCommand( sender, event ) として値を受け取ることができます。

◆コマンドの受信
 起動時にloaderInfoクラスからパラメータを読み出します。
  loaderInfo.parameters[ "変数名" ] で読み出すことができます。

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.
package  {
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.system.fscommand;
    public class Main extends MovieClip {        
        // ====== ただの送信回数カウンタ
        var    m_Count:Number;
        public function Main() {
            ?
            // ====== とりあえず停止
            this.stop();
            m_Count    = 0;
            // ============================================
            //    送信ボタンのクリックイベントリスナを追加
            // ============================================
            this.mcSendButton.addEventListener(MouseEvent.CLICK,
                     function(avEvent:MouseEvent ) { SendCtrlAppli(); } );
            // ============================================
            //    アプリケーションから起動時に通知されていたデータを表示
            // ============================================
            try {
                txtReceive.text =    loaderInfo.parameters["ApplNotify"];
                txtSub.text         =    loaderInfo.parameters["ApplTest"];
            }catch ( ex:Error ) {
                txtReceive.text = "read error";
            }
        }
        // ============================================
        //    制御アプリに対してデータを送信します
        // ============================================
        private function SendCtrlAppli() {
            // ====== 制御アプリに送信する適当なメッセージを生成
            var mySendMessage:String    = 
                    "フラッシュからコマンド送信 : 回数 ==> " + m_Count.toString();
            // ====== 制御アプリに対してコマンドを送信
            fscommand"FlashNotify", mySendMessage );
            // ====== カウントアップ(わかりやすいようにしてるだけ)
            m_Count++;
            trace("send : " + mySendMessage );
        }
    }    
}
このコードは CodePublisher で生成しています

 

VB.NET側のソース

 ◆コマンドの送信
  値は.FlashVars"変数名"="値"で設定してやれば渡せます。
  また複数渡したい場合は以下のように&で区切れば渡せます。
   xxx.FlashVars = "変数名A" + "=" + "パラメータ" + "&" + "変数名B" + "=" + "パラメータ"

 ◆コマンドの受信
  xxx_FSCommandイベントハンドラにて文字列としてコマンドを受信できます。

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.
Option Strict On
Option Explicit On
?
Public Class frmMain
?
    ''' ========================================================== 
    ''' <summary> 
    '''      <para>FSCommand受信イベントハンドラ</para> 
    ''' </summary>  
    ''' =========================================================== 
    Private Sub AxShockwaveFlash1_FSCommand(ByVal sender As ObjectByVal e As  _
                        AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent) _
                                               Handles AxShockwaveFlash1.FSCommand
        txtReceive.Text = "command:" + e.command + ",  "
        txtReceive.Text += "param:" + e.args
    End Sub
?
?
    ''' ========================================================== 
    ''' <summary> 
    '''      <para>ボタンクリックイベントハンドラ</para> 
    ''' </summary>  
    ''' ===========================================================     
    Private Sub btnLoad_Click(ByVal sender As System.Object, _
                                ByVal e As System.EventArgsHandles btnLoad.Click
        ' ====== オープンダイアログのインスタンスを生成
        Dim myDialog As System.Windows.Forms.OpenFileDialog = _
                                    New System.Windows.Forms.OpenFileDialog
?
        ' ====== SWFファイルのみ選択可能にする
        myDialog.Filter = "Flashファイル(*.swf)|*.swf"
        myDialog.Title = "Flashファイルを選択して下さい"
?
        ' ====== ダイアログを開いてファイルを選択
        If myDialog.ShowDialog(Me<> Windows.Forms.DialogResult.OK Then Return
?
        ' ====== Flashへ起動時に渡すパラメータ([変数名=パラメータ]のカタチで渡す)
        ' ====== 他にも渡すときは、&で連結する。(&変数名=パラメータ)
        AxShockwaveFlash1.FlashVars = "ApplNotify=aiueo" + txtPara1.Text _
                                    + "&ApplTest=" + txtPara2.Text
?
?
        ' ====== FLASHをロード
        AxShockwaveFlash1.LoadMovie(0, myDialog.FileName)
    End Sub
End Class
このコードは CodePublisher で生成しています

 

注意事項

 Flashの.LoadMovie()メソッドは、無効なファイル名が入力されたり、
 読み込んでいるファイルが指定された場合何もおきないようです。
 よってこのサンプルの[Flashをロード]ボタンで同じファイルを読み込んでも値が反映されません。

 

応用したサンプル

 ファイル 40-2.png
 フラッシュ側でMCの位置を編集し、それをVB.NET側で保持するようにしてみました。
 サンプルのダウンロード

コメント

Coercaneumuro

MJ is a freelance writer for Clickshops, Inc. where you can find a great selection of Bush office furniture for your small business at www.businessofficefurniture.comCopyright (c) 2008 Gigi Reynard
7) The economy will do much better when companies are left to compete in the market place with minimal government involvement. A case in point, the Reagan administration had a policy of less government during the 1980s. This resulted in long term economic growth. This is the exact opposite of what the Obama administration is trying to do.
<a href=http://www.pigeonrun.fr/spip.php?page=forum&id_article=19&id_forum=84+Result:+chosen+nickname+%22FloorUnregoJX%22;+success+-+posted+to+first+encountered+partition+%22http://www.pigeonrun.fr/spip.php?page=forum&id_article=19&id_forum=84%22;>Ovenseteebads share </a> Praimaedill link to this blog now Jellemisp like this website quick <a href=http://speed-info.blog.tut.by/gostevaya-kniga/comment-page-3/#comment-422>Aluflalarrort tweet these blogs fast </a> Chollaple look at this article quick

コメントを投稿する

コメントを投稿する場合は以下に注意してください。

・記事に関係する内容であること
・特別な理由がない限り「全体公開」であること

これさえ守っていただければどんな内容でも投稿可能です。
皆様の質問やコメントは他の方の問題解決に繋がりますのでご協力ください。

コメント投稿フォーム
名前
メール
URL
コメント
閲覧制限

コメントを投稿するには、以下の問題に答えてください。
問題:「このサイト名をカタカナ六文字にして入力してください」