用VisualBasic实现多画面播放功能
作者:佚名; 更新时间:2014-12-05
所谓动态画中画,指的是在大画面视频播放时,小画面在大画面中也播放另外的画面,或者是两个画面都在做某种活动。 


笔者前段时间用Visual Basic开发了一个vcd播放程序,可以实现以下功能: 


(1) 可以多屏播放,也就是画中画功能,可同时播放几个不同的画面; 


(2) 可以同时播放cd-rom中的视频音频文件(当然,在硬盘中播放速度会更快些) 


(3)支持多种文件格式(如.dat、 .wav、 .avi、 .mov、 .mmm、 .mid、 .rmi、 .mpg、 .mpa、 .mpv等); 


(4) 自带画面美观且功能齐全的cd播放程序; 


(5) 增强了鼠标的右键功能,用它可以控制各画面的大小(1/16、1/4、1/2、1、2倍和全屏)、播放、暂停等; 


(6) 控制声音、图像、时间/帧显示转换、自动重播等; 


(7) 控制条随意拖动播放,再加上定时播放、自定义播放时间等播放方式,可使您更加惬意地控制vcd; 


(8) 屏幕可随意拖动,画面可任意放缩。 


vcd中的影像文件都在光盘的mpegav目录下,文件名只有两种:avxeq01.dat或music01 .dat(如果是音乐版的卡拉ok,则还有music02 .dat等。) 


