欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Flash player1

 

DIY自己的Flash播放器

出處:PConline
責任編輯:pjl

[02-3-5 15:57] 作者:cyberian


請參考網(wǎng)絡(luò )學(xué)院的另一篇文章:《在flash中控制vb 程序》

  要說(shuō)Flash動(dòng)畫(huà)是時(shí)下網(wǎng)上最流行的東東想來(lái)不會(huì )有人反對的,每當看到優(yōu)秀作品筆者就急不可待download,但是收集了那么多卻發(fā)現沒(méi)有好用的Flash播放器來(lái)播放。筆者首先想到的是Flash5中自帶的播放器,可是其功能實(shí)在太弱,而且還要安裝幾十MB的Flash5,未免大材小用,難道只能在網(wǎng)頁(yè)上欣賞嗎?于是,我想到自己做一個(gè)--這聽(tīng)上去很誘人,復雜嗎?別擔心,用VB就行,做出來(lái)的播放器功能一點(diǎn)也不弱,具有相當水準,你可以自由的選擇播放、暫停、重播,還可以單幀逐步播放,來(lái)觀(guān)察作者的每一步設想,甚至可以像看VCD一樣看Flash文件,隨意跳幀。夠酷吧!讓你充分體驗一回作為軟件DIYer的樂(lè )趣。

  下面我將詳細地闡述整個(gè)開(kāi)發(fā)過(guò)程。

  ::理論分析::

  ·如何實(shí)現播放Flash動(dòng)畫(huà)?

  Flash播放器也屬于多媒體播放器的一類(lèi),所以應包括完整的播放控制功能:播放、暫停、停止、重播、后退一幀、前進(jìn)一幀、最后一幀、快退、快進(jìn),循環(huán)播放和全屏幕播放。由于Flash動(dòng)畫(huà)是矢量動(dòng)畫(huà),針對此特點(diǎn)還得有縮放和質(zhì)量調節的功能。

  要實(shí)現如此多的功能無(wú)須自己編程,只要調用系統中的Flash播放控件提供的接口,其實(shí)Flash5中自帶的播放器和網(wǎng)上眾多的Flash播放都是這樣做的。

  如果你上網(wǎng)能正常瀏覽有Flash動(dòng)畫(huà)的網(wǎng)頁(yè),那么你的系統中已經(jīng)有此控件了。若沒(méi)有,你可以通過(guò)“控制面板”-“添加/刪除程序”進(jìn)行安裝。選擇“Windows安裝程序”頁(yè),在“多媒體”中選擇“詳細資料”,“Macromedia Shockwave Flash”就是我們需要的,將其前面的復選框選中,再將Windows安裝光盤(pán)放入光驅?zhuān)c(diǎn)擊“確定”即可將控件Swflash.ocx安裝注冊;或者你也可以直接在瀏覽有Flash動(dòng)畫(huà)的網(wǎng)頁(yè)IE提示你下載此控件時(shí)自動(dòng)下載安裝。

  說(shuō)到這里你可能認為既然控件很容易得到,又只不過(guò)是調用控件提供的接口,沒(méi)有什么難點(diǎn)。請注意!基于Flash控件的開(kāi)發(fā)是沒(méi)有公開(kāi)的技術(shù)資料可查的,其資料必須以開(kāi)發(fā)商業(yè)軟件為目的同Macromedia簽定有關(guān)協(xié)議后才可能獲得,而且是要付費的。因此筆者在開(kāi)發(fā)過(guò)程中走了不少彎路,有些屬性和方法的使用是在摸索中逐漸搞清楚的,部分接口到目前為止筆者還是不知道怎樣使用,在后面的源代碼中你也能看得出探索的痕跡。

