| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> delphi >> 程序应用 >> 文章正文
用De1phi编制汉字录入能力测试软件            【字体:
用De1phi编制汉字录入能力测试软件
作者:不祥    文章来源:-    点击数:    更新时间:2006-12-12

width="84%">
用De1phi编制汉字录入能力测试软件

淮阴师范学院数学系--吴克力

----计算机应用能力考试中少不了对汉字输入能力的考核,在平时的教学考核中,这部分内容用笔试进行,但有下列缺点:首先是批改十分困难,其次是输入法必须限定,再者也是最主要的是不能较准确地反映学生的真实水平。针对这些问题,笔者用先进的可视化编程工具De1phi开发了基于windows平台的汉字录入能力水平测试软件。该软件可由教师自己出题,可设置考试时间,有查错能力,有评分功能。由于该软件是借助于操作系统提供的输入法录入汉字,因此软件适用于使用各种输入法的用户。下面将主要的方法作一介绍:

1.试题与答卷

----试题是以文本文件的形式保存,因此一般的文本编辑器均可以直接对其进行编辑。试题通过OpenDia1og控件装入到名为TestMemo的Memo控件中,为显示清楚,用一TPanel控件TPanel0并将其设为黑色构成一模拟黑板,通过几个Label将TestMemo中的试题分行显示在TPanel0上,达到在黑板上出试题的效果。因为黑板上一行最多只能显示二十个汉字,故又引人ShowMemo控件,将TestMemo中过长的行转换为二十个字一行,防止出行。这里TestMemo和ShowMemo的Visible属性均为False。

----答卷用被称为AnswerMemo的Memo控件实现,可充分利用该控件的编辑功能。

2.同步显示能力

----由于试题内容通常较多,不能在黑板上一次全部显出,因而显示的内容应受AnswerMemo中的光标控制。也就是说,随着AnswerMemo中的光标在不同行的移动,黑板上也应及时显示出这行需输入的内容。因此确定光标的位置是关键,该功能是利用函数UpdateCursorPos实现的,过程如下:

   Procedure TMain.UpdateCursorPos;
   var
     CharPos:TPoint;
   begin
     CharPos.Y:= SendMessage(AnswerMemo.Handle,
EM_LINEFROMCHAR,AnswerMemo.SelStart,0);
     CharPos.X:=(AnswerMemo.SelStart
     SendMessage(AnswerMemo.Handle,
EM_LINEINDEX,CharPos.Y,0));
     CurX:=CharPos.x;
     CurY:=CharPos.y;
   end;
----在过程Check中调用该过程,而后由AnswerMemo的OnKeyUp事件中调用Check,实现了在答卷过程中光标换行的移动试题内容也随之移动的效果。

3.禁止从剪贴板复制

----由于Windows具有从剪贴板复制内容的功能,使得试题内容能非常容易地被复制到AnswerMemo中而Memo控件又不具备禁止从剪贴板复制的功能,从而造成不答题也能得满分的恶果,因此,必须有禁止从剪贴板复制的能力。实现方法是在USES中添加Clipbrd,再在AnswerMemo的OnKeyPress事件处理过程中写入Clipboard.Clear,这样在答卷时一按健就将剪贴板中的内容清除。

4.定时器的实现

----既然是测试自然少不了定时功能,利用Timer控件能方便地实现定时器的制作。但是Timer是非可视控件,需要写代码来显示所剩时间。在StopWatchTimer的唯一事件OnTimer处理过程中进行如下设计。

   procedure TMain.StopWatchTimer
(Sender:TObject);
   var B,F:String;
   begin
   if SecTime=0 then
     begin
       SecTime:=59;
       TestTime:=TestTimer -1;
     end
   else
     SecTime:=SecTime -1;
   if SecTime<10 then
     F:=':0'
   else
     F:=':';
   if TestTimer<10 then
     B:='0'
   else
     b:='';
   label5.Caption:=B +IntToStr(TestTime)
+F +IntToStr(SecTime);
… … …
----这里label5用于显示测试所剩时间,SecTime与TestTime分别是在TMain类中的private和public下定义的Integer型变量。

5.评分功能

----当测试到时后,应先禁止输入,这只要在StopWatchTimer过程中加上AnswerMemo.Enabled:=False;语句即可。另外应显示考试成绩,过程CompareAnswerTest就是比较AnswerMemo和ShowMemo中的内容,统计出输入正确的汉字个数并放于变量ExactWordCount中。

----程序如下:

procedure TMain.CompareAnswerTest;
var i,j:Integer;
   s,w:string;
begin
   i:=0;
   while ShowMemo.lines.Strings[i]<>'' do
     begin
       j:=1;
S:=copy
(ShowMemo. Lines. strings[i],j,2);
       W:=cop

[1] [2] 下一页  

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • 如何将你的程序放在Windows启…

  • 如何隐藏和显示Windows的任务…

  • 状态条插入可视控件

  • 屏蔽系统功能键

  • 查阅可视窗口标题

  • 如何做一个SYSTRAY程序

  • 一个实用的Delphi屏幕拷贝程…

  • 如何运行一个程序直到它结束

  • 如何在Delphi程序中支持文件…

  • 如何从任务栏上隐藏应用程序…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |