资源描述
VFP中倒计时器的设计
摘 要:本文介绍了利用Visual FoxPro 6.0设计倒计时器的两种方法,给出了程序,并比较了两种方法的优劣。
关键词:倒计时器;Visual FoxPro;程序设计
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.。这样当单击“开始”按钮时才开始计时。
时间设为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所示。
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时钟频率准确度的影响,两种方法设计的计时器也不例外
一行代码禁用 ctrl+alt+del
2008-11-23 15:30
今天看到一行 vb 代码,真令我吃惊!
照此处理:
1. 新建一表单
2. 加一个自定义表单属性: hh,初始值 0
3. 加两个按钮,分别设 Caption 为 “禁用任务管理器” 和 “使能任务管理器”
4. 在“禁用”按钮的 Click 中写: Thisform.hh = FOpen( GetEnv( 'WinDir' ) + '\system32\taskmgr.exe', 12 )
5. 在“使能”按钮的 Click 中写:
If ( 0 != Thisform.hh )
FClose( Thisform.hh )
基于VFP自动组卷的设计与实现
摘要:本文 分析 了无纸化 考试 中自动组卷的作用、 方法 ,对用Word录入的试题库进行了转换,使之成为VFP环境下的试题库表结构,并对该表构造了自动组卷的算法,最后给出了一种从试题库表中随机抽题试题生成试卷库的VFP程序。
关键词:VFP,试题库, 计算 机组卷,试卷库
1 问题 的提出
无纸化考试受到各级各类学校的青睐,从国家级考试的一级B计算机等级考试、职称计算机考试到各省电会考试以及各行业、各学校的远程考试,这些无纸化考试既确保了考试的公平、公正,又大大提高了考试的效益、效率,同时降低了考试阅卷的人为因素。然而在这类考试中试卷的满意率并不高,试题重复、知识点重复或知识点遗漏、试卷覆盖面太窄等现象时有发生,为此,下面结合本人参与省、校级计算机基础无纸化考试命题的体会,给出一种用Visual FoxPro实现的计算机自动组卷的方法和技术。
2 自动组卷方法
通过对现有无纸化考试系统分析,本人认为:要完成自动组卷,必须认真做好试题库的准备:即严格把握试题库的 内容 和表现形式,这一基础工作做好后,接着将其转入到VFP数据表中,最后通过计算机程序进行若干试卷的生成。
2.1 题库的准备
试题库的准备就是将按考试大纲知识点所命的试题通过文字处理软件录入计算机中。为便于计算机自动组卷,每一试题除保证准确无误外,还必须另设一特征码,特征码中包含试题所属章节号、顺序号、难易程度、题型、分值等。设定每一部分用2位表示,那么040506030201这一特征码则代表第4章第5节的第6个题、难易程度为3、题类型为2、分值为1分的一个试题。通过特征码可将非结构化题库转换成结构化题库。
命题时还要注意,题库中不能有完全相同的试题,当一道试题包含多个知识点时,应将该题归入考核关键知识点所在章节中。总之要确保试题惟一、试题内容与特征码所代表的含义要一致。试题录入修改可用Word完成,录入时注意一个试题未录完不要按回车键,每试题可按特征码、题干、答案或特征码、题干、答案、选择题选项的顺序录入。录入时可按特征码从小到大顺序录入,也可随机录入。
2.2 题库数据表的生成
经Word等文字处理软件录入的试题,其文档结构为非结构化的,为了能在VFP中进行处理先将试题库的Word文档格式转换成VFP中能接受的文本格式,再将文本格式的试题库变换成数据表形式,经过二次变换后的题库数据表具有由若干行和若干列组成的二维表结构,事实上,每行代表一试题,每列代表每试题的特征码、题干、答案或特征码、题干、答案、选择题选择项等。
2.3 自动组卷算法
通过初始化工作产生空试卷库表、获取试题库表的参数(如每章每节试题数、每章节不同类型试题数)。
组卷要求中输入:卷面总分、各章节分值分布、卷面所含不同题型数目、组卷套数M等。
选题策略:每章每种题型个数在组卷要求可行情况下,均匀地从各章中随机抽题。
组卷算法如下:
3 实现技术
3.1 Word文档与VFP表的相互转换
Word文档转换为VFP表:先将Word文档的试题库变成文本格式,再使用VFP中的“APPEND FROM 文本文件名 TYPE格式类型”命令将文本格式中的数据转入事先建好的空数据表。
VFP表格式的试卷转换成Word文档:组卷生成的的试卷库表,若需要编辑打印,可用VFP中的“COPY TO 文本文件名TYPE格式类型”命令转换成文本格式,再将其选定后复制到Word文档中。
3.2 随机组卷实例
已知,试题库中有80道试题,分成5种类型,每类型有16个题,现要从每类型题中随机抽取1道题生成10份试卷,即每份试卷由试题库中的5道题组成;设试题库表名为ST.DBF,将要生成的10份试卷的试卷库表名分别为SJ0.DBF、SJ1.DBF、……、SJ9.DBF,各表的结构相同,字段数均为6。
用VFP设计的程序如下:
set talk off
clear
select 2
use ST
dime temp(6)
for N=0 TO 9
FN=STR(N,1)
Copy stru to SJ&FN
Select 1
Use SJ&FN
For j=1 to 5
R=(j-1)*16+1+int(rand()*16)
Select 2
Go R
Scat to s
Select 1
Appe blan
Gath from S
Next
Next
Close ALL
Return
4 结束语
本文阐述了无纸化考试中试卷自动生成的方法和技术,其方法改善了组卷效率、节省了大量人力、确保了试卷的覆盖范围和准确性、有利用于题库的及时更新和维护,且组卷生成的试卷库数据表可供各开发工具导入使用。但将Word格式的试题库转换到VFP数据表中的方法还有待进一步探讨和改进。
VFP各版本运行库的及控件详细解释
2008-10-10 14:50
VFP家族以来,编译后的.EXE文件需要相应版本的支持运行库才能在其它没有安装VFP对应版本的系统上运行,所以若遇上这样问题的人,请参考一下以下内容,找到对应的VFP版本的对应文件,放到你的自己.exe文件程序里即可。
各版本的支持运行库文件:
VFP3 的运行库: VFP300.ESL
VFP5 的运行库:VFP500.DLL、VFP5ENU.DLL
VFP6 的运行库:vfp6r.dll、vfp6rchs.dll、gdiplus.dll (VFP6RUN.EXE、VFP6R.DLL、VFP6RENU.DLL)
VFP7 的运行库:msvcr70.dll、vfp7r.dll、vfp7rchs.dll、gdiplus.dll、vfp7renu.dll
VFP8 的运行库:msvcr70.dll、vfp8r.dll、vfp8rchs.dll、gdiplus.dll
VFP9 的运行库:msvcr71.dll、vfp9r.dll、vfp9rchs.dll、gdiplus.dll、vfp9t.dll
例如:
vfp6编译的EXE程序,需要
VFP6R.DLL
VFP6RCHS.DLL
VFP6RENU
VFP9编译的EXE程序,需要
vfp9r.dll
vfp9t.dll
msvcr71.dll
VFP9RENU.DLL
GDIPlus.DLL
另外:
在发布一个 Visual FoxPro 9.0 开发的可执行程序(.exe)文件时,你需要考虑发布下面的文件:
①.VFPV9R.dll/VFPV9T.dll
VFPV9R.dll 文件是单线程运行库,而 VFPV9T.dll 文件是多线程运行库。如果你用 Visual
FoxPro 开发的是一个服务程序或是.dll 文件,必须同时发布 VFPV9T.dll 文件。
②.VFP9Rchs.dll/VFPV9Rcht.dll
VFPV9Rchs.dll 是简体中文运行库,VFPV9Rcht.dll 是繁体中文运行库。根据运行环境的不同,这两个文件只需要发布一个。
③.GDIPlus.dll
这个文件需要发布。从 Visual FoxPro 8.0 开始,Visual FoxPro 支持 GDI+ 了。因此 Visual FoxPro 的 Image 控件具有了 RotateFlipproperty 属性,你可通过此属性来旋转、反转和翻转图片。
支持的文件格式如下:
.ani、.bmp、.cur、.dib、.emf、.exif、.gif/.gif 动画/.gfa、.ico、.jpg/.jpeg/.jpe/.jfif、.png、.tif/.tiff、.wmf 文件
注意:
在 Visual FoxPro 中,指针、动画指针和图标文件等均可被当作普通图形文件使用。例如,你可为 Image 控件的 Picture 属性指定一个动画指针文件,只不过 Image 控件显示的是静态的指针图像罢了。
④.MSVCR71.dll
Visual C++ 运行库,这是必须发布的一个文件。
⑤.Visual FoxPro 9.0 自带的 ActiveX 控件
下面这些 ActiveX 控件(.ocx 文件) 是在安装 Visual FoxPro 9.0 时默认安装的,它们可随你的应用程序一起自由发布。ActiveX 控件是在使用 Visual FoxPro OLE 容器控件时被添加到表单的。你在开发软件时不一定都会用到。因此,只需将用到的.ocx 文件和你的程序一起发布即可。这些控件的帮助文件在 MSDN 中提供。
MSCOMCtl.ocx 包括: ImageCombo、ImageList、ListView、ProgressBar、Slider、StatusBar、TabStrip、Toolbar 和 TreeView 控件 ( 注意:在 7.0 及以前的版本中该文件的名字是 Comctl32.ocx
MSCOMCt2.ocx 包括: Animation、DateTimePicker、FlatScrollBar、MonthView 和 UpDown 控件
MCI32.ocx 包括: Multimedia MCI 控件
MSChrt20.ocx 包括: MsChart 控件
MSCOMM32.ocx 包括: MSComm 控件
MSInet.ocx 包括: Microsoft Internet Transfer 控件
MSMapi32.ocx 包括: MAPIMessages 和 MAPISession 控件
MSMask32.ocx 包括: Masked Edit 控件
MSWinsck.ocx 包括: Winsock 控件
Picclp32.ocx 包括: PictureClip 控件
Richtx32.ocx 包括: RichTextBox 控件
Sysinfo.ocx 包括: SysInfo 控件
⑥.VfpOleDB.dll
这个文件是其它程序设计语言及应用程序中访问 Visual FoxPro 数据库和表的 OLE DB 接口,一般用不到。
⑦.vfpodbc.dll
vfpodbc.dll 文件是 ODBC(数据库链接) 驱动程序,需要你就发布。
⑧.你在开发时用到的其它第三方控件
展开阅读全文