⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 074.htm

📁 Delphi书籍--Delphi网上教程
💻 HTM
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI专题文档-程序应用-->用De1phi编制汉字录入能力测试软件</TITLE>
<META NAME="keywords" CONTENT=" DELPHI专题文档-程序应用 用De1phi编制汉字录入能力测试软件">
<META NAME="description" CONTENT=" - DELPHI专题文档-程序应用 - 用De1phi编制汉字录入能力测试软件">

<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋体"}
.tt2 {font: 12pt/15pt "宋体"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<a href="index6.html">返回</a>

<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>

<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">用De1phi编制汉字录入能力测试软件</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<br>
----计算机应用能力考试中少不了对汉字输入能力的考核,在平时的教学考核中,这部分内容用笔试进行,但有下列缺点:首先是批改十分困难,其次是输入法必须限定,再者也是最主要的是不能较准确地反映学生的真实水平。针对这些问题,笔者用先进的可视化编程工具De1phi开发了基于windows平台的汉字录入能力水平测试软件。该软件可由教师自己出题,可设置考试时间,有查错能力,有评分功能。由于该软件是借助于操作系统提供的输入法录入汉字,因此软件适用于使用各种输入法的用户。下面将主要的方法作一介绍:<br>
<br>
1.试题与答卷<br>
<br>
----试题是以文本文件的形式保存,因此一般的文本编辑器均可以直接对其进行编辑。试题通过OpenDia1og控件装入到名为TestMemo的Memo控件中,为显示清楚,用一TPanel控件TPanel0并将其设为黑色构成一模拟黑板,通过几个Label将TestMemo中的试题分行显示在TPanel0上,达到在黑板上出试题的效果。因为黑板上一行最多只能显示二十个汉字,故又引人ShowMemo控件,将TestMemo中过长的行转换为二十个字一行,防止出行。这里TestMemo和ShowMemo的Visible属性均为False。<br>
<br>
----答卷用被称为AnswerMemo的Memo控件实现,可充分利用该控件的编辑功能。<br>
<br>
2.同步显示能力<br>
<br>
----由于试题内容通常较多,不能在黑板上一次全部显出,因而显示的内容应受AnswerMemo中的光标控制。也就是说,随着AnswerMemo中的光标在不同行的移动,黑板上也应及时显示出这行需输入的内容。因此确定光标的位置是关键,该功能是利用函数UpdateCursorPos实现的,过程如下:<br>
<br>
   Procedure TMain.UpdateCursorPos;<br> 
   var<br>
     CharPos:TPoint;<br>
   begin<br>
     CharPos.Y:= SendMessage(AnswerMemo.Handle,<br> 
EM_LINEFROMCHAR,AnswerMemo.SelStart,0);<br> 
     CharPos.X:=(AnswerMemo.SelStart<br>
     SendMessage(AnswerMemo.Handle,<br>
EM_LINEINDEX,CharPos.Y,0));<br>
     CurX:=CharPos.x;<br>
     CurY:=CharPos.y;<br>
   end;<br>
----在过程Check中调用该过程,而后由AnswerMemo的OnKeyUp事件中调用Check,实现了在答卷过程中光标换行的移动试题内容也随之移动的效果。<br>
<br>
3.禁止从剪贴板复制<br>
<br>
----由于Windows具有从剪贴板复制内容的功能,使得试题内容能非常容易地被复制到AnswerMemo中而Memo控件又不具备禁止从剪贴板复制的功能,从而造成不答题也能得满分的恶果,因此,必须有禁止从剪贴板复制的能力。实现方法是在USES中添加Clipbrd,再在AnswerMemo的OnKeyPress事件处理过程中写入Clipboard.Clear,这样在答卷时一按健就将剪贴板中的内容清除。<br>
<br>
4.定时器的实现<br>
<br>
----既然是测试自然少不了定时功能,利用Timer控件能方便地实现定时器的制作。但是Timer是非可视控件,需要写代码来显示所剩时间。在StopWatchTimer的唯一事件OnTimer处理过程中进行如下设计。<br>
<br>
   procedure TMain.StopWatchTimer<br> 
(Sender:TObject);<br> 
   var B,F:String;<br> 
   begin<br>
   if SecTime=0 then<br> 
     begin<br>
       SecTime:=59;<br>
       TestTime:=TestTimer -1;<br> 
     end<br>
   else<br>
     SecTime:=SecTime -1;<br> 
   if SecTime&lt;10 then<br> 
     F:=':0'<br>
   else<br>
     F:=':';<br>
   if TestTimer&lt;10 then<br> 
     B:='0'<br>
   else<br>
     b:='';<br>
   label5.Caption:=B +IntToStr(TestTime)<br> 
+F +IntToStr(SecTime);<br> 
… … …<br> 
----这里label5用于显示测试所剩时间,SecTime与TestTime分别是在TMain类中的private和public下定义的Integer型变量。<br> 
<br> 
5.评分功能<br> 
<br> 
----当测试到时后,应先禁止输入,这只要在StopWatchTimer过程中加上AnswerMemo.Enabled:=False;语句即可。另外应显示考试成绩,过程CompareAnswerTest就是比较AnswerMemo和ShowMemo中的内容,统计出输入正确的汉字个数并放于变量ExactWordCount中。<br> 
<br> 
----程序如下: <br> 
<br> 
procedure TMain.CompareAnswerTest;<br> 
var i,j:Integer;<br> 
   s,w:string;<br>
begin<br>
   i:=0;<br>
   while ShowMemo.lines.Strings[i]&lt;&gt;'' do<br> 
     begin<br>
       j:=1;<br>
S:=copy<br>
(ShowMemo. Lines. strings[i],j,2);<br> 
       W:=copy<br>
(AnswerMemo.Lines.Strings[i],j,2);<br>
       while s&lt;&gt;'' do<br> 
           begin<br>
             if s=w then ExactWordCount:<br> 
=ExactWordCaount +1;<br> 
             j:=j +2;<br> 
             s:=copy<br>
(ShowMemo. Lines. strings[i],j,2);<br> 
             w:=copy<br>
(AnswerMemo.Lines.Strings[i],j,2);<br>
           end;<br>
       i:=i +1;<br> 
    end;<br> 
end;<br> 
----在StopWatchTimer中调用该过程,用一组Label控件显示出正确数以及成绩等结果。<br> 
<br> 
6.查错功能<br> 
<br> 
----类似于查找和替换的方法,比较AnswerMemo和ShowMemo中的每一个字,如果不同,用&quot;X&quot;号替换AnswerMemo中的内容。用一按钮来调用该功能,在CheckButton的OnClick事件处理过程中实现了该功 
能。 <br> 
<br> 
 procedure TMain.Check<br> 
ButtonClick(Sender:TObject);<br> 
 Var<br>
   AnsStr,TstStr,LStr,MStr:String;<br>
   I,J:Integer;<br>
 begin<br>
   for J:=0 to AnswerMemo.Lines.Count -1 do<br> 
     begin <br>
       TstStr:=ShowMemo.lines.Strings[J];<br>
       AnsStr:=AnswerMemo.lines.strings[j];<br>
       I:=1;<br>
       while I&lt;=Length(AnsStr) do<br> 
         begin<br>
           LStr:=Copy(AnsStr,I,2);<br>
           MStr:=Copy(TstStr,I,2);<br>
           if LStr&lt;&gt;MStr then<br> 
             begin<br>
               Delete(AnsStr,I,2);<br>
               Insert('x',AnsStr,I);<br>
             end;<br>
             I:=I +2<br> 
         end;<br>
         AnswerMemo.Lines.Strings[J]:=AnsStr;<br>
     end;<br>
 end; <br>
<br>
7.结束语<br>
<br>
----笔者用本程序对学生进行五笔字型输入法录入能力教学考核,结束后部分学生对自己的成绩不满意要求重试,但结果相差不大,说明软件能较准确地反映考生的真实水平。</p>
<hr color="#EE9B73" size="1" width="94%">

</TD>

</TR>
</table>
</BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -