一:前言
—-众所周知,VB中的MCI控件在设计多媒体CAI(ComputerAssistedInstruction)软件中有着非常重要的作用,有关这方面的文章也很多;其实,VB中其它众多控件在设计CAI软件时也有不少应用,本文就介绍几个在非多媒体CAI编程中有着特殊应用的控件,相信对广大CAI编程者有所帮助。
二:文本框的应用
—-在CAI编程中经常要面临这样的问题:如何在屏幕上显示大量的练习题或试题?学生如何在屏幕上输进多项选择题、填空题或问答题的答案?利用VB中的文本框就能很容易地解决这个问题。文本框(TextBox)是VB中的最基本的字符串输入和输出对象,它不仅可以供用户输入数据,还可以显示程序输出的数据和已编辑好的文本文件。这样,只要我们事先把大量的练习题或试题用文字处理软件编辑成文本文件,然后在VB程序的运行阶段用文本框显示文本文件的内容即可。
下图是一个用来辅导学生学习英语的程序界面:
—-图一中有二个文本框,大文本框用来显示练习题的内容,小文本框用来供学生输入答案,大小文本框的一些重要属性的设置情况如下:①:大文本框的MaxLength值设为缺省值0,表示它能容纳的最多字符数没有限制,而小文本框的MaxLength值的设置可根据实际情况进行限制或不限制字数,在这里是没有限制字数。②:大文本框的MultiLine值设为True,这样,大文本框就允许有多行文字输出显示,小文本框的MultiLine值设为False,表示小文本框就只允许有一行文字输出显示。③:大文本框的ReadOnly值设为True,表示不允许修改大文本框里的练习题的内容,小文本框的ReadOnly值设为False,表示可以修改小文本框里的内容。④:大文本框的Scrollbars值设为3,表示大文本框有水平和垂直滚动条,小文本框的Scrollbars值设为0,表示小文本框没有滚动条。⑤:大小文本框的Text值设为空的,否则,程序运行时将在文本框里显示Text1。
—-由于小文本框里的字符数可以不限制,因此,图一也适用于多项选择题,填空题甚至简答题和问答题。
三:数据库的应用
—-数据库在CAI程序设计中应用很广,数据库可用来存放题目的编号、题目的内容和答案以及学生输入的答案等等。为了程序运行时数据库对象不在屏幕上显示出来,要求把数据库对象的Visible属性设为False。VB可以访问多种数据库,并且编程也不复杂。为了加快数据库的访问速度,最好使用Access建立的扩展名为MDB的数据库,如果是用Foxbase或Foxpro建立的扩展名为DBF的数据库,可用如下方法把它进行转换:先用FoxproForWindows打开DBF形式的数据库,然后把它另存为扩展名为XLS的Excel表格文件,再利用Access就可以把Excel表格文件转换为MDB形式的数据库。在图一中,每个题目的编号和答案就存放在数据库中,通过用鼠标单击”下一题”和”上一题”,可以把数据库的指针指向任何一条记录。
四:MsgBox函数和语句的应用
—-MsgBox函数是VB提供的以多种方式将信息传递给用户的函数,它有函数和语句两种形式,函数和语句的根本区别在于函数有返回值而语句没有。当MsgBox将信息传递给用户时,传递信息的窗口是嵌在运行程序的窗口中;因此,在CAI程序设计中,这个函数非常有用,如果能把它与数据库的应用结合起来,其作用就更大。在图一中,用鼠标单击”答案”,电脑不仅告诉你该题目的答案,还告诉你选择答案的理由,见图二。
—-这就是利用了MsgBox语句的结果。在程序设计阶段,设计出几个标签或文本框,它们分别与数据库中的”答案”和”答案说明”字段相关联,这样,当图一中的题目的编号改变时,”答案”所输出的内容也跟随变化。由于MsgBox函数输出的信息可多达1024个字符,所以,一般的选择题,填空题,简答题的答案和选择答案的理由都可以用它来输出。值得一提的是:数据库的字符型字段最多只能容纳255个字符,因此,当问题的答案和答案说明比较长时,就要把它们分成几个字段。
五:计时器的应用
—-在CAI程序中,经常要记录学生练习或考试所用的时间,VB中就是使用计时器来完成这个任务的。图一中所显示的时间就是使用者从一开始做练习到目前所用的时间。计时器的另外一个作用就是进行倒计时,倒计时程序在设计限时练习和限时考试程序就要用到,当倒计时为零时,程序自动结束运行,限时练习或考试也随之结束。
—-下面这个程序是图一所对应的源程序的主要部分,它包括了以上四个方面的应用。
Dimh0AsInteger
ho,mo,so为初始时间
Dimm0AsInteger
Dims0AsInteger
PrivateSubCommand5_Click()
用鼠标单击”上一题”
IfVal(Label1.Caption)>1Then
Data1.Recordset.MovePrevious
Else
Title=”提示”
msg2$=”这是第一题!”
MsgBoxmsg2$,0,Title
EndIf
EndSub
PrivateSubCommand7_Click()
用鼠标单击”下一题”
IfVal(Label1.Caption)<224Then
一共224道题
Data1.Recordset.MoveNext
Else
Title=”提示”
msg2$=”这是最后一题!”
MsgBoxmsg2$,0,Title
EndIf
EndSub
PrivateSubCommand8_Click()
用鼠标单击”确定”
ch=UCase$(Trim$(Text2.Text))
ans=UCase$(Label4.Caption)
IfStrComp(ch,ans,1)=0Then
如果与题目的正确答案一样
Title=”提示”
msg1$=”你做对了!”
msg2$=”这是最后一题,你做对了”
IfVal(Label1.Caption)<224Then
MsgBoxmsg1$,0,Title
Else
MsgBoxmsg2$,0,Title
Close
EndIf
Else
Title=”提示”
msg1$=”你做错了!”
msg2$=”这是最后一题,你做错了”
IfVal(Label1.Caption)<224Then
MsgBoxmsg1$,0,Title
Else
MsgBoxmsg2$,0,Title
Close
EndIf
EndIf
Text2.Text=””
把第二个文本框的内容变空
EndSub
PrivateSubCommand9_Click()
用鼠标单击”答案”
an=Label4.Captionan为题目的正确答案
jx=Label6.Captionjx为题目的答案说明
Title=”答案提示”
msg2$=”本题答案为:”&an jx
MsgBoxmsg2$,0,Title
EndSub
PrivateSubForm_Load()
Open”C:\gram\gram.txt”ForBinaryAs#1
gram.txt文件里存放了练习题的内容
filelength=LOF(1)
Iffilelength>60000Then
MsgBox”Fileistoolong”,16
ExitSub
EndIf
tmp$=String$(LOF(1),0)
Get#1,,tmp$
Text1.Text=tmp$
Close#1
h0=Val(Time$)
m0=Minute(Time$)
s0=Second(Time$)
Text2.Text=””
EndSub
PrivateSubText2_Change()
Text2.Text=UCase$(Text2.Text)
把第二个文本框里的内容变成大写
EndSub
PrivateSubTimer1_Timer()
DimggAsInteger
DimhAsInteger
DimmAsInteger
DimsAsInteger
Dimx1AsInteger
Dimx2AsInteger
h=Val(Time$)
m=Minute(Time$)
s=Second(Time$)
gg=(h-h0)*3600 (m-m0)
*60 (s-s0)
x1=Int(gg/60)
x2=(gg-(Int(gg/60))*60)
Label7.Caption=Str(x1) “分”
Str(x2) “秒”
EndSub
六:在线帮助的应用
—-我们这里讲的在线帮助是指模仿Windows的在线帮助,把各种练习题或试题以及它们的答案以在线帮助的形式在屏幕上呈现出来(见图三),并非是指在程序中加一个帮助菜单来告诉学生如何使用CAI软件。Windows的在线帮助本身就是一个很好的教学软件,如果在CAI程序中模仿Windows的在线帮助,那将使你的CAI程序更加实用。例如:各种选择题、填空题特别是问答题和论述题,要让学生能快速查阅问题的答案,使用在线帮助是最好不过的了。实际上,在Internet或HTML没有兴起之前,国外很多的CAI软件中就有模仿Windows在线帮助的模块。要把各种练习题或试题以及它们的答案以在线帮助的形式在屏幕上呈现出来,就要把它们制作成帮助文件,为此,请先用WORD把练习题或试题以及它们的答案编辑好,为了让使用者更加方便操作,编辑时可以在每个小题的后面加上这几个字”单击此处可查阅答案”(或简单一点就用”答案”),制作帮助文件时,就把这几个字作为关键词分别与每个题目的答案建立关联,详细介绍如何制作帮助文件的文章已很多,在此就不介绍了。
—-在VB中调用帮助系统的方法之一是:在程序设计阶段,在窗口中设计出一个命令按钮和一个对话框,然后加进如下代码:
AttributeVB_Name=”Module1″
DeclarationforWinHelp
DeclareFunctionOSWinHelpLib”User”
Alias”WinHelp”(ByValhwnd,ByVal
HelpFile$,ByValwCommand,dwDataAsAny)
PrivateSubSSCommand1_Click()
Cls
WithCommonDialog1
.HelpCommand=cdlHelpContents
.HelpFile=”C:\zggm\ch23.hlp”
ch23.hlp是我自己制作的一个帮助文件
.ShowHelp
EndWith
EndSub->