·特別問(wèn)題:如何全屏幕播放?

  全屏幕播放是個(gè)看似簡(jiǎn)單,實(shí)現起來(lái)一點(diǎn)也不容易的功能。在所有的播放控制功能中,全屏幕播放是唯一一個(gè)不是由Flash控件提供的,因為只有窗口才有全屏的概念,控件則沒(méi)有,因此它需要播放器自己實(shí)現。全屏的要求是窗口充滿(mǎn)屏幕,并且無(wú)標題條的邊框,這就需要在運行時(shí)刻動(dòng)態(tài)改變窗口的風(fēng)格,但我們知道VB開(kāi)發(fā)的程序,沒(méi)有提供在運行時(shí)刻動(dòng)態(tài)更改窗口風(fēng)格的方法(運行時(shí)更改窗口的BorderStyle無(wú)效,ControlBox屬性不能在運行時(shí)更改),看來(lái)惟有借助Windows API了。Windows在user32.dll中提供了一組對應函數來(lái)分別獲取和更改窗口的屬性--GetWindowlong和SetWindowLong,它們都可以在VB的API Loader中找到:Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long;
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long。其中hwnd參數是被操作窗口的句柄;nIndex參數告訴函數要操作窗口的什么屬性,在本程序中傳入GWL_STYLE值,其他參數值可查閱MSDN;dwNewLong參數是新的窗口屬性值。標準的窗口風(fēng)格是有標題條和可縮放的邊框,對應的窗口風(fēng)格參數值是WS_CAPTION和WS_THICKFRAME,所以要實(shí)現全屏只要將窗口風(fēng)格屬性中的這兩個(gè)值去掉就達到效果了,要恢復也很簡(jiǎn)單,重新加上這兩個(gè)值即可。

  了解原理后,下面我們就進(jìn)行編程實(shí)踐了!

::編程實(shí)踐::

  打開(kāi)VB,新建一個(gè)標準的EXE工程,將工程名稱(chēng)命名為"MyFlashPlayer",在控件箱中添加CommonDialog、StatusBar、Slider、ShockwaveFlash控件。將默認生成的窗口Name屬性改為"frmMyFlashPlayer",Caption改為"My FlashPlayer",ScaleMode改為"3 - Pixel",然后依次添加以下控件:

  1、12個(gè)按鈕(CommandButton),Name屬性分別為"cmdPlaySWF"、"cmdPauseSWF"、"cmdStopSWF"、
"cmdRewindSWF"、"cmdStepBackSWF"、"cmdStepForwardSWF"、"cmdGotoEndSWF"、
"cmdFastBackSWF"、"cmdFastForwardSWF"、"cmdZoomInSWF"、"cmdZoomOutSWF"、
"cmdZoomNoSWF",Caption屬性分別為“播放”、“暫停”、“停止”、“重播”、“后退”、“前進(jìn)”、“末幀”、“快退”、“快進(jìn)”、“放大”、“縮小”、“正常”。

  2、1個(gè)劃動(dòng)條(Slider),Name屬性為SliderSWF,Max屬性為"100"(表示100%),TickStyle屬性為"3 - sldNoTicks"。1個(gè)狀態(tài)欄(StatusBar),雙擊其屬性中的“(自定義)”,在彈出的屬性頁(yè)的窗格欄中,插入2個(gè)窗格,并將2個(gè)窗格的對齊方式設置為"1 - sbrCenter"。

  3、1個(gè)定時(shí)器(Timer),Name屬性為T(mén)imerSWF,Enabled屬性為"False",Interval屬性為"1000"。1個(gè)通用對話(huà)框(CommonDialog),Name屬性為"OpenDialogSWF",DialogTitle屬性為“打開(kāi)Flash動(dòng)畫(huà)文件”,Filter屬性為“Flash動(dòng)畫(huà)文件(*.swf)|*.swf|所有文件(*.*)|*.*”,FilterIndex屬性為"1"。

  4、1個(gè)ShockwaveFlash控件,Name屬性為MyShockwaveFlash,點(diǎn)擊鼠標右鍵彈出快捷菜單,選擇“置前”,使其在所有控件的最上面,全屏幕播放需要此設置,在后面源代碼中筆者將說(shuō)明其用途。

  5、打開(kāi)菜單編輯器,添加如下菜單:“文件(&F)”(mnuFileSWF)、“打開(kāi)(&O)”(Ctrl+O)(mnuOpenSWF)、“退出(&X)”(mnuExitSWF)、“查看(&V)”(mnuViewSWF)、“質(zhì)量(&Q)”(mnuQualitySWF)、“高(&H)”(復選)(mnuQualityHigh)、“中(&M)”(mnuQualityMedium)、“低(&L)”(mnuQualityLow)、“循環(huán)播放(&L)”(復選)(mnuLoopSWF)、“快捷菜單(&M)”(復選)(mnuMenuSWF)、“全屏幕播放(&F)”(F11)(mnuFullScreenSWF)。其中“文件”包括“打開(kāi)”、“退出”,“查看”包括“質(zhì)量”、“循環(huán)播放”、“快捷菜單”、“全屏幕播放”,“質(zhì)量”又包括“高”、“中”、“低”。

  好了,界面設計完成,效果如圖1。



