电影或电视中经常可见到一些字幕或图片的动态变化特技,在制作多媒体教学软件或广告宣传等多媒体演示文档时,也常常需要用到一些图文的动态变化效果。vb6.0作为windows软件的强有力开发工具,在多媒体程序设计方面具有广阔的应用前景。 本文讨论运用vb6.0的定时器并结合windows api函数实现图片或文字的动态缩放和渐隐渐现等特技效果。
一、实现图文动态缩放和渐隐渐现特效的程序方法
1、程序界面
取窗体名为form1,其windowstate属性设为2。在窗体form1中设置如下控件和属性:一个标签控件label1,其backcolor等于form1的backcolor; bondstyle为0, autosize为true。一个图像控件image1,其stratch和visible均为true ; bordstyle为0。两个图片框控件picture1和picture2, visible属性picture1为false而picture2为true; autoredraw属性picture1为true而picture为false; scalemodel属性两者均为pixels; bondstyle属性两者均为0。三个定时器控件timer1,timer2和tirner3;命令按钮控件数组cmd(0),......,cmd(4),其caption属性分别为:“文字缩放”、“图片缩放”、“文字隐现”、“图片隐现”和“退出”。
2、文字的动态缩放
通过vb6.0的定时器控件定时改变文字的size属性,就可达到文字被动态放大或缩小的效果。程序中通过timer1的tuner过程来控制标签label1的caption属性文字大小。由cmd(0)触发的cmd_click事件引发timer1_ time过程,通过一逻辑变量1(0)(数组元素)控制文字的变化方式,1(0) = true 时使字体动态放大,1(0) = false时使字体动态缩小。
3、图形的动态缩放
将图像控件image1的stretch属性设为true,可实现控件中图片大小随imagel控件大小的变化而变化。通过定时器timer2的tuner过程定时改变imagel控件的尺寸大小,就达到了使图片动态缩放的效果。由cmd(1)触发的cmd_click事件将引发timer2_time过程,通过逻辑变量1(1)控制图片变化的方式,1(1)=true时控制图片动态放大,1(1)=false时控制图片动态缩小。
4、文字的渐隐渐现效果
从字符串中取若干个文字作为标签label1的caption值,如果从字串中截取的文字数递增(直到等于字串的全部字数),则实现文字渐现效果;而截取的文字如果递减(从字串的全部字数减到0),则实现文字渐隐效果。通过定时器timer3的time:过程定时改变截取的字数,来达到此效果。由cmd(2)触发的。md_click事件引发timer3 _time过程,通过逻辑变量1(2)控制文字变化的方式,1(2)=true时使文字渐现,1(2)=false时使文字渐隐。
5、图形的渐隐渐现效果
用windows api函数bitblt复制图片的方法实现。bitblt函数的使用方法为:
| bitblt hdestdc, x, y, nwidth, nheight, hsrcdc, xsrc, ysrc,dwrop |
| ‘对全局变量和api函数的通用声明(api函数sleep, bitblt及其常参数srccopy的声明从略,可从api浏览器中复制、粘贴): dim 1(4) as boolean, i as long, s as string, zt as integer ‘实现图片渐现渐隐的通用过程: private sub piccpy(optional strip as integer=10, optional delay as integer=20) dim plw as integer, plh as integer,p2 as integer if 1(3)=true then picture1 = loadpicture("c:\win98\安装程序.bmp") else picture1=loadpicture("") end if plw = picturel.width plh=picturel.height p2=0 do while p2<= plw bitblt picture2.hdc,p2,0, strip, plh, picture1.hdc,p2,0,srccopy p2=p2 + strip sleep delay doevents loop‘由于图片宽度不一定是strip的整数倍,故下面再全图复制一遍图片: bitblt picture2.hdc,0,0,plw,plh,picture1.hdc,0,0,srccopy end sub private sub form_load() label1.font.name="黑体" image1.top=0 image1.left=0 picture2.top=0 picture2.left=screen.width - picthne2.width s="产生缩放和隐现效果的文字" zt=5'zt为字体大小控制变量 i=0 'i为显示文字时截取文字的字数变量 end sub private sub cmd_click (index as integer) if 1(index)=true then 1(index)=false else 1(idex) = true end if select case index case 0 '激活timer1的timer过程 timer1.enabled=true timer1.interval=50 ...... 'case1, 2与上述类似,分别激活timer2, timer3的timer过程 case 3 '调用图片复制过程piccpy picpy 10, 50 case 4‘结束程序运行 unload me end end select end sub private sub timer1_timer() '实现文字缩放的过程 if 1(0)=trun then zt=zt<+5 else zt=zt-5 else if if zt>50 or zt<=5 then timer1.enabled=false end if with label1 .font.size=zt .left=(form1.width - lable1.width) /2 .top=(form1.height - label1.height)/2 end with label1.caption=s end sub private sub timer2_timer() '实现图片缩放的过程 if 1(1)=true then '使图片放大 image1.width=image1.width+form1.width/10 image1.height=image1.height+form1.height/10 else '使图片缩小 image1.width=image1.width - form1.width/10 image1.height=image1.height - form1.height/10 end if if (image1.width >=form1.width/2) or (image1.width <=form1.width/10) then timer2.enabled=false end if image1=loadpicture("c:\win98\安装程序.bmp") end sub private sub timer3.timer() label1.font.size = 30 if 1(2)=true then i=i+l else i=i一1 end if if i >=len(s) on i<1 then timer3.enabled=false end if if i >=0 then label1.caption=left$(s,i) end if end sub |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器