最新更新 sitemap 网站制作设计本站搜索
网页设计
国外网站 韩国网站 个人主页 手提袋设计 CSS 网页特效 平面设计 网站设计 Flash CMS技巧 服装网站 php教程 photoshop 画册 服务器选用 数据库 Office
虚拟主机 域名注册 云主机 网页设计 客服QQ:8208442
当前位置:首页 > 编程开发 > VB开发

VB技巧:用MMControl控件播放M3U文件的实现

日期:10-14    来源:中国设计秀    作者:cnwebshow.com

在以前,VB程序员大都以为MMControl控件在应付媒体文件方面不是很争气,笔者甚至在一些颇有权威的书籍上看到在探讨完这个控件之后建议读者:如欲编制一个能播放MP3文件的播放器,请去找相关控件。其实,这是对MMControl的误解。MMControl作为能对系统硬件进行操作和控制的控件,其功能是强大的,它对付MP3也不在话下!不信?我以前也不信——专家都这么以为嘛。可现在我信了:我在VB6.0、PWin98下试验成功!播放质量?呵呵,比Mediaplayer好不了多少。Bill的东西嘛,让人又爱又无奈…… o0Q中国设计秀
遗憾的是,MMCtrol控件不支持M3U列表文件。这得处理一下。谁叫M3u那么方便呢? o0Q中国设计秀
我们知道,M3U其实是和TXT文件性质一样的东西,都是文本文件。M3U文件所存储的内容是一系列的媒体文件所在的二进制地址,如将M3U文件打开并把各个媒体文件所在位置的标志存入数组,就可以叫MMControl一一地播放了。考虑到资源的占用问题,笔者以下的实例将M3U文件的内容打开后添加到列表框,然后让MMControl进行处理,有兴趣的朋友可以试一下数组。 o0Q中国设计秀
本例需要:按钮若干;列表框一个;Timer一个;ProgressBar(进度条)一个;老M当然不能少了。 o0Q中国设计秀
详细代码如下: o0Q中国设计秀
o0Q中国设计秀
Option Explicit o0Q中国设计秀
o0Q中国设计秀
Dim MaxVal As Long '进度条Max值变量 o0Q中国设计秀
Dim MyInd As Integer '播讲的文件索引变量 o0Q中国设计秀
Dim sF As String '要播放的M3U文件 o0Q中国设计秀
o0Q中国设计秀
Private Sub cmdNext_Click() '“下一首”按钮代码 o0Q中国设计秀
PlayNext o0Q中国设计秀
List1.SetFocus '让按钮好看点,下同 o0Q中国设计秀
End Sub o0Q中国设计秀
o0Q中国设计秀
Private Sub cmdPause_Click() '“暂停”按钮代码 o0Q中国设计秀
MMControl1.Command = "Pause" o0Q中国设计秀
List1.SetFocus o0Q中国设计秀
End Sub o0Q中国设计秀
o0Q中国设计秀
Private Sub cmdPlay_Click() '“播放”按钮代码 o0Q中国设计秀
List1.SetFocus o0Q中国设计秀
If MMControl1.Command = "Stop" Or MMControl1.Command = "Pause" Then o0Q中国设计秀
MMControl1.Command = "Play" o0Q中国设计秀
Else o0Q中国设计秀
Call PlayMe '交给PlayMe处理 o0Q中国设计秀
End If o0Q中国设计秀
End Sub o0Q中国设计秀
o0Q中国设计秀
Private Sub cmdExit_Click() '“退出”按钮代码 o0Q中国设计秀
MMControl1.Command = "close" '关闭以释放资源 o0Q中国设计秀
End o0Q中国设计秀
End Sub o0Q中国设计秀
o0Q中国设计秀
Private Sub cmdPre_Click() '“前一首”按钮代码 o0Q中国设计秀
Timer1.Enabled = False o0Q中国设计秀
List1.SetFocus o0Q中国设计秀
If MyInd = 0 Then '当前是第一首则播放最后一首 o0Q中国设计秀
List1.ListIndex = List1.ListCount - 1 o0Q中国设计秀
Else '否则播放前一首 o0Q中国设计秀
List1.ListIndex = MyInd - 1 o0Q中国设计秀
End If o0Q中国设计秀
MyInd = List1.ListIndex '这个变量要记得改哟 o0Q中国设计秀
Call PlayMe o0Q中国设计秀
End Sub o0Q中国设计秀
o0Q中国设计秀
Private Sub Form_Load() '程序加载 o0Q中国设计秀
Timer1.Enabled = False o0Q中国设计秀
Timer1.Interval = 1000 o0Q中国设计秀
List1.BackColor = vbBlack o0Q中国设计秀
List1.ForeColor = vbYellow o0Q中国设计秀
MMControl1.Visible = False o0Q中国设计秀
MyInd = 0 o0Q中国设计秀
cmdOpen.Value = True '“打开”按钮被按下 o0Q中国设计秀
'OpenM3u '打开M3U文件 o0Q中国设计秀
'PlayMe '播放 o0Q中国设计秀
End Sub o0Q中国设计秀
o0Q中国设计秀
Private Sub cmdOpen_Click() '“打开”按钮代码 o0Q中国设计秀
On Error GoTo openerr: o0Q中国设计秀
List1.Clear o0Q中国设计秀
CommonDialog1.Filter = "(*.m3u)|*.m3u" '这个不用说了吧 o0Q中国设计秀
CommonDialog1.ShowOpen o0Q中国设计秀
sF = CommonDialog1.FileName o0Q中国设计秀
OpenM3u '打开M3U文件 o0Q中国设计秀
Exit Sub o0Q中国设计秀
openerr: o0Q中国设计秀
Timer1.Enabled = False '出错则不能让计时器工作 o0Q中国设计秀
'出错信息自己写吧 o0Q中国设计秀
End Sub o0Q中国设计秀
o0Q中国设计秀
'当点击右上角的“×”按钮时 o0Q中国设计秀
Private Sub Form_Unload(Cancel As Integer) o0Q中国设计秀
MMControl1.Command = "Close" '关闭设备以释放资源 o0Q中国设计秀
End Sub o0Q中国设计秀
o0Q中国设计秀
Private Sub List1_dblClick() '双击列表框事件 o0Q中国设计秀
MyInd = List1.ListIndex o0Q中国设计秀
cmdPlay.Value = True o0Q中国设计秀
End Sub o0Q中国设计秀
o0Q中国设计秀
'判断是否要播放下一首 o0Q中国设计秀
Private Sub MMControl1_StatusUpdate() o0Q中国设计秀
If MMControl1.Position = MMControl1.Length Then o0Q中国设计秀
PlayNext o0Q中国设计秀
End If o0Q中国设计秀
End Sub o0Q中国设计秀
o0Q中国设计秀
Private Sub PlayMe() '播放媒体文件 o0Q中国设计秀
With MMControl1 '以下语句是不是有点罗嗦? o0Q中国设计秀
.FileName = List1.List(MyInd) o0Q中国设计秀
.Command = "stop" o0Q中国设计秀
.Command = "close" o0Q中国设计秀
.Command = "Open" o0Q中国设计秀
.Command = "play" o0Q中国设计秀
End With o0Q中国设计秀
MaxVal = MMControl1.Length o0Q中国设计秀
Timer1.Enabled = True o0Q中国设计秀
Me.Caption = List1.List(MyInd) '显示正在播放的文件名称 o0Q中国设计秀
ProgressBar1.ToolTipText = "播放总数:" & List1.ListCount & "首" o0Q中国设计秀
''显示播放文件总数 o0Q中国设计秀
End Sub o0Q中国设计秀
o0Q中国设计秀
Private Sub Timer1_Timer() o0Q中国设计秀
'进度条的Max和Value值 o0Q中国设计秀
ProgressBar1.Max = MaxVal o0Q中国设计秀
ProgressBar1.Value = MMControl1.Position o0Q中国设计秀
End Sub o0Q中国设计秀
o0Q中国设计秀
Private Sub PlayNext() '播放下一首 o0Q中国设计秀
Timer1.Enabled = False o0Q中国设计秀
ProgressBar1.Value = 0 o0Q中国设计秀
MyInd = MyInd + 1 '当然加1了 o0Q中国设计秀
If MyInd >= List1.ListCount Then MyInd = 0 o0Q中国设计秀
Call PlayMe '呵呵,偷懒一下吧 o0Q中国设计秀
List1.ListIndex = MyInd o0Q中国设计秀
End Sub o0Q中国设计秀
o0Q中国设计秀
Private Sub OpenM3u() '打开M3U文件并存入内存 o0Q中国设计秀
On Error GoTo M3uErr o0Q中国设计秀
Dim AllLines As New Collection '内存中集全 o0Q中国设计秀
Dim CurrentLine As Long '当前行集合索引 o0Q中国设计秀
Dim nextLine As String '从文件中读出的每一行 o0Q中国设计秀
Dim InFile As Integer '文件的描述符 o0Q中国设计秀
InFile = FreeFile o0Q中国设计秀
Open sF For Input As InFile '打开文件 o0Q中国设计秀
While Not EOF(InFile) o0Q中国设计秀
Line Input #InFile, nextLine o0Q中国设计秀
AllLines.Add nextLine o0Q中国设计秀
Wend o0Q中国设计秀
Close InFile o0Q中国设计秀
Dim i As Integer o0Q中国设计秀
'以下为提取各行 o0Q中国设计秀
For i = 0 To AllLines.Count - 1 o0Q中国设计秀
CurrentLine = CurrentLine + 1 o0Q中国设计秀
If AllLines.Count < CurrentLine Then o0Q中国设计秀
CurrentLine = 1 o0Q中国设计秀
End If o0Q中国设计秀
If AllLines.Count > 0 Then '当然要加入列表框啦 o0Q中国设计秀
List1.AddItem AllLines.Item(CurrentLine) o0Q中国设计秀
End If o0Q中国设计秀
Next i o0Q中国设计秀
MMControl1.FileName = List1.List(0) '老M终于有文件要处理了 o0Q中国设计秀
List1.ListIndex = 0 o0Q中国设计秀
' 列表框第一项高亮——老M就是靠它来判断下一首是什么 o0Q中国设计秀
Exit Sub o0Q中国设计秀
M3uErr: o0Q中国设计秀
'......我累了 o0Q中国设计秀
End Sub o0Q中国设计秀
o0Q中国设计秀
最后想提醒一下:由于MMControl控件直接对MCI发出各种指令,在编程时需要格外谨慎,否则……去尝试一下吧!o0Q中国设计秀

本文引用地址:/bc/article_61277.html
网站地图 | 关于我们 | 联系我们 | 网站建设 | 广告服务 | 版权声明 | 免责声明