
本站地址:http://www.bajiao123.com

用Delphi编制汉字录入能力测试软件
计 算 机 应 用
能 力 考 试 中 少 不 了 对 汉 字 输 入 能 力 的 考 核, 在 平 时 的
教 学 考 核 中, 这 部 分 内 容 用 笔 试 进 行, 但 有 下 列 缺
点: 首 先 是 批 改 十 分 困 难, 其 次 是 输 入 法 必 须 限 定,
再 者 也 是 最 主 要 的 是 不 能 较 准 确 地 反 映 学 生 的 真 实
水 平。 针 对 这 些 问 题, 笔 者 用 先 进 的 可 视 化 编 程 工 具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
这 里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:=copy
(AnswerMemo.Lines.Strings[i],j,2);
while s''
本站地址:http://www.bajiao123.com