可视动画控件activemovie是microsoft公司的控件,从不成熟的1.0、1.2到2.0,每次都有了很大的改进,如1.0版本中有几个属性是只读的(例如,displaymode只能为amvtime,而不能改为amvframes)。该控件支持音频文件(.wav、.mid、.rmi)、影片文件(.avi、.mov、.mmm、.mpeg、.mpg、.mpa、.mpv)和vcd文件(.dat)等。播放时若用鼠标右键单击画面,则可以直接对画面的播放、暂停、停止等进行控制,读者还可以自行在“属性”栏中对影片播放进行控制设置,诸如设置“播放次数”、“音量”、“影片大小(1/16、1/4、1/2、1、2倍和全屏”、“面板”、“颜色”、“过滤器”等。这种技术的实现实际上是vb调用activemovie控制器来完成的,而activemovie控制器内嵌了microsoft mpeg音频解码器和microsoft mpeg视频解码器。 


首先,我们建立一个“项目”,依次选择“项目/部件”,然后添加microsoft activemoviecontrol (amovie.ocx)、microsoft commandialog control(comdlg32.ocx),控件即出现在“工具箱”中。将上述两个控件加进窗体,再单击“菜单”工具栏,建立一个主菜单项:“文件”(file)及其子菜单项:“打开a画面”(opena)。 


在opena中加入如下代码: 


private sub opena-click () 


on error resume next 


commondialog1.filter ="video file (*.dat)∣*.dat∣wave file (*.wav)∣avi file (*.avi)∣(*.avi)∣movie file (*.mov)∣(*.mov)∣media file (*.mmm)∣(*.mmm)∣mid file (*.mid;*.rmi)∣(*.mid;*.rmi)∣mpeg file (*.mpeg)∣(*.mpeg)∣all file (*.*)∣*.*" 


commondialog1.filterindex =1 


commondialog1.showopen 


activemove1.filename = commondialog1. filename 


activemove1.height = form1.height 


activemove1.width =form1.width 


activemove1.run 


end sub 


这是对单个的activemovie1进行控制。还可以在“文件”(file)中依次加入子菜单:“打开b画面”(openb)、“打开c画面”(openc),信捷职称论文写作发表网,并相应地加入activemovie2、 activemovie3等多个画面,将上述程序代码略为改动后加入。这样,当您按下f5键即运行程序,打开您想要播放的vcd文件就可以欣赏vcd了。在屏幕上单击右键,还可以控制画面呢! 


现在是否就满足了呢?不行!我们再增加一个用鼠标任意拖动屏幕的功能: 


private sub activemovie1-mousedown (button as integer ,shift as integer ,x as single ,y as single) 


activemovie1.drag 1 


x1=x 


y1=y 


end sub 


我们还增加了一个定义任意播放时间的主菜单项:“时间”(time)及其子菜单项:“画面a时间”(settimea): 


private sub settimea-click () 


on error resume next 


dim r as integer 


r=inputbox ("请输入时间(分钟:0-60)") 


r=r*60 


activemovie1.currentposition =int(r) 


activemovie1.run 


end sub 


currentposition是控制vcd播放的时间:(1)activemovie1.currentposition =0(从头开始);(2)activemovie1.currentposition =900(15分钟后);(3)activemovie1.currentpo-sition =1800(30分钟后)。依次类推,但是不能超过60分钟。 


我们再增加一个主菜单项:“屏幕”(screen)及其子菜单项:“全屏a”(fullscreena),用来控制屏幕大小: 


private sub fullscreena -click () 


on error resume next 


activemovie1.fullscreenmode=true 


activemovie1.run 


activemovie1.moviewindowsize =amvmaximized 


end sub 


fullscreenmode用来控制画面是否为全屏,当它为true时则全屏方式播放vcd,为false时则取消全屏方式。 


moviewindowsize也是控制屏幕的大小:(1)全屏大小:activemovie1.moviewindow-size =amvmaximized;(2)正常大小:activemovie1.moviewindowsize =amvoriginalsize;(3)倍屏:activemovie1.moviewindowsize =amvdoubleoriginalsize;(4)1/2屏:activemovie1.moviewindowsize =amvonehalscreen;(5)1/4屏:activemovie1.movie-windowsize =amvonefourthscreen;(6)1/16屏:activemovie1.moviewindowsize =amvonesixteenscreen。 


我们可以随意控制屏幕了。下面,让我们再把声音控制一下吧! 


microsoft activemovie控件2.0版的确比1.2、1.0改善不少!1.2、1.0版在我的创新awe64顶级声卡中的表现很不尽人意,但2.0版却把我拉“科达”音箱功能在创新awe64的驱动下发挥得淋漓尽致!想必microsoft 公司对activemovie控制器中内嵌的mpeg音频解码器下了苦功! 


我们在菜单中增加主菜单项:“声音”及其子菜单项“增加”(soundadd棗快捷键设置为f4)和“减少”(soundduce棗快捷键设置为f5),分别用来控制声音的增强: 


private sub soundadd -click () 


activemovie1.volume= activemovie1.volume +100 


end sub 


private sub soundduce -click () 


activemovie1.volume= activemovie1.volume -100 


end sub 


当然,我们还想增加“静音”(soundno)功能。经我反复试验,当activemovie1.volume= -4000时效果最好! 


我们还需要让vcd播放完后乖乖地“自动重播”(autoreplay): 


private sub autoreplay -click () 


activemovie1.autorewind= true 


’ autorewind设置播放时是否“自动播放” 


end sub 


为了让vcd播放时交替“显示帧”(showframe)或“显示时间”(showtime),可在displaymode 中进行设置: 


private sub showframe -click () 


on error resume next 


activemovie1. displaymode =amvframes 


end sub 


private sub showtime -click () 


on error resume next 


activemovie1. displaymode =amvtimes 


end sub 


经过上面的设计,功能也凑合了。行了吗?别急!我们还想将界面搞得漂亮一点。例如,增加工具栏,加强鼠标右键的功能和画面中的双击功能等。 




如果我们想在vcd画面中单击右键弹出菜单,则可添加如下代码:


private sub activemovie1-mousedown (button as integer,shift as integer ,x as single ,y as single)


if button = 2 then popupmenu menuok


end sub


其中,menuok是我们在菜单中额外增加的,子菜单内容可自定义(但要记住在设计时将名为“menuok”的菜单设置成不可见)。例如:(1)控制vcd“暂停”: activemovie1.parse; (2)控制vcd“运行”: activemovie1.run;(3)控制vcd“停止”: activemovie1.stop;(4)控制vcd“自动播放”: activemovie1.autostart=true。


activemovie还有非常有用的其它属性:


(1) allowchangedisplaymode:运行时是否允许改变显示的模式;


(2) allowhidecontrols:运行时显示/隐藏控制面板;


(3) allowhidedisplay:运行时显示/隐藏显示面板;


(4) appearance:设置面板的外观(平面或3d);


(5) autostart:设置打开vcd文件后是否“自动播放”;


(6) enablecontextmenu:当在画面中右键单击
核心期刊快速发表
Copyright@2000-2030 论文期刊网 Corporation All Rights Reserved.
《中华人民共和国信息产业部》备案号:ICP备07016076号;《公安部》备案号:33010402003207
本网站专业、正规提供职称论文发表和写作指导服务,并收录了海量免费论文和数百个经国家新闻出版总署审批过的具有国内统一CN刊号与国际标准ISSN刊号的合作期刊,供诸位正确选择和阅读参考,免费论文版权归原作者所有,谨防侵权。联系邮箱:256081@163.com