| 论文导读::利用Visual Basic制作模拟表针转动并伴有动态图像及时间显示的时钟,当时钟到达整点时响铃。论文关键词:控件,函数,方法
 
 常见的时钟均是以字符形式显示当前的时间,这种显示方式太过死板,为使时间的显示形象、生动,我利用VB设计了一个时、分、秒针动态转动的时钟的算法。VB中用来显示时间最简单的方法是利用函数取出时、分、秒以字符形式显示,要模拟真实的指针转动必须配合VB中其他控件中国知网论文数据库。 1、编程思路  利用VB中的形状控件画出时、分、秒针,为使是、分、秒针动态转动,首先可使用line方法初始化时、分、秒针一端的坐标为用户自定义坐标系统的原点,再利用时、分、秒转过的角度求出时、分、秒针另一端的坐标函数,然后利用line方法确定时、分、秒针在自定义坐标系统中另一端的位置。下面以某一时刻为例说明实现时针转动的具体算法。设当前时间为h:m:s,时针长为R1,端点坐标为(x1,y1),分针长为R2,端点坐标为(x2,y2),秒针长为R3,端点坐标为(x2,y2),为求出三个端点的坐标,只须求出他们转过的角度,利用极坐标与直角坐标的关系即可求出端点坐标。图1给出直角坐标系统中时、分、秒针的坐标与时、分、秒针转过的角度的关系(默认坐标系统的y轴正方向向上);利用时钟控件的Timer事件实现秒针每转一次加载一副背景图像,从而达到动态图像的效果。
 秒针每走一秒转过的角度为6度,走过s秒,则其转过的角度为6s,若y轴正方向向上,则秒针的顶点坐标值为: X3=sin((6*s) *∏/180) *r3 y3=cos((6*s) *∏/180) *r3 若y轴正方向向下,则顶点坐标值为: X3=sin((180-6*s) *∏/180) *r3 y3=cos((180-6*s) *∏/180) *r3 分针每走一分转过的角度为6度,走过m分,(毫秒忽略不计)则分针转过的角度为6m函数,若y轴正方向向上,则分针的顶点坐标值为: X2=sin((6*m) *∏/180) *r2 Y2=cos((6*m) *∏/180) *r2 若y轴正方向向下,则顶点坐标值为: X2=sin((180-6*m)*∏/180) *r2 Y2=cos((180-6*m)*∏/180) *r2 时针每走一小时其转过的角度为30度,考虑到系统取出的小时值为整点时间,而时针有指到两个整点时刻的时候,所以时针端点坐标的计算应考虑到时针转过整点时刻的情况,把时针转过整点时刻的分钟值转化为小时值,即一分钟为1/60小时,则可求出时针转过的总小时值,即若当前时间为h小时m分钟,则时针转过的总小时值,即若当前时间为h小时m分钟,则时针转过的角度为30*(h+m/60)度,那么时针的端点坐标值为: X1=sin((30*(h+m/60))*∏/180) *r1 Y1=cos((30* (h+m/60)) *∏/180) *r1 若自定义坐标系统的y轴正方向向下,则时针的端点坐标值为: X1=sin((180-30*(h+m/60))*∏/180) *r1 Y1=cos((180-30* (h+m/60)) *∏/180) *r1 因为时、分、秒针转过的角度不断变化,所以时、分、秒针的端点坐标也在不断变化,从而实现了时、分、秒针动态转动的效果中国知网论文数据库。时、分、秒的时间值分别利用函数hour(time)、minute(time)、second(time)求得(time为系统时间)。 2、流程图如下 3.程序的主要源代码如下 Private Sub Timer1_Timer() ‘显示系统时间 Label1.Visible=True Label1.Caption=Time $ ‘装入图形函数,以实现秒针每走一秒背景图标动态的效果 Static pickbmp as integer If pickbmp then Image1.picture=loadpicture(“e:bmoon02.ico”) Else Image1.picture=loadpicture(“e:bmoon08.ico”) End if Pickbmp=not pickbmp Line1.visible=true:line2.visible=true:line3.visible=true ‘确定指针的初始位置 Line2.x1=0:line2.y1=0 Line1.x1=0:line1.y1=0 Line3.x1=0:line3.y1=0 ‘在指定位置处打印时钟的刻度 Form1.forecolor=vbGreen Form1.currentX=-7 Form1.currentY=68 Form1.print “6” Form1.forecolor=vbRed Line(-2,95)-(-2,85) Form1.forecolor=vbGreen Form1. .currentX=-10 Form1.currentY=-85 Form1.print “12” Form1.forecolor=vbRed Line(-2,-95)-(-2,-85) Form1.forecolor=vbGreen Form1. .currentX=70 Form1.currentY=-10 Form1.print “3” Form1.forecolor=vbRed Line(80,-3)-(85,-3) Form1.forecolor=vbGreen Form1. .currentX=-75 Form1.currentY=-10 Form1.print “9” Form1.forecolor=vbRed Line(-80,-3)-(-85,-3) ‘下列语句为时、分、秒针端点坐标计算,指定秒、分、时针的长度分别为65、55、40 Sx=sin((180-6*Second(time))*3.14159/180)*65 Sy=cos((180-6*Second(time))*3.14159/180)*65 Line3.x2=sx:line3.y2=sy mx=sin((180-6*minute(time))*3.14159/180)*55 my=cos((180-6*minute(time))*3.14159/180)*55 Line2.x2=mx:line2.y2=my hx=sin((180-(30*hour(time)+30*minute(time)/60))*3.14159/180)*40 hy=cos((180-(30*hour(time)+30*minute(time)/60))*3.14159/180)*40 Line1.x2=hx:line1.y2=hy ‘整点响铃 If second(time)/60=0 And Minute(time)/60=0 then Beep End if End sub 该程序经调试可准确运行,为便于用户使用,可将程序添加到系统的开始菜单的启动子菜单中,系统每次启动时在桌面上自动运行该程序;该程序对教学也有一定的参考价值,在讲时钟控件与图形控件时,利用此程序可调动学生对这部分内容的兴趣,也可充分发挥学生的特长,让学生完善该时钟的制作。为了能将此文件作为一个独立的程序来运行(脱离VB环境下)和能作为一个完整的软件进行拷贝,须利用VB中的package&Deployment向导制作成一套安装程序。 [参考文献]
 [1]龚沛曾、陆慰民、杨志强,Visual Basic 程序设计教程[M]高等教育出版社
 [2]胡喆,利用VB开发多媒体程序的一个实例[J]微型计算机应用,第19卷第1期,1998
 
   |