?? 074.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<10 then<br>
F:=':0'<br>
else<br>
F:=':';<br>
if TestTimer<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]<>'' 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<>'' 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中的每一個字,如果不同,用"X"號替換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<=Length(AnsStr) do<br>
begin<br>
LStr:=Copy(AnsStr,I,2);<br>
MStr:=Copy(TstStr,I,2);<br>
if LStr<>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 + -