一:前言 ----众所周知,VB中的MCI控件在设计多媒体CAI(Computer Assisted Instruction) 软件中有着非常重要的作用,有关这方面的文章也很多;其实,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 的 数 据 库, 可 用 如 下 方 法 把 它 进 行 转 换: 先 用Foxpro For Windows 打 开DBF 形 式 的 数 据 库, 然 后 把 它 另 存 为 扩 展 名 为XLS 的Excel 表 格 文 件, 再 利 用Access 就 可 以 把Excel 表 格 文 件 转 换 为MDB 形 式 的 数 据 库。 在 图 一 中, 每 个 题 目 的 编 号 和 答 案 就 存 放 在 数 据 库 中, 通 过 用 鼠 标 单 击" 下 一 题" 和" 上 一 题", 可 以 把 数 据 库 的 指 针 指 向 任 何 一 条 记 录。 四:MsgBox 函 数 和 语 句 的 应 用 ---- MsgBox 函 数 是VB 提 供 的 以 多 种 方 式 将 信 息 传 递 给 用 户 的 函 数, 它 有 函 数 和 语 句 两 种 形 式, 函 数 和 语 句 的 根 本 区 别 在 于 函 数 有 返 回 值 而 语 句 没 有。 当MsgBox 将 信 息 传 递 给 用 户 时, 传 递 信 息 的 窗 口 是 嵌 在 运 行 程 序 的 窗 口 中; 因 此, 在CAI 程 序 设 计 中, 这 个 函 数 非 常 有 用, 如 果 能 把 它 与 数 据 库 的 应 用 结 合 起 来, 其 作 用 就 更 大。 在 图 一 中, 用 鼠 标 单 击" 答 案", 电 脑 不 仅 告 诉 你 该 题 目 的 答 案, 还 告 诉 你 选 择 答 案 的 理 由, 见 图 二。 ---- 这 就 是 利 用 了MsgBox 语 句 的 结 果。 在 程 序 设 计 阶 段, 设 计 出 几 个 标 签 或 文 本 框, 它 们 分 别 与 数 据 库 中 的" 答 案" 和" 答 案 说 明" 字 段 相 关 联, 这 样, 当 图 一 中 的 题 目 的 编 号 改 变 时," 答 案" 所 输 出 的 内 容 也 跟 随 变 化。 由 于MsgBox 函 数 输 出 的 信 息 可 多 达1024 个 字 符, 所 以, 一 般 的 选 择 题, 填 空 题, 简 答 题 的 答 案 和 选 择 答 案 的 理 由 都 可 以 用 它 来 输 出。 值 得 一 提 的 是: 数 据 库 的 字 符 型 字 段 最 多 只 能 容 纳255 个 字 符, 因 此, 当 问 题 的 答 案 和 答 案 说 明 比 较 长 时, 就 要 把 它 们 分 成 几 个 字 段。
五: 计 时 器 的 应 用 ---- 在CAI 程 序 中, 经 常 要 记 录 学 生 练 习 或 考 试 所 用 的 时 间,VB 中 就 是 使 用 计 时 器 来 完 成 这 个 任 务 的。 图 一 中 所 显 示 的 时 间 就 是 使 用 者 从 一 开 始 做 练 习 到 目 前 所 用 的 时 间。 计 时 器 的 另 外 一 个 作 用 就 是 进 行 倒 计 时, 倒 计 时 程 序 在 设 计 限 时 练 习 和 限 时 考 试 程 序 就 要 用 到, 当 倒 计 时 为 零 时, 程 序 自 动 结 束 运 行, 限 时 练 习 或 考 试 也 随 之 结 束。 ---- 下 面 这 个 程 序 是 图 一 所 对 应 的 源 程 序 的 主 要 部 分, 它 包 括 了 以 上 四 个 方 面 的 应 用。
Dim h0 As Integer 'ho,mo,so为初始时间 Dim m0 As Integer Dim s0 As Integer Private Sub Command5_Click() '用鼠标单击"上一题" If Val(Label1.Caption) > 1 Then Data1.Recordset.MovePrevious Else Title = "提示" msg2$ = "这是第一题!" MsgBox msg2$, 0, Title End If End Sub Private Sub Command7_Click() '用鼠标单击"下一题" If Val(Label1.Caption) < 224 Then '一共224道题 Data1.Recordset.MoveNext Else Title = "提示" msg2$ = "这是最后一题!" MsgBox msg2$, 0, Title End If End Sub Private Sub Command8_Click() '用鼠标单击"确定" ch = UCase$(Trim$(Text2.Text)) ans = UCase$(Label4.Caption) If StrComp(ch, ans, 1) = 0 Then '如果与题目的正确答案一样 Title = "提示" msg1$ = "你做对了!" msg2$ = "这是最后一题,你做对了" If Val(Label1.Caption) < 224 Then MsgBox msg1$, 0, Title Else MsgBox msg2$, 0, Title Close End If Else Title = "提示" msg1$ = "你做错了!" msg2$ = "这是最后一题,你做错了" If Val(Label1.Caption) < 224 Then MsgBox msg1$, 0, Title Else MsgBox msg2$, 0, Title Close End If End If Text2.Text = " " '把第二个文本框的内容变空 End Sub Private Sub Command9_Click() '用鼠标单击"答案" an = Label4.Caption 'an为题目的正确答案 jx = Label6.Caption 'jx为题目的答案说明 Title = "答案提示" msg2$ = "本题答案为:" & an + jx MsgBox msg2$, 0, Title End Sub Private Sub Form_Load() Open "C:/gram/gram.txt" For Binary As #1 'gram.txt文件里存放了练习题的内容 filelength = LOF(1) If filelength > 60000 Then MsgBox "File is too long", 16 Exit Sub End If tmp$ = String$(LOF(1), 0) Get #1, , tmp$ Text1.Text = tmp$ Close #1 h0 = Val(Time$) m0 = Minute(Time$) s0 = Second(Time$) Text2.Text = " " End Sub
Private Sub Text2_Change() Text2.Text = UCase$(Text2.Text) '把第二个文本框里的内容变成大写 End Sub
Private Sub Timer1_Timer() Dim gg As Integer Dim h As Integer Dim m As Integer Dim s As Integer Dim x1 As Integer Dim x2 As Integer 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) + " 秒" End Sub
六: 在 线 帮 助 的 应 用 ---- 我 们 这 里 讲 的 在 线 帮 助 是 指 模 仿Windows 的 在 线 帮 助, 把 各 种 练 习 题 或 试 题 以 及 它 们 的 答 案 以 在 线 帮 助 的 形 式 在 屏 幕 上 呈 现 出 来( 见 图 三), 并 非 是 指 在 程 序 中 加 一 个 帮 助 菜 单 来 告 诉 学 生 如 何 使 用CAI 软 件。Windows 的 在 线 帮 助 本 身 就 是 一 个 很 好 的 教 学 软 件, 如 果 在CAI 程 序 中 模 仿Windows 的 在 线 帮 助, 那 将 使 你 的CAI 程 序 更 加 实 用。 例 如: 各 种 选 择 题、 填 空 题 特 别 是 问 答 题 和 论 述 题, 要 让 学 生 能 快 速 查 阅 问 题 的 答 案, 使 用 在 线 帮 助 是 最 好 不 过 的 了。 实 际 上, 在Internet 或HTML 没 有 兴 起 之 前, 国 外 很 多 的CAI 软 件 中 就 有 模 仿Windows 在 线 帮 助 的 模 块。 要 把 各 种 练 习 题 或 试 题 以 及 它 们 的 答 案 以 在 线 帮 助 的 形 式 在 屏 幕 上 呈 现 出 来, 就 要 把 它 们 制 作 成 帮 助 文 件, 为 此, 请 先 用WORD 把 练 习 题 或 试 题 以 及 它 们 的 答 案 编 辑 好, 为 了 让 使 用 者 更 加 方 便 操 作, 编 辑 时 可 以 在 每 个 小 题 的 后 面 加 上 这 几 个 字" 单 击 此 处 可 查 阅 答 案"( 或 简 单 一 点 就 用" 答 案"), 制 作 帮 助 文 件 时, 就 把 这 几 个 字 作 为 关 键 词 分 别 与 每 个 题 目 的 答 案 建 立 关 联, 详 细 介 绍 如 何 制 作 帮 助 文 件 的 文 章 已 很 多, 在 此 就 不 介 绍 了。 ---- 在VB 中 调 用 帮 助 系 统 的 方 法 之 一 是: 在 程 序 设 计 阶 段, 在 窗 口 中 设 计 出 一 个 命 令 按 钮 和 一 个 对 话 框, 然 后 加 进 如 下 代 码:
Attribute VB_Name = "Module1" 'Declaration for WinHelp Declare Function OSWinHelp% Lib "User" Alias "WinHelp" (ByVal hwnd%, ByVal HelpFile$, ByVal wCommand%, dwData As Any)
Private Sub SSCommand1_Click() Cls With CommonDialog1 .HelpCommand = cdlHelpContents .HelpFile = "C:/zggm/ch23.hlp" 'ch23.hlp是我自己制作的一个帮助文件 .ShowHelp End With End Sub  
|