圖1
接下來(lái)我們輸入以下代碼:

Option Explicit

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA"
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA"
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Const GWL_STYLE = (-16)
‘ 窗口風(fēng)格參數值
Private Const WS_CAPTION = &HC00000
Private Const WS_THICKFRAME = &H40000

Private Sub cmdFastBackSWF_Click()
‘ 向后5%
If MyShockwaveFlash.FrameNum >= 0 Then
MyShockwaveFlash.GotoFrame (
(SliderSWF.Value - SliderSWF.LargeChange) * 0.01 * (MyShockwaveFlash.TotalFrames - 1))
End If
End Sub

Private Sub cmdFastForwardSWF_Click()
‘ 向前5%
If MyShockwaveFlash.FrameNum >= 0 Then
MyShockwaveFlash.GotoFrame (
(SliderSWF.Value + SliderSWF.LargeChange) * 0.01 * (MyShockwaveFlash.TotalFrames - 1))
End If
End Sub

Private Sub cmdGotoEndSWF_Click()
‘ 到最后一幀
If MyShockwaveFlash.FrameNum >= 0 Then
MyShockwaveFlash.GotoFrame (MyShockwaveFlash.TotalFrames - 1)
End If
End Sub

Private Sub cmdPauseSWF_Click()
‘ 暫停播放
‘ ShockwaveFlash控件中沒(méi)有多媒體播放器中典型的名為“Pause”的功能
‘ 只有兩個(gè)看不出區別的功能:StopPlay和Stop,都是用來(lái)暫停播放的

MyShockwaveFlash.StopPlay
End Sub

Private Sub cmdPlaySWF_Click()
‘ 播放
MyShockwaveFlash.Play
End Sub

Private Sub cmdRewindSWF_Click()
‘ 返回到第一幀,自動(dòng)開(kāi)始播放
MyShockwaveFlash.Rewind
MyShockwaveFlash.Play
End Sub

Private Sub cmdStepBackSWF_Click()
‘ 后退一幀
MyShockwaveFlash.Back
End Sub

Private Sub cmdStepForwardSWF_Click()
‘ 前進(jìn)一幀
MyShockwaveFlash.Forward
End Sub

Private Sub cmdStopSWF_Click()
‘ 停止
‘ 一般多媒體播放器停止的行為是停止播放并返回到第一幀
‘ 但ShockwaveFlash控件中沒(méi)有這樣的功能
‘ 所以只能以“返回到第一幀”和“暫停播放”兩個(gè)功能組合實(shí)現

MyShockwaveFlash.Rewind
MyShockwaveFlash.StopPlay
End Sub

Private Sub cmdZoomInSWF_Click()
‘ 放大一倍,以原先為50%
MyShockwaveFlash.Zoom (50)
End Sub

Private Sub cmdZoomNoSWF_Click()
‘ 正常大小
MyShockwaveFlash.Zoom (0)
End Sub

Private Sub cmdZoomOutSWF_Click()
‘ 縮小一倍,以原先為200%
MyShockwaveFlash.Zoom (200)
End Sub

Private Sub Form_Load()
‘ 設置打開(kāi)文件對話(huà)框的標志為:
‘ 文件名和路徑都必須有效,并且不顯示“以只讀方式打開(kāi)(R)”的復選項
OpenDialogSWF.Flags = cdlOFNFileMustExist Or cdlOFNPathMustExist Or cdlOFNHideReadOnly
End Sub

Private Sub Form_Resize()
If Me.WindowState <> vbMinimized Then
‘ 當窗口不是最小化時(shí),根據窗口大小調整各控件的位置和大小
‘ 否則計算高度和寬度時(shí)會(huì )出現非正數而出錯
If Me.ScaleHeight > (cmdPlaySWF.Height + StatusBarSWF.Height + SliderSWF.Height) Then
MyShockwaveFlash.Move 0, cmdPlaySWF.Height + 8,
Me.ScaleWidth, Me.ScaleHeight - cmdPlaySWF.Height - StatusBarSWF.Height - SliderSWF.Height - 16
End If

