注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

火力光波的博客

火一般的热情 光一样的速度

 
 
 

日志

 
 

Media Player控件说明  

2009-10-10 13:59:06|  分类: VB6编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Media Player控件说明(VB6.0)

凭借着VB强大的多媒体功能,编写一个窗口用来播放VCD及WAV音乐等是一件极其简单的事情,使用MCI或者是Media Playe控件可以轻松办到。你使用的是人家编好的播放器核心,自己只要在其外围添加控制代码即可(如果你够“狂”,可以自己编写核心,但……)。


用这样的控件可以很随意的办到播放VCD的效果,但这样做未免也太缺乏个性化了,比如说你使用了MediaPlaye控件而不做任何修改的话,那你的播放器就是一个地地道道的Windows MediaPlayer,完全不像你自己编出来的程序。然而,假如要做一个完全属于自己(看起来是这样)的播放器却有些困难,因为你需要把这个控件的常用属性和方法给弄明白。

在我编写程序的时候,对MediaPlaye控件可真是一窍不通,找书看,列出得都是最基本的播放代码;上网找资料,虽然看起来资料挺多的,无奈网上文章一大抄,你抄我我抄你,到最后谁也没有抄出个所以然来。靠天靠地不如靠自己,我在“黑暗”中摸索了好久,终于弄清了MediaPlaye的大部分常用属性,在我的播放器编写完毕的时候(图),把MediaPlaye控件的使用方法给大家介绍一下,希望能对朋友们有所帮助。(特别提示:虽然更高级的MCI控件也可以很容易地实现播放VCD,但它直接对设备进行操作,使用不当会造成系统崩溃,而且功能也远不如MediaPlaye控件,更可恶的是它的可移植性是在太差,所以不建议使用。)

本来是想向大家系统地讲述一下一个真正的多媒体播放器的具体制作过程,但考虑到这样做反而会让人胡涂,所以这里只介绍MediaPlaye控件的各项常用属性,大家在掌握了上述属性后即可轻松开发出属于自己的VCD播放器。

何为MediaPlaye控件?说白了就是一个精简版的Windows MediaPlayer,只不过是不能自行播放而已,它是Windows MediaPlayer的核心。Windows MediaPlayer是一个功能强大的多媒体播放器,采用它的核心所制作出来的播放器可以播放除死敌REAL格式外的几乎所有格式的多媒体文件,心动不如行动,让LET'S GO!

打开Visual Basic 6.0,在控件箱上面单击鼠标右键,打开“部件”选项卡。你可以很轻松地在靠下的位置找到MediaPlaye控件,选中它确定,这样在控件箱里就可以找到刚刚添加进去的Media Playe控件了。双击MediaPlaye控件,控件会自行添加到你的窗口中,怎么样,活脱脱的的一个Windows Media Player,在程序运行时单击鼠标右键还可以弹出菜单,下面的关于选项明确说明你正在使用的是Media Player控件,这和Windows Media Player没什么不同。

如何播放多媒体文件首先我们需要给 Media Player控件指定播放目录,如果你想让程序运行时自动运行,那么可以在你的程序中添加如下代码:
Private Sub Form_Load()
mediaplayer1.filename=""
End Sub
其中""内是你想要播放的多媒体文件的路径,记住,后缀名是一定要加上的。好了,现在按F5看看,你的播放器可以正常运行了。Media Playe控件的AutoStart的属性默认是True,所以在你指定完文件路径时它便会自动播放。如果你不想让它自动播放可以将它的属性设为False。这时,你可以在自己的窗体上添加一个按钮,在双击按钮,在随后出现的代码框里输入
Mediaplayer1.play
这样,在程序运行后只要单击这个按钮就可以播放了。(如果你想用对话框来设定路径的话可以往窗体上添加一个对话框控件,不过这不在本文的讨论范围,如果你有疑问可以直接写信给我。)当然,这时你会发现你的播放器上面有其自带的控制按钮和状态条,为了显示自己的个性,你需要把它们隐藏起来。方法是把MediaPlayer控件的ShowControls属性设为False。

如此一来控制播放器的操作就 成为接下来工作的重点。播放按钮相信你已经会做了,下面列出其他几个按钮的控制代码:

暂停:MediaPlayer1.pause
停止:MediaPlayer1.stop
快进和后退当然也可以使用类似的代码完成,不过我发现效果并不明显,我们需要稍加修改。你可以在快进按钮事件中添加以下代码:

