已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
个性化播放器与界面编辑器的应用与实现原理软件概述个性化播放器是一个功能强大的多煤体播放器,支持大部份的多媒体格式文件,其界面美观,操作方便,可以将主窗口稳藏起来而在系统托盘中完成大部份操作,支持文件列表,支持列表中文件的简单查询;其自带的界面编辑器可以自由改变主窗体的形状、大小、颜色、背景图,可以改变按纽的形状、大小、图案、位置,可以更改进度条和音量调节游标的大小,颜色和位置,可以改变播放器的运行时名字、图标,关于窗口中除外(为了保留作者名)。而且由于系统本身的多煤体驱动程序采用了微软的标准驱动程序,所以它的内核将随着操作系统的升级而升级。开发计划由于本软件最大的特点是能够让用户随意更改软件的界面,所以一切都要做成动态的,这给软件的设计带来一定的难度。软件的界面不单单是换皮肤,连界面的大小、形状、颜色、图案;每个按纽的大小、形状、颜色、图案等等都要说变就变。所以,几乎每一个控件的属性都要能让用户更改,都需要一个数据结构来保存这些属性。考虑到程序的整洁性,只好把实用播放功能和界面编辑功能以两个工程来实现。界面编辑功能介绍 本软件最大的特点之一就是可以让用户自由设计界面,做出一个属于自己的播放器,其专用编辑器提供了强大的界面设计功能。它不但可以让你的界面要圆就圆,要方就方,而且可以根据你指定的图片自动生成一个不规则的界面。不但主界面如此,就连按纽都可以这样做。主界面背景图有“正常,平铺,拉伸”三种选择。你可选择要不要显示背景图。每个按纽你都可以将他变成任何形状,改变字体的各种属性。你也可以改变进度条,左右声道等的各种属性,最后一点,你连程序的名字、图标都可以更改。下面以一个简单的例子介绍界面编辑器的使用:一、 启动编辑器,出现如图(二)的编辑界面;二、 改变主窗体属性:1、 更改主窗体背景色:切换属性板到主窗体页,在“颜色”标签右边的颜色池中双击,出现通用颜色对话框,选择你要的颜色,单击确定返回;2、 更改主窗体的高度/宽度:在属性板主窗体页中的“宽度”/“高度”标签右的编辑框中输入你要的宽度/高度,其值在0-800之间,不在这个范围内时,系统会提醒你并做相应调整;3、 更改主窗体的形状:在属性板主窗体页的顶端,有一个“形状”选项组:你可选择你要的主窗体形状;当你要让窗体为“圆角矩形”时,你须要在“半径”编辑框中给出它的圆角半径。4、 装入背景图:在属性板主窗体页中单击“装入图片”按纽,弹出一个“打开文件”对话框,选择你喜欢的位图片,单击确定返回;5、 设定背景图的放置方式:在属性板主窗体页中有一个“图片放置”的选项组,有“正常、平铺、拉伸”三方式,选择你要的一种即可;6、 如果你不想显示背景图,你可把“是否显示背景图”后面的勾去掉;7、 设置好以上属性后,你必须单击“数据更新”才可以让其生效;8、 当你的主窗体的形状是根据图案自动生成时,你可以给它指定一个背景色,把属性板主窗体页中的背景色拾取的勾打上,然后在右侧模板上已显示的图案上背景色的部位上单击,此时,系统会自动取出其颜色值(记住选好底色后把“拾取”的勾去掉),再次单击“数据更新”,系统便会自动生成不规则窗体了。9、 如果在设计期间,为了让窗本大小自动适应控件,可单击属性板主窗体页中的“窗口自动调整”按纽。三、 改变按纽的属性:1、 选择要进行编辑的按纽:有两种方式,一种是直接单击该按纽,属性板会自动切换到按纽页,并对应其当前按纽数据;另一种是手工切换属性板到按纽页,在按纽列表中选择要编辑的按纽;2、 移动按纽:有两种方式可移动按纽,一种是直接在该按纽的上方按下鼠标左键不放,拖动到你想摆放的位置后松开左键即可;一种是通过属性板按纽页中的按纽位置的编辑框中输入其坐标值;3、 改变按纽颜色:当你不想按纽有图案时,你也可改变按纽的颜色,方法是切换属性板到按纽页,在“颜色”标签右边的颜色池中双击,出现通用颜色对话框,选择你要的颜色,单击确定返回;4、 更改按纽的高度/宽度:在属性板按纽页中的“宽度”/“高度”标签右的编辑框中输入你要的宽度/高度,其值在0-800之间,不在这个范围内时,系统会提醒你并做相应调整;5、 更改按纽的形状:在属性板按纽页的顶端,有一个“形状”选项组:你可选择你要的主窗体形状;当你要让窗体为“圆角矩形”时,你须要在“半径”编辑框中给出它的圆角半径。6、 装入背景图:在属性板按纽页中单击“装入图片”按纽,弹出一个“打开文件”对话框,选择你喜欢的位图片,单击确定返回;7、 如果你不想显示背景图,你可把“是否显示背景图”后面的勾去掉;8、 如果你想隐藏该按纽,你可将“显示”后面的勾支掉;9、 设置好以上属性后,你必须单击“数据更新”才可以让其生效;10、 当你的按纽的形状是根据图案自动生成时,你可以给它指定一个背景色,把属性板按纽页中的背景色拾取的勾打上,然后在右侧模板上已显示的图案上背景色的部位上单击,此时,系统会自动取出其颜色值(记住选好底色后把“拾取”的勾去掉),再次单击“数据更新”,系统便会自动生成不规则窗体了。11、 如果在设计期间,为了让按纽大小自动适应图片,可单击属性板按纽页中的“调整适应图片”按纽。四、 改变进度条或游标的属性:1、 改变其大小、位置的方法与按纽的相似,这里就不再详述了;2、 改变边框边/填充色:选中要编辑的游标切换属性板到游标页,在“边框色”/“填充色”标签右边的颜色池中双击,出现通用颜色对话框,选择你要的颜色,单击确定返回;3、 进度条或游标的放置有“水平”和“垂直”两种类型,可通过属性板游标页中的“放置”选项组中选择;4、 改变游标内部滑块的形状:选中要编辑的游标,切换到属性板游标页,在“滑柄形状”选项组中选择一个形状;5、 如果你想隐藏该游标,你可将“显示”后面的勾支掉;6、 设置好以上属性后,你必须单击“数据更新”才可以让其生效;五、 更改标签属性:1、 更改标签字体:选中要编辑的标签,切换到属性板文字页,在“字体”下拉框中选择要用的字体;2、 更改标签字体大小:选中要编辑的标签,切换到属性板文字页,在“大小”编辑框中输入字体大小的值,如果在编辑框中双击,其值自动增1;3、 更改标签的位置:类似与更改按纽的位置;4、 设置字体是否具有“粗体、斜体、下划线、删除线”等属性:分别对应属性板文字页的粗体、斜体、下划线、删除线的选项;5、 如果你想隐藏该游标,你可将“显示”后面的勾支掉;六、 其它设置:1、 更改软件运行时名称:切换到属性板其它页,在软件名称编辑框中输入新的软件名称;2、 更改软件运行时图标:切换到属性板其它页,单击“更改图标”按纽,或者双击图标,弹出“打开文件”对话框,选择好图标文件后单击确定返回;实用播放功能的实现为了兼容多种多媒体格式文件,系统采用了微软的多媒体驱动程序方案,所以,对多媒体的的音频解码等操作就完全交给微软驱动程序了。但是,程序仍需对各种操作进行归纳,分类来适应用户的使用习惯。一、 各种播放状态的切换与监测对用户来说,一个良好的操作界面可以带给用户更多的方便,一个良好的控制机构也能协调用户的使用习惯。我们决不能让一个按纽做它不应该做的事,比如说一个播放按纽,用户还没有选择歌曲,而且列表中也没有预先存定的文件,你何必做什么播放处理。所以我们对每一个控件在实行它的义务前首先要检测自己有没有必要实行它的义务。我们采用几个变量和部份控件原有的属性来确定当前的播放状态,如当前列表中歌曲的数目,当前播放歌曲在列表中的位置,当前歌曲的播放进度等等。二、 单曲播放进度的状态相关控制我们采用了一个定时器,每隔0.5秒我们检测一下当前所有的状态属性,并相应的对已播放帧进行统计,及时反映给用户,同时程序做出相应的处理,如当一首歌曲播放完时,如果列表中有下一首歌曲,则自动播放下一首等等操作。三、 音量的调节及相关操作这里我们用到了一个Windows函数:MMRESULT waveOutGetVolume( HWAVEOUT hwo,/ 波形文件输出设备的标识符 LPDWORD pdwVolume/ 音量的大小 ); pdwVolume 是一个32位的整数,低16位表示左声道的音量,高16位表示右声道的音量。我们用变量V来表示。由于我们的Trackbar 只用8位二进制数表示音量,因此先把得到的8位音量T左移8位,变成右声道16位中的高8位,这样使音量的改变效果明显。然后把音量值T左移24位,变成右声道16位中的高8位。这两个值进行“或”运算后赋给V,这样V就成为第二个参数所要的值了。为了仅仅修改左声道,同时保持右声道的音量,我们可把V和$ffff0000进行与运算。这样,V的低16位被清零,高16位保持不变。然后,低16位用Trackbar 的位置左移8位来表示,成为新的左声道音量。右声道处理也类似如此。四、 视频窗口的切换处理当播放视频的时候,由于系统本生会自动生成一个视频窗口,但这样有时会不合乎我们的习惯,因为我们必须把视频窗口控制在我们指定的范围内。这就要用到TMediaPlayer的Display属性了,我们可以新建一个窗体,并在其上面放上一个TPanel控件,调整好大小,然后把TmediaPlayer的Display指向它。最后,为了自动让视频充满整个区域,我们可使用以下语句:MediaPlayerX.DisplayRect:=Rect(0,0,PanelX.width,PanelX.height);当我们想做全屏幕播放时,我们只需把窗口设为最大化,并将窗体类型高为None,这样就没有了标题栏等等,只剩下的客户区充满了整个屏幕,也就达到了全屏幕播放的效果。五、 文件列表的处理文件列表的处理,要归功于Delphi对Ini文件的操作。我们将文件列表的信息保存在一个INI文件中。使用三个小节,第一个小节存放的信息为了确定该INI文件是不是专用的列表文件;第二个小节存放列表中的歌曲数目和最后一次播放的歌曲在列表中的位置,第三个小节存放各首歌曲在磁盘中的存放路径。同时,我们在内存中增加三个变量,第一个是当前列表中歌曲的数目,第二个是当前播放歌曲在列表中的位置,第三个是最后一次播放歌曲在列表中的位置。为了让用户可以通过右击直接播放当前位置的文件,我们作了以下判断:一、 双击位置的歌曲与当前播放的歌曲是同一首,我们不做任何处理; 二、 如果当前有歌曲正在播放,我们停止它;三、 对应路径查找该歌曲文件,如找到刚做下一步,如找不到,把它从列表中删除,列表文件数目减一;四、 开始播放当前选取中歌曲,并修改最后一次播放歌曲在列表中的位置。六、 系统托盘操作的处理这里需要用到一个ShellAPI函数:function Shell_NotifyTcon(dwMessage : DWORD;/ 对图标的操作lpData : PNotifyIconData):BOOL;stdcall;/ 指向TNotifyIconData记录的指针TNotifyIconData的结构为:Type TNotifyIconData = record cbSize : DWORD;/ 记录的大小 Wnd : HWND;/ 窗口句柄 uID : UINT;/ 由程序员指定的唯一标识符 uFlags : UINT;/ 描述了记录中哪些域是依赖于/ Shell_NotifyIcon 函数而激活的 uCallbackMessage : UINT;/ 发向由Wnd域标识的窗口的消息 hIcon : HICON;/ 放在托盘上的图标 szTip : array0.63 of AnsiChar;/ 指示字符串end;我们把一个主界面上的系统菜单也放到这里来,这样方便了用户的操作。当鼠标在图标上面右击时,我们就通过uCallbackMessage回调函数来调出系统菜单。七、 与皮肤配置文件的接口处理为了能和皮肤配置文件接口,我们必需在这个工程增加一个读取皮肤配置参数的函数和一个装配的过程。读取皮肤配置参数的方法与界面编辑工程中的读入皮肤配置参数略有不同,它只是读取界面所需要的参数,而皮肤配置文件中还有设计期的参数。同样我们也是采用INI文件的方式来存取参数,至于图案、区域文件等我们对应控件名分配了一个固定的文件名,然后在参数文件中只保存它的路径,通过路径,我们再来装载图案和区域文件。八、 其它应用重新对窗体的移动做了处理,如列表窗体和“关于”窗体,由于窗体没有标题,且有些按纽采用了透明的SpeedButton,所以那个“以响应系统消息来移动无标题窗体”的方法在这以不实用了,所以不得不对窗体的移动作一些处理,采用了移动时先在屏幕上画边框的图形操作处理。界面编辑功能的实现一、 编辑器界面的安排与区域分布由于大部份功能的实现乃所见即所得的方式,所以对于菜单和工具栏里只采用了一些简单的操作,如界面文件的新建,打开,保存呀等等的必用操作。重要的一个部份是控件属性板,它包含了所有控件的可变属性参数值。另一个重要的部份是播放器主界面的模板。它的外观就是将来可应用于播放器的外观。控件属性板与主界面模板是紧密联系着的,改变了控件属性板中的一个参数,主界面模板会作出相应的变化,同样,以可见的方式改变某一个控件的属性时(通常是位置的改变)属性板中相对应的参数值也会改变。二、 与皮肤配置文件的接口处理为了能和皮肤配置文件接口,我们必需在这个工程增加一个读取皮肤配置参数的函数和一个装配的过程。读取皮肤配置参数的方法与界面编辑工程中的读入皮肤配置参数略有不同,它只是读取界面所需要的参数,而皮肤配置文件中还有设计期的参数。同样我们也是采用INI文件的方式来存取参数,至于图案、区域文件等我们对应控件名分配了一个固定的文件名,然后在参数文件中只保存它的路径,通过路径,我们再来装载图案和区域文件。三、 控件的定位处理除了主窗口以外,其它控件都存在一个摆放位置的问题,这就涉及控件的移动问题了。因为主窗体是一个容器,所有的可视控件相对于主界面都有一个左上角的相对坐标。为了能使用户在按下鼠标的同时可以拖动控件移动,我们必需给每一个控件定义一个可移动标志。所有的控件移动标志可用一个数组来表示:bmove : array bSystem.tRightVolume of Boolean;初始状态都为false。另外设置一个控件移动时的初始坐标值:PointOrigin:TPoint;当鼠标在控件上面按下左键时,设bMovebWho为true(其中bWho代表控件的ID号),并将当前鼠标的坐标值保存到PointOrigin中;当鼠标在控件上面移动且该控件的bmove值为true时,计算当前鼠标和原PointOrigin的差值,并将此时控件的坐标属性改为:原来的坐标值加上当前鼠标与PointOrigin的差值;当鼠标在控件的上方松开进,将该控件的bmove值又设为false,这样鼠标在其上面经过时便不会移动控件了。这样便完成了一个控件的拖动移动。四、 控件的形状处理具有形状属性的是主窗体和按纽,有三种基本形状:矩形、椭圆和图案自动生成。对于一般用户来说,这三种已足够了,而且让用户最感兴趣的还是根据图案生成不规则窗体。在Windows下,每个窗体都有其显示的区域,它决定这个窗体显示出来的部分。当这个区域是矩形时,就是我们熟悉的矩形窗口,在这个矩形区域下的窗体和桌面背景都被遮盖。我们可以通过调用Windows现成的API函数建立圆角矩形,圆形,椭圆或多边形的区域,再将这个区域赋给一个窗体,从而便窗体只显示出圆角矩形,圆形,椭圆或多边形。然而,以上只提供的区域形状毕竟有限,无法生成复杂的不规则窗体。幸好,Windows API 中又提供了几个好用的函数,就是区域的布尔运算函数。如:CombineRgn 函数可以用来将两个区域进行合并;ExtCreateRegion 函数可以用来从指定的内存区域中读取信息,生成一个区域;GetRegionData 函数可以帮助我们得到区域信息;最后,CreateWindowRgn函数将我们提供的区域赋给我们指定的窗体。经试验,不仅窗体具有区域的概念,大部份且有hand属性的控件都有其自己的区域。有了以上“工具”,我们就有足够的信心生成一个不规则的窗体或控件了。在这着重演示一下不规则窗体的生成。给定一副图,假设它的背景色是单一的颜色或透明色,且正图的颜色中没有一种颜色和背景色是一样的。我们做一个猜想。假如我们把一副图离散成为一块一块的“线型”区域,通过生成很多这样的区域后再把它们拼接起来,不就达到了不规则区域的效果吗?有了理论,我们再进一步研究。对于一副图片,由于我们已经假设了正图的颜色一背景色不一样,我们可以采用筛选颜色的方法,把背景色一一去掉。我们采用逐行扫描的方法,若是像素是背景色的就不要理它,否则以这一点开始,记下这一行像素的位置和大小,从而生成一个矩形区域。对每一行都扫描,并且生成一个小的矩形区域后就和上一个小区域合并,最后,所有的小区域就拼出了整副图案所占的区域。到此,生成区域的工作也基本地完成了。最后说明,为了进行像素操作,图片采用windows 位图格式,即bmp格式。五、 控件的图案处理由于主窗体的图案放置方式有三种:正常,平铺和拉伸。所以需要对图片进行一些处理。其实,还有一种方法,绕过了这种图片的麻烦的处理,这就是以下要说明的方法。在windows中,一个窗体实际上就是一块画布,所有的控件只不过是在上面的一个有感应的图案而已。我们同样在主窗体上放一个TImage控件。下面且看三种图案放置方式的处理:1、 正常:这是最简单的一种,将TImage控件的属性Autosize为true, stretch为false, visible 为true 就行了;2、 平铺:所谓平铺相当于在地板上铺上一块块有图案的地砖,这种方式有一种巧妙的处理方案,只要将主窗体的画布属性,即:form.brush.bitmap : = Image.picture.bitmap 即可,windows会自动用Image中的图案平铺在主窗体上。3、 拉伸:为了做到拉伸,我们得修改Image的autosize属性为false, 然后将其Align 的属性高为alClient,即扩充到整个窗体,最后设stretch 属性为true,这样就达到了将图自拉伸的目的。六、 代码重用的实现一个好的程序,不但要看它能实现的功能多少,还要看它的代码整不整洁,紧不紧凑。本软件中采用了大量的代码重用技术。这要归功与以上控件ID号的重新安排。我们把所有的控件都尽量的找到其共有的属性,最后追踪到它的祖先类。这关于到控件响应时的Sender参数。实际上,当每个控件接到一个windows 消息时,在响应相应的方法时,都会接受windows传过来的一个Sender 参数,以确认是否该使用该控件的该方法。由于我们几乎把所有的控件的处理方法都集成在了一个过程当中,这就需要对个别不同的控件进行适当的处理。这前,我们使用了一个专用的函数,来判别Windows 传过来的Sender 参数是指向哪一个控件的;从而我们再接下来的过程处理中做出一些相应的调整,这样,大大地减少了控件的事件处理过程代码。软件测试我们对播放器作了以下测试:1、 各种媒体文件的播放测试:经测试,能支持的播放格式文件有:音频文件(*.WAV,*.MID,*.RMI,*.CDA,*.MP3,*.WMA);视频文件(*.AVI,*.DAT,*.MPG,*,MPEG);当系统安装了MPEG4的驱动程序后,还可以播放最新的MPEG4压缩格式的文件。2、 各个按纽的功能测试:播放功能方面基本上不再存在什么
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业现场管理中的团队沟通技巧
- 光伏逆变器精密结构件市场竞争格局及投资前景战略规划研究报告
- 2026上海出版印刷高等专科学校第一批公开招聘模拟试卷及完整答案详解【典优】
- 2026中国民航大学高层次人才招聘(常年有效)模拟试卷带答案详解(综合题)
- 2026内蒙古呼伦贝尔市海拉尔区文化馆(区乌兰牧骑、区美术馆)招聘4人备考题库及答案详解【全优】
- 2026台州市人力资源开发有限公司招聘1人(2026.7.3)参考题库含答案详解【突破训练】
- 2026年马鞍山和县知识产权快速维权中心公开招聘工作人员6名参考题库带答案详解(综合卷)
- 2026陕西西安交通大学经济与金融学院管理辅助岗位招聘2人笔试题库及完整答案详解(夺冠系列)
- 2026安徽六安市市直学校选调教师5人(六安一中东校区)模拟试卷(考点精练)附答案详解
- 2026海南澄迈县加乐镇农业服务中心见习生招聘2人参考题库及答案详解(必刷)
- 收费站消防安全知识培训
- 干线铁路牵引变电所的设计原理和方法
- GB/T 3780.21-2025炭黑第21部分:筛余物的测定水冲洗法
- 第3章物质构成的奥秘章末复习课件-九年级化学沪教版(2024)上册
- 1 十五从军征(说课稿) 统编版 语文九年级下册
- 办证服务合同协议书范本
- DB33-T1027-2018蒸压加气混凝土砌块应用技术规程
- 四川省成都市第十一中学2024-2025学年高一上学期入学分班质量检测数学试题(解析版)
- 8下-02-运动和力(原卷版)-全国初中物理竞赛试题编选
- SH∕T 3097-2017 石油化工静电接地设计规范
- 四年级下册递等式计算300题及答案
评论
0/150
提交评论