SliderSWF.Top = Me.ScaleHeight - StatusBarSWF.Height - SliderSWF.Height
SliderSWF.Width = Me.ScaleWidth

StatusBarSWF.Panels(1).MinWidth = Me.ScaleWidth * 0.6
StatusBarSWF.Panels(2).MinWidth = Me.ScaleWidth * 0.2
StatusBarSWF.Panels(3).MinWidth = Me.ScaleWidth * 0.2
End If
End Sub

Private Sub mnuClose_Click()
TimerSWF.Enabled = False
MyShockwaveFlash.Movie = "http://" ‘ 只有此參數才能關(guān)閉當前動(dòng)畫(huà),如果傳入vbNullString會(huì )出錯
StatusBarSWF.Panels(1).Text = vbNullString
StatusBarSWF.Panels(1).ToolTipText = vbNullString
StatusBarSWF.Panels(2).Text = vbNullString
StatusBarSWF.Panels(3).Text = vbNullString
SliderSWF.Value = 0
End Sub

Private Sub mnuExitSWF_Click()
Unload Me
End Sub

Private Sub mnuFullScreenSWF_Click()
‘ 全屏幕播放,隱藏播放控制和進(jìn)度顯示
Dim ReturnValue As Long, WindowStyle As Long
mnuFullScreenSWF.Checked = Not mnuFullScreenSWF.Checked
If mnuFullScreenSWF.Checked Then
‘ 更改窗口風(fēng)格為無(wú)邊框和無(wú)標題條,并且充滿(mǎn)屏幕
WindowStyle = GetWindowLong(Me.hwnd, GWL_STYLE)
ReturnValue = SetWindowLong(Me.hwnd, GWL_STYLE, WindowStyle - WS_CAPTION - WS_THICKFRAME)

Me.WindowState = vbNormal
Me.Move 0, 0, Screen.Width, Screen.Height

‘ 因為ShockwaveFlash在所有控件的最上面
‘ 所以無(wú)須隱藏其他控件就可充滿(mǎn)窗口
MyShockwaveFlash.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
Else
‘ 恢復窗口風(fēng)格為正常式樣,并且還原為默認大小
WindowStyle = GetWindowLong(Me.hwnd, GWL_STYLE)
ReturnValue = SetWindowLong(Me.hwnd, GWL_STYLE, WindowStyle Or WS_CAPTION Or WS_THICKFRAME)

Me.Move 0, 0, 488 * Screen.TwipsPerPixelX, 446 * Screen.TwipsPerPixelY
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
End If
End Sub

Private Sub mnuLoopSWF_Click()
‘ 設置ShockwaveFlash是否循環(huán)播放
mnuLoopSWF.Checked = Not mnuLoopSWF.Checked
MyShockwaveFlash.Loop = mnuLoopSWF.Checked
End Sub

Private Sub mnuMenuSWF_Click()
‘ 設置ShockwaveFlash快捷菜單是否可用
mnuMenuSWF.Checked = Not mnuMenuSWF.Checked
MyShockwaveFlash.Menu = mnuMenuSWF.Checked
End Sub

Private Sub mnuOpenSWF_Click()
‘ 打開(kāi)Flash動(dòng)畫(huà)文件
On Error GoTo ErrorOpenSWF

OpenDialogSWF.ShowOpen
If OpenDialogSWF.FileName <> vbNullString Then
StatusBarSWF.Panels(1).Text = OpenDialogSWF.FileName
StatusBarSWF.Panels(1).ToolTipText = OpenDialogSWF.FileName
MyShockwaveFlash.Movie = OpenDialogSWF.FileName
TimerSWF.Enabled = True ‘ 開(kāi)始顯示播放進(jìn)度
StatusBarSWF.Panels(2).Text = Format$(MyShockwaveFlash.TotalFrames, "共#幀")
End If
Exit Sub

ErrorOpenSWF:
‘ 打開(kāi)Flash動(dòng)畫(huà)文件中有個(gè)Bug:
‘ 如果打開(kāi)了一個(gè)非Flash動(dòng)畫(huà)格式或是損壞的Flash動(dòng)畫(huà),ShockwaveFlash控件將產(chǎn)生異常錯誤
‘ 但之后就無(wú)法再打開(kāi)任何完好的Flash動(dòng)畫(huà)了,即無(wú)法給Movie屬性賦予任何有效值了,只有關(guān)閉程序再重新運行
‘ 我猜測可能是ShockwaveFlash控件的問(wèn)題

