【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《VFP实例小程序—计时器》,欢迎阅读!
VFP的计时器用法实例
1 引 言
在程序设计和软件开发中,经常需要设计计时器,如:秒表、正计时器、倒计时器等。这些计时器的设计方法大同小异,本文以倒计时器设计为例介绍两种设计倒计时器的方法。
Visual FoxPro中的计时器控件有一个Timer事件,每经过Interval(单位为毫秒)属性指定的时间就执行该事件一次。利用该控件的这一特点再配合一些程序可设计各种计时器,包括倒计时器。 2 利用计时器控件和设置计数变量设计倒计时器 2.1 设计思想
程序中用一个计数变量t来实现计时,在表单的Init事件中给t赋初值5400(本例中倒计时时间设为90分钟,即5400秒)。程序中用到一个计时器控件,设置计时器控件的Interval属性为1000(即1秒),则它每秒钟被触发一次。在计时器的Timer事件代码中加入t=t-1,则每隔1秒钟t递减1,5400秒后t减到0,定时时间到。程序中还用到3个变量th、tm、ts,分别用来表示剩余时间的时、分、秒,用于将剩余时间t用时分秒的格式显示。 在表单的Init事件代码中包含thisform.timer1.enabled=.F.,再在“开始”按钮的Click事件代码中加入代码:thisform.timer1.enabled=.T.。这样当单击“开始”按钮时才开始计时。 2.2 程序清单
⑴表单Form1的Init事件代码: thisform.timer1.enabled=.F. public t t=5400
⑵标签Label1的属性 Caption:剩余时间 ⑶标签Label2的属性 Caption:90分钟
⑷计时器Timer1的属性 Interval:1000
计时器Timer1的timer事件代码: ift<=0
messagebox(″定时时间到!″) else
th=int(t/3600) tm=int((t-th*3600)/60) ts=t-th*3600-tm*60
thisfor m.label2.caption=str(th,2)+″:″+str(tm,2)+″:″+str(ts,2) endif
t=t-1
⑸命令按钮Command1的属性 Caption:退出
命令按钮Command1的Click事件代码: thisform.timer1.enabled=.T. ⑹命令按钮Command2的属性 Caption:退出
命令按钮Command2的Click事件代码: release thisform 2.3 表单运行结果
本表单包含两个标签控件和两个命令按钮,运行结果如图1所示。
1
3 利用计时器控件和时间函数设计倒计时器 3.1 设计思想
本程序通过计时器控件和时间函数seconds()来设计倒计时器。seconds()函数可以以秒为单位返回自午夜以来经过的时间。在“开始”按钮的Click事件中加入代码:t0=seconds()。在计时器控件的Timer事件代码中加入:t1=seconds()、t2=5400+t0、t3=t2-t1。t0为单击“开始”按钮时离午夜的时间,t1为计时器每次触发时距午夜的时间,t2为定时结束时距午夜的时间,t3为剩余时间。 3.2 程序清单
⑴表单Form1的Init事件代码: thisform.timer1.enabled=.F. ⑵标签Label1的属性 Caption:剩余时间 ⑶标签Label2的属性 Caption:90分钟
⑷计时器Timer1的属性 Interval:500
计时器Timer1的timer事件代码: t1=seconds() t2=5400+t0 t3=t2-t1 if t3<=0
messagebox(″定时时间到!″) else
th=int(t3/3600) tm=int((t3-th*3600)/60) ts=t3-th*3600-tm*60
thisform.label5.caption=str(th,2)+″:″+str(tm,2)+″:″+str(ts,2) endif
⑸命令按钮Command1的属性 Caption:开始
命令按钮Command1的Click事件代码: public t0
t0=seconds()
thisform.timer1.enabled=.t. this.enabled=.f.
⑹命令按钮Command2的属性 Caption:退出
命令按钮Command2的Click事件代码: release thisform
4 两种设计方法的比较及结论
第一种方法是用得较多的,笔者所见到的计时器设计多类似此法,但经过本人反复验证,发现此法设计的计时器不够准确,每分钟比实际时间慢5秒。当然可以通过算法校正。
第二种方法由于用到了时间函数,所以计时准确,由于巧妙地运用了seconds()函数,它并不要求计算机的时间设置准确。
当然,利用计算机计时的任何计时器都受计算机CPU时钟频率准确度的影响,两种方法设计的计时器也不例外。
2
本文来源:https://www.wddqxz.cn/1737014fc9aedd3383c4bb4cf7ec4afe04a1b18e.html