开篇:润墨网以专业的文秘视角,为您筛选了一篇基于Authorware 7的个性化媒体播放器的设计与实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
摘要:在authorware 7.0中利用ActiveX控件和外部函数能够实现个性化媒体播放器的视频播放控制部分的设计,对于弹出式菜单设计、按钮激活条件的设置以及滑块控制进度和音量等都比较容易。
关键词:ActiveX;外部函数;菜单;按钮;滑块;播放器
中图分类号:TP311文献标识码:A 文章编号:1009-3044(2008)11-20329-03
1 前言
Authorware作为一种主要面向非程序员的优秀的交互式多媒体创作工具,为了满足一些高级设计人员进行复杂程序创作的需要,Authorware从4.0版本开始提供了对ActiveX控件和外部函数的支持,由于有许多软件厂商支持ActiveX技术,所以大多数功能都能找到相应的ActiveX控件。在Authorware中,通过调用ActiveX控件来直接使用现成的程序模块,可省掉许多繁琐的编程,而且几乎可以完成任何工作。
目前,媒体播放器越来越追求个性化,为了满足个性化的需求,我们可以借助图形图像处理软件使播放界面个性化,在Authorware 7.0中利用控件以及外部函数能设计出播放各种媒体的个性化播放器。在设计视频播放控制时,要注意播放、暂停、继续、停止、快进、后退等操作的激活条件,进度滑块及音量滑块能及时地响应交互。在Authorware 7.0中设计的媒体播放器运行界面如图1所示。
2 ActiveX控件的应用
ActiveX控件通常以动态链接库的形式存在,其设计思想是将一个程序嵌入到另一个程序中,这样就可使它能够随意地应用到各种场合。ActiveX控件的数据输入和函数功能执行都必须通过容器,因此ActiveX控件和容器之间必须有一些特定的接口协议。ActiveX控件必须具备属性(property)、方法(method)和事件(event),通过属性的名称、方法的名称及参数,容器可以存取和改变ActiveX控件的属性参数。通过事件,比如属性参数的改变、用户按下鼠标左键等,ActiveX控件通知容器进行响应相关操作。
2.1 ActiveX控件的安装
在开发Authorware的应用程序时,如果利用了ActiveX控件,在打包时要注意两点:(1)在用户的应用程序中需附带上所需的支持文件,即在应用程序的“Xtras”目录里附带上Activex.x32,因为只有这样应用程序才能够正常地执行,否则程序中的ActiveX控件是无法使用的。但是需要注意的是打包程序无须附带上Actxpriv.x32,否则会造成不可预料的后果,因为它主要负责设计时利用ActiveX控件的界面。(2)要将所需的ActiveX控件相关文件(*.OCX或*.DLL)复制到硬盘相应的文件夹中(Windows NT以后的操作系统是%systemroot%\system32),本播放器应用程序在设计时需要复制MSDXM.OCX、COMDLG32.OCX、FM20.DLL、FM20CHS.DLL四个文件,然后将其在Windows系统中注册。
2.2 ActiveX控件的注册
设计Authorware应用程序时,如果要使用Authorware没有提供的控件,使用前要先在Windows中进行手动注册。如果我们的程序中使用了控件且要交给用户使用,在程序中应先检测用户机中是否注册了该控件,若没有就要进行自动安装、自动注册。本播放器使用时需要检测Microsoft Forms 2.0 ScrollBar、Microsoft Common Dialog Control和Windows Media Player三个控件,以便确定是否要安装、注册。
注册的方法有两种:
(1)手动注册
方法:先将所需的ActiveX控件相关文件(如MSDXM.OCX、COMDLG32.OCX、FM20.DLL、FM20CHS.DLL)复制到硬盘相应的文件夹中(Windows NT以后的操作系统是%systemroot%\system32)。然后手动注册,即单击Windows的“开始”菜单,选择“运行”命令,在打开的对话框中输入以下命令: regsvr32.exe,如regsvr32.exe MSDXM.OCX。
regsvr32.exe是Windows自带的ActiveX注册工具,可以在Windows的系统目录中找到。
(2)自动注册
方法:利用Authorware 中的Xtra ActiveX 里的函数来进行注册。对ActiveX控件注册的格式如下: ActiveXControlRegister("")。
本播放器应用程序使用了三个控件,图2是媒体播放器设计窗口。
图标FileDialog负责打开文件,用的是Microsoft Common Dialog Control控件;图标VolumeBar负责音量调节,图标PositionBar负责进度处理,两者用的是同一种控件Microsoft Forms 2.0 ScrollBar;图标MediaPlay负责媒体播放,用的是Windows Media Player控件。在计算图标Register中设置程序进行自动检测、安装和注册,程序如下:
――获取三个控件的classID
classIDScrollBar:="{DFD181E0-5E2F-11CE-A449-00AA004A803D}"
classIDDialog:="{F9043C85-F6F2-101A-A3C9-08002B2F49FB}"
classIDMediaplay:="{22D6F312-B0F6-11D0-94AB-0080C74C7E95}"
――获取系统文件夹
WindowsPath:=getosdirectory()
――判断当前系统是否支持控件注册
if ActiveXInstalled()=-1 then
――判断Microsoft Forms 2.0 ScrollBar滚动条控件是否已安装
if ActiveXControlQuery(classIDScrollBar)=0 then
――拷贝FM20.DLL和FM20CHS.DLL两个文件到系统目录
CopyFile(FileLocation^"FM20.DLL",WindowsPath^"\\system32\\FM20.DLL")
CopyFile(FileLocation^"FM20CHS.DLL",WindowsPath^"\\system32\\FM20CHS.DLL")
――注册Microsoft Forms 2.0 ScrollBar滚动条控件
ActiveXControlRegister(WindowsPath^"\\system32\\FM20.DLL")
end if
――判断、注册Microsoft Common Dialog Control,version 6.0通用对话框控件
if ActiveXControlQuery(classIDDialog)=0 then
CopyFile(FileLocation^"COMDLG32.OCX",WindowsPath^"\\system32\\COMDLG32.OCX")
ActiveXControlRegister(WindowsPath^"\\system32\\COMDLG32.OCX")
end if
――判断、注册Windows Media Player 6.4控件
if ActiveXControlQuery(classIDMediaplay)=0 then
CopyFile(FileLocation^"MSDXM.OCX",WindowsPath^"\\system32\\MSDXM.OCX")
ActiveXControlRegister(WindowsPath^"\\system32\\MSDXM.OCX")
end if
end if
3 弹出式菜单
现在许多播放器都有弹出式菜单功能,如在图1中的MENU按钮上单击时会出现有“打开文件”、“全屏播放”和“退出”三个子菜单项的菜单,且单击某个子菜单项时执行相应操作。其设计原理是创建菜单、激活菜单、响应子菜单项。
3.1 创建菜单
计算图标BuildMenu中的程序负责创建菜单,mCreatePopupMenu()、mAppendMenu( Menu, Flags , MenuID , MenuText )、mMenuHookOn( WindowHandle )函数都置于外部函数budmenu.u32中,使用时需载入到Authorware中,程序如下:
――选择的菜单项的ID的初值
LastMenuID := -1
――添加一个filename主菜单项
filemenu := mCreatePopupMenu()
mAppendMenu( filemenu , 0 , 10 , "打开文件")
mAppendMenu( filemenu , 0 , 11, "全屏播放")
mAppendMenu(filemenu,2048,0,"")
mAppendMenu( filemenu , 0 , 12 , "退出")
――设置与Authorware通信的消息钩子
mMenuHookOn( WindowHandle )
3.2 激活菜单
为了确保交互灵活,按钮响应MenuActivation的响应需设为永久、返回,该响应包含的两个计算图标FileMenuTrack和ReturnLastMenuID的顺序不可颠倒。
(1)计算图标FileMenuTrack的程序为:
――激活菜单
mTrackPopupMenu(filemenu,0,ResponseLeft@“MenuActivation”+WindowLeft,ResponseTop@“MenuActivation”+ResponseHeight@“MenuActivation”+WindowTop,0,WindowHandle,0 )
(2)计算图标ReturnLastMenuID的程序为:
――获取最后选择的菜单项的ID
LastMenuID := mGetLastMenuID()
Checked@"MenuActivation" := FALSE
3.3 响应子菜单项
根据获取的最后选择的子菜单项的ID 值来执行相应的响应为永久、返回的条件响应:LastMenuID=10 、LastMenuID=11和LastMenuID=12,从而实现文件打开、全屏播放和退出。
(1)计算图标LastMenuID=10的程序为:
――打开文件
SetSpriteProperty(@"FileDialog", #dialogtitle, "请选择一个视频文件:")
SetSpriteProperty(@"FileDialog", #BaseURL, FileLocation)
SetSpriteProperty(@"FileDialog", #filter, "视频文件|*.mpg;*.avi;*.mpeg;*.dat;*.asf")
CallSprite(@"FileDialog", #showopen)
getFile:=GetSpriteProperty(@"FileDialog", #FileName)
SetSpriteProperty(@"MediaPlay", #FileName,getFile)
SetSpriteProperty(@"MediaPlay",#displaysize,4)
CallSprite(@"MediaPlay",#play)
LastMenuID:=-1
(2)计算图标LastMenuID=11的程序为:
――设置为全屏播放
SetSpriteProperty(@"MediaPlay",#displaysize,3)
LastMenuID:=-1
3)计算图标LastMenuID=12的程序为:
――退出
mMenuHookOff()
mDestroyMenu(filemenu)
Quit()
4 按钮控制
4.1 按钮激活条件
在设计按钮控制时,要合理设置播放(从头开始)、暂停、继续、停止(回到开头)、快进、后退等按钮的激活条件,文件没打开所有按钮应不可用,播放时继续按钮应处于隐藏状态,暂停时停止按钮不可用但继续按钮激活,停止时暂停按钮不可用且继续按钮隐藏,视频正常播放结束时暂停、停止、快进不可用且继续隐藏。
4.2 程序设置
为了实现上述要求,在设计时每一个按钮交互都要从两方面考虑:激活条件和程序内容。
play:激活条件为playfile"",计算图标内容为:
SetSpriteProperty(@"MediaPlay", #CurrentPosition,1)
CallSprite(@"MediaPlay", #Play)
pause:激活条件为(playstate=2)&(CurrentPosition
CallSprite(@"MediaPlay", #Pause)
resume:激活条件为(playstate=1)&(CurrentPosition
CallSprite(@"MediaPlay", #Play)
stop:激活条件为(playstate=2)&(CurrentPosition
SetSpriteProperty(@"MediaPlay", #CurrentPosition,1)
CallSprite(@"MediaPlay", #stop)
fastforward:激活条件为CurrentPosition
Duration:=GetSpriteProperty(@"MediaPlay", #Duration)
CurrentPosition:=GetSpriteProperty(@"MediaPlay", #CurrentPosition)
if CurrentPosition
NewPosition:=CurrentPosition+15
else
NewPosition:=Duration
end if
SetSpriteProperty(@"MediaPlay", #CurrentPosition,NewPosition)
CallSprite(@"MediaPlay", #play)
fastreverse:激活条件为CurrentPosition>1,计算图标内容为:
Duration:=GetSpriteProperty(@"MediaPlay", #Duration)
CurrentPosition:=GetSpriteProperty(@"MediaPlay", #CurrentPosition)
if CurrentPosition>15 then
NewPosition:=CurrentPosition-15
else
NewPosition:=0
end if
SetSpriteProperty(@"MediaPlay", #CurrentPosition,NewPosition)
CallSprite(@"MediaPlay", #Play)
5 滑块控制进度及音量
5.1 滑块作用
拖动水平滑块,调整文件播放进度,且滑块在水平滚动条上的位置与文件当前进度的百分比一致。拖动垂直滑块,调整音量大小,且滑块在垂直滚动条上的位置与系统音量大小的百分比一致。
5.2 事件响应设置
在两个事件响应BarSetMaster和BarSetPosition中,响应都设为永久、返回,事件响应BarSetMaster的事件设为发送“图标VolumeBar”的事件“Change”, 事件响应BarSetPosition的事件设为发送“图标PositionBar”的事件“Change”。
(1)计算图标BarSetMaster内容为:
volume:=GetSpriteProperty(@"VolumeBar",#value)
baSetVolume("master",100-volume)
(2)计算图标BarSetPosition内容为:
position:=GetSpriteProperty(@"PositionBar",#value)
Duration:=GetSpriteProperty(@"MediaPlay", #Duration)
CurrentPosition:=position/100*Duration
SetSpriteProperty(@"MediaPlay", #CurrentPosition,CurrentPosition)
CallSprite(@"MediaPlay", #Play)
PauseFlag:=1
6 结束语
在Authorware中如果能够合理地运用ActiveX控件和外部函数,个性化媒体播放器可以设计的非常完善,各种功能都能实现,即使是滑块动态地显示当前进度、播放状态等也能较好地解决。
参考文献:
[1] 毕广吉.Authorware多媒体开发程序设计与典型实例[M].北京:人民邮电出版社,2004.
[2] 陈学韶.Authorware7多媒体设计师特训班[M].四川:四川电子音像出版中心,2004.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文