关于vb中插flash的一些问题

关于vb中插flash的一些问题

该帖是精华帖,但您尚未登录,所以您现在看到的是共享版
本帖最后由 阿达 于 2010-3-17 15:20 编辑

用flash做界面很漂亮,但是用户系统很可能没有flash,我目前用以下方法处理:

  1. IsObject(CreateObject("shockwaveflash.shockwaveflash"))
复制代码
判断用户系统是否有flash

如果有
  1. Public WithEvents shockwaveFlash As VBControlExtender
  2. Set Frm_Main.shockwaveFlash = Frm_Main.Controls.Add("ShockwaveFlash.ShockwaveFlash", "Flash")
  3. Frm_Main.shockwaveFlash.object.LoadMovie 0, App.Path & "ui.swf"
复制代码
这样来动态创建flash控件,好处是这样程序在用户系统没有flash的情况下也可以正常运行,不会报错。

如果用户系统没有,就用个容器,里面放些死的图片,实现同样的功能


通信方面,flash调用vb的:
  1. Private Sub shockwaveFlash_ObjectEvent(info As EventInfo)
  2.     Select Case info.Name
  3.         Case "FSCommand"
  4.             'info.EventParameters("command").Value
  5.             'info.EventParameters("args").Value
  6.             '上面两句可以拿到fscommand的两个参数
  7.         Case Else '其他事件
  8.     End Select
  9. End Sub
复制代码
flash中 fscommand(xxx, xxx); 就可以啦


vb调用flash的:
  1. //flash中增加、声明一个回调函数供vb调用
  2. ExternalInterface.addCallback("vbCallBack", vbCallBack);
  3. function vbCallBack(valA:String, valB:String):void
  4. {
  5. //
  6. }

  7. 'vb中这样搞
  8. shockwaveFlash.object.CallFunction "<invoke name=""vbCallBack"" returntype=""xml""><arguments><string>参数a</string><string>参数b</string></arguments></invoke>"
复制代码
这样就好啦,就是来回都只能用string类型,如果是图片,得先base64成字符串,然后传来解析。

另外如果一个程序中同时有几个flash之间要通信,可以用flash的管道,不需要通过程序转。



再付上一个屏蔽flash右键的
  1. Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  2. Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  3. Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
  4. Public Const GWL_WNDPROC = -4
  5. Private Const WM_RBUTTONDOWN = &H204
  6. Public ret As Long

  7. Function WindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  8.     If Msg = WM_RBUTTONDOWN Then Exit Function '这里可以还增加自己的代码用于响应flash中的右键行为
  9.     WindowProc = CallWindowProc(ret, hwnd, Msg, wParam, lParam)
  10. End Function

  11. '由于vb中flash控件没有hwnd,记得delphi中是有的,当时让我很郁闷,调用得如下:
  12. ret = SetWindowLong(FindWindowEx(Picture1.hwnd, 0&, "MacromediaFlashPlayerActiveX", vbNullString), GWL_WNDPROC, AddressOf WindowProc)
复制代码
收工~~~~

posted on 2011-03-03 08:49 aiaiwoo 阅读(361) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿

随笔分类

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