dim t
t = MediaPlayer1.CurrentPosition + MediaPlayer1.Duration \ 50
If t <= MediaPlayer1.Duration Then
MediaPlayer1.CurrentPosition = MediaPlayer1.CurrentPosition +
MediaPlayer1.Duration \ 50
end if

你可能对MediaPlayer的CurrentPosition 和Duration不是很了解,让我们来见识一下吧。Duration是MediaPlayer控件的总时间,通过它你可以轻松地获取将要播放的多媒体文件的总共时间,一个方法就是在你的窗体上添加一个Label控件,添加如下代码:

Label1.caption=Mediaplayer1.Duration
这样在你载入影片后Label1控件上就会显示出总共时间。不过一个新问题冒了出来,那就是显示的时间是以毫秒计的,而传统的播放器的时间格式都是00:00这样的。这就需要格外编写一个函数来解决问题了,先不要着急,咱们慢慢来。

CurrentPosition反映出正在播放的多媒体文件的即时时间,遗憾的是它并不能自动刷新以准确实时反映出当前的播放进度,换句话来说这个东东每运行一次就只能反映出它运行时那一刹那的播放进度。不过问题不是无法解决的,我们可以想方设法让它每隔一秒钟自动刷新一次,看来得请Timer控件出马了。

在你的窗口上添加一个Timer控件,将其的Interval属性设为1000,也就是一秒;Enabled属性设为false,我们不希望在没有播放多媒体文件的时候它就已经运行了,因为这是没有意义的,你需要在播放的同时将Timer控件的Enable设为True。为了显示实时时间,你还要在窗体上添加一个Label2控件并设计以下代码:

Private Sub Timer1_Timer()
Label2.caption=mediaplayer1.CurrentPosition
End Sub
这样就可以每隔一秒刷新一次mediaplayer1.CurrentPosition同时显示在Label2.caption上面了。

下面我们来设计一个转换时间格式的函数,用来将毫秒转化成我们需要的格式:

Private Function Tstring(sm As Long) As String
s = sm \ 60
m = (sm Mod 60)
Tstring = Format(s, "00") & ":" & Format(m, "00")
End Function

其中Tstring是我们的函数名,s和m分别代表着分和秒,Tstring = Format(s, "00") & ":" &
Format(m, "00"一句用来格式化输出。这样再将我们的程序稍加修改,就可以达到目标了。
Private Sub Timer1_Timer()
Label2.caption=Tstring(mediaplayer1.CurrentPosition)
End Sub
播放控制条的实现:

同样的,这里也要利用到MediaPlayer的CurrentPosition 和Duration。首先在你的窗体上添加一个HScrollBar控件,并在Timer1_Timer()过程中添加如下代码:

HScroll1.Max=mediaplayer1.Duration
HScroll1.Value = MediaPlayer1.CurrentPosition
这样程序将每隔一秒中刷新一次HScroll1的Value属性,在程序运行时你会发现水平滚动条会随着影片的 播放而自动向右移动。由于MediaPlayer的urrentPosition属性不是只读的,如果你想通过拖动水平滚动条来控制播放进度的话只要双击HScroll1控件,填写以下代码就可以了:

Private Sub HScroll1_Change()
MediaPlayer1.CurrentPosition= HScroll1.Value
End Sub
这样一来我们的播放器就基本上实现了最基本的全部功能,如果你不想让它出现右键菜单而要自己设计的话可以将mediaplayer控件的EnableContextMenu属性设为False;还有一些属性可以自己摸索,很容易掌握。

以上程序只是实现了基本功能,实际上还有很多BUG尚代解决,假如你亲手去做会很容易地发现它们,解决的方法都很简单,自己考虑吧。

另外还有一些高级技巧我也不是很懂,希望各位如果有新发现能够来信与我探讨。由于我也是个初学者,而且从来没有写过类似文章,望各位高手不要笑话我,谢谢。^_^

在这里MediaPlayer1.CurrentPosition代表着正在播放影片的时间,也就是说明该影片已经播放了多少时间;MediaPlayer1.Duration代表着正在播放的影片的总时间。现在你明白代码的意思了吧,就是说每按动一次“快进”按钮,播放时间等于播放时间加上总时间的50/1,这样也就达到了快进的效果。50是精度,数字越大精度越高,但快进的幅度越大,怎么样,受点启发了吧。

来源:随风驿站

  评论这张
 
阅读(1797)| 评论(9)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017