VB6 與 AS2之間的數據通訊,AS3類同

          2008年的時候我在百度知道上已經回答過,你亦說你看過這帖了,但你說還不明白 那我就詳細地說一下吧
          http://zhidao.baidu.com/question/43875593.html?si=1


          flash發送數據到容器    javascript(面向網頁)中一般推薦使用   flash.external.ExternalInterface.call

          但在VB(或其它的語言中),一般建議使用fscommand(command, args)這種方式來通訊 ,

          在VB端(其它就是基于shockwaveFlash控件的內部事件 其它VC Delphi類同)

          有一個這樣的針對swf 控件的事件處理子過程 

          Private Sub ShockwaveFlash1_FSCommand(ByVal command As String, ByVal args As String)
          '具體看看形參就知道 如何跟  flash中的 fscommand函數格式對應了 
              Select Case command
                  Case "play"

                  Case "stop"
              
              End Select
          End Sub







          flash -> VB的通訊 就像上面這樣 
          通過 select case 來判斷分支多個command的操作




          而重要的是 VB -> flash方面的使用

          一般的SetVariable這種方法  或者 使用 flashVars來傳入參數,都是基于很被動的方式動作,即設置了值 ,如果flash方面不主動檢測的話,就不會引發其它相關的動作

          所以一般推薦使用基于事件處理的  callFunction方式

          swf控件.callFunction  xml格式數據

          xml格式數據的構成是
          <invoke name="flash里面的偵聽名" returntype="xml"><arguments><string>數據</string></arguments></invoke>

          要發送的數據需要使用 <數據類型></數據類型> 包裹
          相關的類型說明詳見 http://www.cnblogs.com/maconel/archive/2010/09/29/1838743.html 

          但一般使用默認的String就足夠了 包括數值數據也可以用它發送


          這是最基本的數據格式  即可以這樣寫

          swf控件.callFunction  <invoke name=""flash里面的偵聽名""returntype=""xml""><arguments><string>數據</string></arguments></invoke>
          '<string>數據</string>  這里設置要發送的字符數據





          而flash方面要寫的as代碼

          as2:  

          flash.external.ExternalInterface.addCallback("flash里面的偵聽名",this, funcCall);
          function funcCall(str1:String):Void{
               //這里的str1對應第一個參數  就是 數據
             //如果有多個參數 依次在這里形參聲明
             //傳入的數據可以在flash里任意處理
          }



          as3:  
          //as2和as3中的 ExternalInterface對象的  addCallback函數原型有所不同   這里不用添加this指向
          flash.external.ExternalInterface.addCallback("flash里面的偵聽名", funcCall);
          function funcCall(str1:String):void{
               //這里的str1對應第一個參數  就是 數據
             //如果有多個參數 依次在這里形參聲明
          }








          這里為了方便  整理出一個vb端的發送代碼 直接調用封裝好的方法就可以發送數據
          復制內容到剪貼板
          代碼:
          Private Sub Form_Load()
          ShockwaveFlash1.Movie = App.Path & "\as2.swf"
             '下面這是必須的格式   使用 getStr函數為傳入的字符串兩邊加上<String></String>
             'getCallFuncStr函數為已經格式好的 參數對添加上頭尾的xml格式聲明
            'CWScallFunc  重構調用swf控件的方法 派發數據
              Dim str As String
              str = getStr("strUsername") & getStr("strUserid") '這里傳入兩個參數
            CWScallFunc ShockwaveFlash1, getCallFuncStr("UserData", str)
             
          End Sub
          Private Sub ShockwaveFlash1_FSCommand(ByVal command As String, ByVal args As String)
              Select Case command
                  Case "trace"
                      MsgBox args
              End Select
          End Sub
          Private Function getStr$(v$)
              '時間關系 這里只設置默認的string 如有更多數據類型需要 可參看http://www.cnblogs.com/maconel/archive/2010/09/29/1838743.html
              
              '自行擴展
              getStr = IIf(v <> "", "<string>" & v & "</string>", "")
          End Function
          Private Function getCallFuncStr$(FuncName$, Optional v$ = "")
          '=======此參數  FuncName$需與flash端偵聽名同步
              Dim strXmlop, strXmled As String
              strXmlop = "<invoke name=""" & FuncName & """returntype=""xml""><arguments>" '定義XML開始語句 name 后定義調用函數名
              strXmled = "</arguments></invoke>"
             getCallFuncStr = strXmlop & v & strXmled
          End Function
          Private Sub CWScallFunc(obj As ShockwaveFlash, v$)
              '重構
              obj.CallFunction v
              '如果報 callfunction IShockwaveFlash 失敗 基本就沒救了 flash10的問題
          End Sub
          [ 本帖最后由 HSZZLZL 于 2011-1-11 11:43 編輯 ]

          posted on 2011-04-19 15:55 aiaiwoo 閱讀(569) 評論(0)  編輯  收藏 所屬分類: ASP/Visual Basic

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 仁布县| 翁牛特旗| 上饶县| 临沧市| 崇义县| 墨玉县| 祁东县| 中卫市| 莲花县| 曲靖市| 凤山市| 关岭| 菏泽市| 丰城市| 夏邑县| 合山市| 姚安县| 阳朔县| 三明市| 泰宁县| 台东市| 攀枝花市| 茂名市| 余江县| 荃湾区| 榆中县| 临邑县| 卢湾区| 司法| 阳江市| 额尔古纳市| 昂仁县| 巴林左旗| 陆河县| 伊吾县| 汾阳市| 界首市| 咸宁市| 彝良县| 新竹县| 永年县|