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 编辑 ]