關于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 閱讀(368) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 河西区| 麦盖提县| 庆城县| 华阴市| 大关县| 靖西县| 新绛县| 乡城县| 九江市| 台湾省| 肇州县| 栾川县| 九寨沟县| 巫山县| 怀仁县| 抚远县| 镇赉县| 德清县| 乌海市| 瓦房店市| 岢岚县| 嘉兴市| 隆化县| 柳河县| 岐山县| 马关县| 惠来县| 都昌县| 大兴区| 大英县| 奉新县| 清徐县| 遂平县| 巴林左旗| 枣阳市| 麻江县| 大城县| 穆棱市| 东至县| 乐山市| 称多县|