本帖最后由 阿達(dá) 于 2010-3-17 15:20 編輯
用flash做界面很漂亮,但是用戶(hù)系統(tǒng)很可能沒(méi)有flash,我目前用以下方法處理:
用
- IsObject(CreateObject("shockwaveflash.shockwaveflash"))
復(fù)制代碼
判斷用戶(hù)系統(tǒng)是否有flash
如果有
- Public WithEvents shockwaveFlash As VBControlExtender
- Set Frm_Main.shockwaveFlash = Frm_Main.Controls.Add("ShockwaveFlash.ShockwaveFlash", "Flash")
- Frm_Main.shockwaveFlash.object.LoadMovie 0, App.Path & "ui.swf"
復(fù)制代碼
這樣來(lái)動(dòng)態(tài)創(chuàng)建flash控件,好處是這樣程序在用戶(hù)系統(tǒng)沒(méi)有flash的情況下也可以正常運(yùn)行,不會(huì)報(bào)錯(cuò)。
如果用戶(hù)系統(tǒng)沒(méi)有,就用個(gè)容器,里面放些死的圖片,實(shí)現(xiàn)同樣的功能。
通信方面,flash調(diào)用vb的:
- Private Sub shockwaveFlash_ObjectEvent(info As EventInfo)
- Select Case info.Name
- Case "FSCommand"
- 'info.EventParameters("command").Value
- 'info.EventParameters("args").Value
- '上面兩句可以拿到fscommand的兩個(gè)參數(shù)
- Case Else '其他事件
- End Select
- End Sub
復(fù)制代碼
flash中 fscommand(xxx, xxx); 就可以啦
vb調(diào)用flash的:
- //flash中增加、聲明一個(gè)回調(diào)函數(shù)供vb調(diào)用
- ExternalInterface.addCallback("vbCallBack", vbCallBack);
- function vbCallBack(valA:String, valB:String):void
- {
- //
- }
- 'vb中這樣搞
- shockwaveFlash.object.CallFunction "<invoke name=""vbCallBack"" returntype=""xml""><arguments><string>參數(shù)a</string><string>參數(shù)b</string></arguments></invoke>"
復(fù)制代碼
這樣就好啦,就是來(lái)回都只能用string類(lèi)型,如果是圖片,得先base64成字符串,然后傳來(lái)解析。
另外如果一個(gè)程序中同時(shí)有幾個(gè)flash之間要通信,可以用flash的管道,不需要通過(guò)程序轉(zhuǎn)。
再付上一個(gè)屏蔽flash右鍵的
- 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
- Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
- 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
- Public Const GWL_WNDPROC = -4
- Private Const WM_RBUTTONDOWN = &H204
- Public ret As Long
- Function WindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
- If Msg = WM_RBUTTONDOWN Then Exit Function '這里可以還增加自己的代碼用于響應(yīng)flash中的右鍵行為
- WindowProc = CallWindowProc(ret, hwnd, Msg, wParam, lParam)
- End Function
- '由于vb中flash控件沒(méi)有hwnd,記得delphi中是有的,當(dāng)時(shí)讓我很郁悶,調(diào)用得如下:
- ret = SetWindowLong(FindWindowEx(Picture1.hwnd, 0&, "MacromediaFlashPlayerActiveX", vbNullString), GWL_WNDPROC, AddressOf WindowProc)
復(fù)制代碼
收工~~~~ |