MsgBox "不是有效的Flash動(dòng)畫(huà),或Flash動(dòng)畫(huà)已損壞,程序將被關(guān)閉!", vbCritical
Unload Me
End Sub

Private Sub mnuQualityHigh_Click()
‘ 高質(zhì)量
MyShockwaveFlash.Quality2 = "High" ‘等同于:MyShockwaveFlash.Quality = 1
mnuQualityHigh.Checked = True
mnuQualityMedium.Checked = False
mnuQualityLow.Checked = False
End Sub

Private Sub mnuQualityLow_Click()
‘ 低質(zhì)量
MyShockwaveFlash.Quality2 = "Low" ‘等同于:MyShockwaveFlash.Quality = 0
mnuQualityHigh.Checked = False
mnuQualityMedium.Checked = False
mnuQualityLow.Checked = True
End Sub

Private Sub mnuQualityMedium_Click()
‘ 中質(zhì)量
MyShockwaveFlash.Quality2 = "Medium" ‘無(wú)對應數字值,只能用字符串賦值
mnuQualityHigh.Checked = False
mnuQualityMedium.Checked = True
mnuQualityLow.Checked = False
End Sub

Private Sub mnuWebOpen_Click()
Dim SWFURL As String
SWFURL = InputBox("輸入動(dòng)畫(huà)鏈接地址")
If SWFURL <> vbNullString Then
MyShockwaveFlash.Movie = SWFURL
End If
End Sub

Private Sub SliderSWF_Scroll()
If MyShockwaveFlash.FrameNum >= 0 Then
‘ 根據劃動(dòng)條的值為百分比跳轉到動(dòng)畫(huà)播放進(jìn)度
MyShockwaveFlash.GotoFrame (SliderSWF.Value * 0.01 * (MyShockwaveFlash.TotalFrames - 1))
Else
SliderSWF.Value = 0
End If
End Sub

Private Sub TimerSWF_Timer()
‘ ShockwaveFlash控件沒(méi)有播放進(jìn)度的事件
‘ 因此使用定時(shí)器顯示當前動(dòng)畫(huà)的播放信息
SliderSWF.Value = MyShockwaveFlash.FrameNum / (MyShockwaveFlash.TotalFrames - 1) * 100
SliderSWF.ToolTipText = CStr(SliderSWF.Value) + "%"
StatusBarSWF.Panels(3).Text = Format$(MyShockwaveFlash.FrameNum + 1, "第0幀")
End Sub

::結束語(yǔ)::

  完成后編譯運行,運行效果如圖2。



圖2

  打開(kāi)一個(gè)Flash動(dòng)畫(huà),按一下播放控制按鈕,拖動(dòng)一下劃動(dòng)條,再試一下全屏幕播放(圖3)。



圖3(點(diǎn)擊看大圖)

  真的很酷!至此一個(gè)DIY的Flash播放器制作成功了,整個(gè)軟件的源代碼不算多,但功能卻要比Flash5自帶的播放器強大無(wú)數倍哦:)。網(wǎng)上總有人問(wèn)如何成為高手,其實(shí)像這樣親手做一個(gè)功能完整的小軟件就能在開(kāi)發(fā)過(guò)程中逐漸提高水平。

  本程序的系統兼容性極佳,雖然筆者是基于Flash5播放控件在Win98SE+VB6中調試通過(guò)的,理論上只要Windows中安裝了Flash5播放控件軟件就能運行,所以我相信從Win95到WinXP都是能正常運行的。

  如果你是DIY發(fā)燒一族兼高手,還可以美化一下界面,將窗口變成你喜歡的形狀,并在此程序基礎上增加更強大的功能:播放EXE格式的Flash動(dòng)畫(huà)、播放列表、音量控制、截取某一幀的圖片等,那么恭喜恭喜,你做出了世界上最完美的Flash播放器?。?!

  如有什么問(wèn)題,請發(fā)EMAIL到cyberian@citiz.net和我討論。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
VB 屏幕顯示文字
用VB編寫(xiě)FLASH動(dòng)畫(huà)播放器
在PPT課件中實(shí)現對swf的控制
利用QRmaker制作二維碼
VB利用ADO控件連接access數據庫
全國計算機二級VB復習資料
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久