易语言播放器
1、.版本 2
.支持库 iext5
.支持库 iext
.支持库 EThread
.支持库 iext6
.支持库 OPenGL
.程序集变量 鼠标左键被按下, 逻辑型
.程序集变量 鼠标横向位置, 整数型
.程序集变量 鼠标纵向位置, 整数型
.程序集变量 当前状态, 整数型
.程序集变量 显示文本, 文本型
.程序集变量 播放器, 乖乖播放器
.程序集变量 现在位置, 整数型, , , 多功能条_滑块条现行位置
.程序集变量 打开文件对话框, 高级对话框
.程序集变量 播放列表序号, 整数型
.程序集变量 正在播放ID, 整数型
.程序集变量 状态判断, 整数型
.子程序 _关闭_被单击
结束 ()
.子程序 __启动窗口_创建完毕
播放器.创建 (液晶框.取窗口句柄 (), 0, 0, 液晶框.宽度, 液晶框.高度)
' =================================================播放器的液晶显示
记忆播放列表 ()
气球提示框1.弹出提示框 (195, 120, “双击图标打开菜单”, -1, )
.子程序 记忆播放列表
.局部变量 播放列表文件, 文本型
.局部变量 文件号, 整数型
.局部变量 a, 文本型, , "0"
.局部变量 b, 整数型
.局部变量 i, 整数型
播放列表文件 = 取运行目录 () + “\8H.DB”
播放列表框.全部删除 ()
文件号 = 打开文件 (播放列表文件, , )
i = 1
.判断循环首 (是否在文件尾 (文件号, ) = 假)
a = 分割文本 (读入一行 (文件号), “*.*”, )
b = 播放列表框.插入表项 (, , , , , )
播放列表框.置标题 (b, 0, 到文本 (i))
播放列表框.置标题 (b, 1, a [1])
播放列表框.置标题 (b, 2, a [2])
i = i + 1
.判断循环尾 ()
关闭文件 (文件号)
正在播放ID = -1
.子程序 _实时时钟_周期事件
启动线程 (&播放进度, , )
' =================================================加速获取播放进度
.子程序 播放进度
播放时间文本画板.底图 = { }
' 播放时间文本画板1.底图 = { }
时间文本标签.底图 = { }
播放时间文本画板.定位写出 (5, 0, 播放器.取播放时间文本 ())
' 播放时间文本画板.复制 (, , , , 播放时间文本画板1, , , )
时间文本标签.底图 = 播放时间文本画板.取图片 (0, -80)
构建水平滑块条 (中图形按钮.取窗口句柄 (), 右图形按钮.取窗口句柄 (), 进度.取窗口句柄 (), 0, 播放器.取总时间 (), 播放器.取播放时间 (), 0)
左图形按钮.宽度 = 中图形按钮.左边
.子程序 _音量拉动_位置被改变
播放器.音量 (音量拉动.位置)
.如果 (音量拉动.位置 = 0)
' 静音按钮.可视 = 假
.否则
' 静音按钮.可视 = 真
.如果结束
.子程序 _播放按钮_被单击
状态判断 = 1
播放器.播放暂停 ()
.子程序 打开实时时钟
实时时钟.时钟周期 = 1000
.子程序 关闭实时时钟
实时时钟.时钟周期 = 0
.子程序 打开缓冲时钟
缓冲时钟.时钟周期 = 500
.子程序 关闭缓冲时钟
缓冲时钟.时钟周期 = 0
.子程序 _缓冲时钟_周期事件
.局部变量 缓冲数据, 文本型
.局部变量 取播状态, 整数型
.如果真 (缓冲时钟.时钟周期 = 500 且 当前状态 = 1)
取播状态 = 播放器.当前播放状态 ()
缓冲数据 = 播放器.缓冲数据 ()
状态文本画板.底图 = { }
' 状态文本画板1.底图 = { }
' 状态文本标签.底图 = { }
状态文本画板.标题 = “ 缓冲 ” + 缓冲数据
' 状态文本画板.复制 (, , , , 状态文本画板1, , , )
' 状态文本标签.底图 = 状态文本画板.取图片 (0, -80)
.如果真 (取播状态 = 0)
关闭缓冲时钟 ()
.如果真结束
.如果真结束
.子程序 _状态时钟_周期事件
.局部变量 播放状态, 整数型
.局部变量 播放文本, 文本型
播放状态 = 播放器.当前播放状态 ()
.判断开始 (播放状态 = 0 且 当前状态 ≠ 0)
.如果 (状态判断 = 0)
.否则
_下一首按钮_被单击 ()
.如果结束
当前状态 = 0
显示文本 = “”
时间文本标签.标题 = “”
关闭实时时钟 ()
播放按钮.可视 = 真
暂停按钮.可视 = 假
.判断 (播放状态 = 1 且 当前状态 ≠ 1)
当前状态 = 1
显示文本 = “ 正在缓冲数据,请稍后...”
关闭实时时钟 ()
打开缓冲时钟 ()
播放按钮.可视 = 真
暂停按钮.可视 = 假
.判断 (播放状态 = 2 且 当前状态 ≠ 2)
当前状态 = 2
显示文本 = “”
关闭缓冲时钟 ()
播放按钮.可视 = 真
暂停按钮.可视 = 假
.判断 (播放状态 = 3 且 当前状态 ≠ 3)
当前状态 = 3
显示文本 = 播放器.取当前播放名称 ()
关闭缓冲时钟 ()
打开实时时钟 ()
播放按钮.可视 = 假
暂停按钮.可视 = 真
.判断 (播放状态 = 4 且 当前状态 ≠ 4)
当前状态 = 4
显示文本 = “ 正在加载数据,请稍后...”
关闭缓冲时钟 ()
关闭实时时钟 ()
播放按钮.可视 = 真
暂停按钮.可视 = 假
.判断 (播放状态 = 5 且 当前状态 ≠ 5)
当前状态 = 5
显示文本 = “ 地址错误”
时间文本标签.标题 = “”
关闭缓冲时钟 ()
关闭实时时钟 ()
播放按钮.可视 = 真
暂停按钮.可视 = 假
.默认
.判断结束
状态文本画板.底图 = { }
' 状态文本画板1.底图 = { }
' 状态文本标签.底图 = { }
.判断开始 (播放状态 = 3)
状态文本画板.标题 = “ 正在播放:” + 显示文本
滚动字幕时钟.时钟周期 = 1000
.默认
状态文本画板.标题 = 显示文本
滚动字幕时钟.时钟周期 = 0
.判断结束
' 状态文本画板.复制 (, , , , 状态文本画板1, , , )
' 状态文本标签.底图 = 状态文本画板.取图片 (0, -80)
.子程序 _左图形按钮_鼠标左键被按下, 逻辑型
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 功能键状态, 整数型
.局部变量 进度
.如果 (横向位置 < 中图形按钮.宽度 ÷ 2)
中图形按钮.左边 = 左图形按钮.左边
.否则
中图形按钮.左边 = 左图形按钮.左边 + 横向位置 - 中图形按钮.宽度 ÷ 2
.如果结束
左图形按钮.宽度 = 横向位置 - 中图形按钮.宽度 ÷ 2
进度 = 横向位置 ÷ 右图形按钮.宽度 × 播放器.取总时间 ()
播放器.快进 (进度)
.子程序 _右图形按钮_鼠标左键被按下, 逻辑型
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 功能键状态, 整数型
.局部变量 进度
.如果 (右图形按钮.宽度 - 横向位置 < 中图形按钮.宽度 ÷ 2)
中图形按钮.左边 = 右图形按钮.左边 + 右图形按钮.宽度 - 中图形按钮.宽度
.否则
中图形按钮.左边 = 横向位置 + 右图形按钮.左边 - 中图形按钮.宽度 ÷ 2
.如果结束
左图形按钮.宽度 = 横向位置 - 中图形按钮.宽度 ÷ 2
进度 = 横向位置 ÷ 右图形按钮.宽度 × 播放器.取总时间 ()
播放器.快进 (进度)
.子程序 _中图形按钮_鼠标左键被放开, 逻辑型
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 功能键状态, 整数型
.如果真 (到数值 (进度.内容) - 2 > 播放器.取播放时间 ())
播放器.快进 (到数值 (进度.内容))
.如果真结束
.如果真 (到数值 (进度.内容) + 2 < 播放器.取播放时间 ())
播放器.快进 (到数值 (进度.内容))
.如果真结束
.子程序 _中图形按钮_鼠标位置被移动, 逻辑型
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 功能键状态, 整数型
.如果真 (鼠标左键被按下)
.如果 (取鼠标水平位置 () ≤ _启动窗口.左边 + 左图形按钮.左边 + 鼠标横向位置)
中图形按钮.左边 = 左图形按钮.左边
.否则
.如果 (取鼠标水平位置 () ≥ _启动窗口.左边 + 右图形按钮.左边 + 右图形按钮.宽度 - (中图形按钮.宽度 - 鼠标横向位置))
中图形按钮.左边 = 右图形按钮.左边 + 右图形按钮.宽度 - 中图形按钮.宽度
.否则
中图形按钮.左边 = 取鼠标水平位置 () - _启动窗口.左边 - 左图形按钮.左边 + 中图形按钮.宽度 ÷ 2 - 鼠标横向位置
.如果结束
.如果结束
左图形按钮.宽度 = 中图形按钮.左边
.如果真结束
.子程序 _暂停按钮_被单击
播放器.播放暂停 ()
.子程序 _静音按钮_被单击
播放器.静音 ()
音量拉动.位置 = 0
静音按钮.可视 = 真
.子程序 _停止播放按钮_被单击
.如果真 (播放器.取地址 () ≠ “”)
播放器.停止 ()
状态判断 = 0
.如果真结束
.子程序 _最小化_被单击
位置 = 2
.子程序 _打开本地文件_被选择
.局部变量 序号, 短整数型
.局部变量 取歌曲名称, 文本型
.局部变量 取歌曲时间, 文本型
.局部变量 临时文本, 文本型
打开文件对话框.初始化 (0, “打开多媒体文件”, “媒体文件|*.wav;*.asx;*.wma;*.wmv;*.asx;*.asf;*.mp3;*.mp4;*.flv;*.f4v;*.flvx;*.avi;*.mpg;*.mpeg;*.rm;*.rmvb;*.mp2;*.mp5;*.vcd;*.dvd;*.vod;*.dat|所有文件|*.*”, , , , , )
打开文件对话框.打开 ()
.如果 (打开文件对话框.文件名 () = “”)
返回 ()
.否则
.如果结束
' 上面代码是打开本地文件对话框,并且过滤文件。
临时文本 = 到文本 (读入文件 (取运行目录 () + “\8H.DB”))
.如果 (寻找文本 (临时文本, 打开文件对话框.文件名 (), , 假) > -1)
播放器.地址 (打开文件对话框.文件名 ())
.否则
播放器.地址 (打开文件对话框.文件名 ())
取歌曲名称 = 到文本 (取文本左边 (取文本右边 (打开文件对话框.文件名 (), 取文本长度 (打开文件对话框.文件名 ()) - 倒找文本 (打开文件对话框.文件名 (), “\”, , 假)), 倒找文本 (取文本右边 (打开文件对话框.文件名 (), 取文本长度 (打开文件对话框.文件名 ()) - 倒找文本 (打开文件对话框.文件名 (), “\”, , 假)), “.”, , 假) - 1))
序号 = 播放列表框.取表项数 () ' 歌曲列表数目
播放列表框.插入表项 (, , , , , )
播放列表框.置标题 (序号, 0, 到文本 (播放列表框.取表项数 ())) ' 歌曲序号
播放列表框.置标题 (序号, 1, 取歌曲名称) ' 歌曲名称
播放列表框.置标题 (序号, 2, 打开文件对话框.文件名 ()) ' 歌曲地址
写到文件 (取运行目录 () + “\8H.DB”, 读入文件 (取运行目录 () + “\8H.DB”) + 到字节集 (取歌曲名称 + “*.*” + 打开文件对话框.文件名 () + #换行符))
.如果结束
.子程序 _打开网络文件_被选择
载入 (打开网络文件窗口, , 真)
.子程序 _播放列表按钮_被单击
.如果 (液晶框.宽度 = 953)
播放系统外框.宽度 = 250
液晶框.宽度 = 746
播放器.移动 (0, 0, 液晶框.宽度, 液晶框.高度)
.否则
播放系统外框.宽度 = 0
液晶框.宽度 = 953
播放器.移动 (0, 0, 液晶框.宽度, 液晶框.高度)
.如果结束
.子程序 _清空列表框_被单击
.如果 (信息 (“提示”, 3, #换行符 + #换行符 + #换行符 + #换行符 + “你确定要清空播放记录吗?清空后将无法恢复。”, 5) = #确认钮)
播放列表框.全部删除 ()
写到文件 (取运行目录 () + “\8H.DB”, 到字节集 (“”))
.否则
.如果结束
.子程序 _滚动字幕时钟_周期事件
.判断开始 (是否为双字节字符 (显示文本, 0) = 真) ' 检查标题首字是否为汉字,否则可能会出现乱码
显示文本 = 取文本右边 (显示文本, 取文本长度 (显示文本) - 2) + 取文本左边 (显示文本, 2)
.默认
显示文本 = 取文本右边 (显示文本, 取文本长度 (显示文本) - 1) + 取文本左边 (显示文本, 1)
.判断结束
.子程序 双击播放列表
播放器.地址 (播放列表框.取标题 (播放列表框.现行选中项, 2))
.子程序 _删除_被选择
.局部变量 载入播放列表, 文本型
.局部变量 载入选中项, 文本型
.局部变量 输出变更, 文本型
载入播放列表 = 到文本 (读入文件 (取运行目录 () + “\8H.DB”))
载入选中项 = 播放列表框.取标题 (播放列表框.现行选中项, 1) + “*.*” + 播放列表框.取标题 (播放列表框.现行选中项, 2) + #换行符
输出变更 = 子文本替换 (载入播放列表, 载入选中项, “”, , , 真)
写到文件 (取运行目录 () + “\8H.DB”, 到字节集 (输出变更))
播放列表框.删除表项 (播放列表框.现行选中项)
.子程序 _播放列表框_被双击, 逻辑型
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 功能键状态, 整数型
播放器.地址 (播放列表框.取标题 (播放列表框.现行选中项, 2))
正在播放ID = 播放列表框.现行选中项
状态判断 = 1
.子程序 _播放列表框_右键单击表项
弹出菜单 (列表菜单, , )
.子程序 _下一首按钮_被单击
.如果真 (正在播放ID = -1)
返回 ()
.如果真结束
.如果真 (正在播放ID = 播放列表框.取表项数 () - 1)
返回 ()
.如果真结束
正在播放ID = 正在播放ID + 1
.如果 (寻找文本 (播放列表框.取标题 (正在播放ID, 2), “://”, , 假) > -1)
启动线程 (&双击播放列表, , )
.否则
播放器.地址 (播放列表框.取标题 (正在播放ID, 2))
.如果结束
.子程序 _logo_被双击, 逻辑型
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 功能键状态, 整数型
弹出菜单 (播放系统菜单, _启动窗口.左边 + logo.左边 + 4, _启动窗口.顶边 + logo.顶边 + 60)
.子程序 _搜索清除按钮_被单击
编辑框2.内容 = “”
.子程序 _关于_被选择
载入 (窗口1, , 真)
.子程序 _更新_被选择
载入 (窗口2, , 真)
.子程序 _全部删除_被选择
载入 (窗口3, , 真)
.子程序 _窗口最小化_被选择
_启动窗口.位置 = 2
.子程序 _退出_被选择
销毁 ()
.子程序 _透明标签9_被双击, 逻辑型
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 功能键状态, 整数型
2、.版本 2
.支持库 internet
.程序集 读取数据库信息功能
.程序集变量 文件全部内容, 文本型, , "0"
.程序集变量 网页数据, 文本型
.程序集变量 分割内容, 文本型
.程序集变量 替换内容, 文本型
.程序集变量 最终内容, 文本型
.子程序 读取全部信息
网页数据 = 到文本 (HTTP读文件 (#网站地址 + “index.asp”))
分割内容 = 取文本中间内容 (删全部空 (网页数据), “-|-”, “-|-”)
最终内容 = 子文本替换 (分割内容, “@”, “*.*”, , , 真)
最终内容 = 取文本右边 (最终内容, 取文本长度 (最终内容) - 寻找文本 (最终内容, #换行符, , 假) - 1)
最终内容 = 子文本替换 (最终内容, “|”, “”, , , 真)
文件全部内容 = 分割文本 (到文本 (最终内容), #换行符, )
总页数 = 取数组成员数 (文件全部内容) ÷ 40
.如果真 (取数组成员数 (文件全部内容) % 40 ≠ 0)
总页数 = 总页数 + 1
.如果真结束
处理资源数据 (1)
.子程序 处理资源数据
.参数 页数
.局部变量 开始位置, 整数型
.局部变量 i, 整数型
.局部变量 a, 文本型, , "0"
.局部变量 b, 整数型
开始位置 = (页数 - 1) × 40
当前位置 = 页数
当前位置2 = 当前位置
3、.版本 2
.常量 类型_文本, "0", , 隐藏播放列表滚动条
.常量 菜单函数_按位置, "1024", , 隐藏播放列表滚动条
.常量 类型_分隔线, "2048", , 隐藏播放列表滚动条
.常量 窗口特征_窗口程序, "-4", , 隐藏播放列表滚动条
.常量 网站地址, "<文本长度: 20>"
4、.版本 2
.DLL命令 CallWindowProcA, 整数型, , "CallWindowProcA", , 隐藏播放列表框滚动条
.参数 程序指针, 子程序指针
.参数 窗口句柄, 整数型
.参数 消息, 整数型
.参数 参数1, 整数型
.参数 参数2, 整数型
.DLL命令 SetWindowLongA, 子程序指针, , "SetWindowLongA"
.参数 窗口句柄, 整数型
.参数 要置的特征, 整数型
.参数 新特征, 子程序指针, , 仅易语言3.0支持
5、.版本 2
.支持库 EThread
.支持库 iext
.程序集 窗口程序集2
.子程序 _确定按钮_被单击
.如果 (编辑框1.内容 = “”)
返回 ()
销毁 ()
.否则
.如果 (寻找文本 (编辑框1.内容, “://”, , 假) > -1)
启动线程 (&查找表项, , )
.否则
信息框 (“媒体URL地址不正确!”, 0, “错误提示”)
返回 ()
.如果结束
.如果结束
.子程序 查找表项
.局部变量 临时文本, 文本型
.局部变量 索引, 整数型
.局部变量 序号, 短整数型
.局部变量 取歌曲名称, 文本型
临时文本 = 到文本 (读入文件 (取运行目录 () + “\8H.DB”))
.如果 (寻找文本 (临时文本, 编辑框1.内容, , 假) > -1)
_启动窗口.播放器.地址 (编辑框1.内容)
.否则
_启动窗口.播放器.地址 (编辑框1.内容)
取歌曲名称 = 到文本 (取文本左边 (取文本右边 (_启动窗口.播放器.取播放文件名 (), 取文本长度 (_启动窗口.播放器.取播放文件名 ()) - 倒找文本 (_启动窗口.播放器.取播放文件名 (), “\”, , 假)), 倒找文本 (取文本右边 (_启动窗口.播放器.取播放文件名 (), 取文本长度 (_启动窗口.播放器.取播放文件名 ()) - 倒找文本 (_启动窗口.播放器.取播放文件名 (), “\”, , 假)), “.”, , 假) - 1))
序号 = _启动窗口.播放列表框.取表项数 () ' 歌曲列表数目
_启动窗口.播放列表框.插入表项 (, , , , , )
_启动窗口.播放列表框.置标题 (序号, 0, 到文本 (_启动窗口.播放列表框.取表项数 ())) ' 歌曲序号
_启动窗口.播放列表框.置标题 (序号, 1, 取歌曲名称) ' 歌曲名称
_启动窗口.播放列表框.置标题 (序号, 2, _启动窗口.播放器.取地址 ()) ' 歌曲地址
写到文件 (取运行目录 () + “\8H.DB”, 读入文件 (取运行目录 () + “\8H.DB”) + 到字节集 (取歌曲名称 + “*.*” + 编辑框1.内容 + #换行符))
.如果结束
销毁 ()
.子程序 _取消按钮_被单击
销毁 ()