荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Peter (小飞侠), 信区: Program
标  题: vb编程小技巧4
发信站: BBS 荔园晨风站 (Thu Jan 21 22:36:16 1999), 转信


VB 开 发 小 技 巧(4)

   防 止 用 户 编 辑 文 本 框 控 件 中
                          的 内 容

                                谭翁



---- Visual Basic 中 的 文 本 框 控 件 允 许 用 户 在 其 中
键 入 文 本, 以 便 在 程 序 中 使 用。 相 反, 程 序 员 可
能 会 希 望 显 示 一 些 文 本 但 不 希 望 用 户 编 辑 该 文
本。 本 文 介 绍 了 如 何 创 建 只 读 的 文 本 框 控 件 的
内 容。

使 一 个 文 本 框 控 件 只 读

---- 在Visual Basic 中, 如 果 文 本 框 控 件 的MultiLine 属
性 设 置 为True, 文 本 将 会 自 动 地 换 行 到 下 一 行。
另 外, 如 果 文 本 框 控 件 的ScrollBars 属 性 设 置
为3-Both( 或 者1-Vertical, 或 者2-Horizontal), 用 户 还
能 够 滚 动 控 件 中 的 内 容。

---- 程 序 员 要 想 实 现 文 本 框 控 件 中 的 文 本 不 可
编 辑, 可 将 文 本 框 控 件 中 的 内 容 设 置 为 只 读 状
态, 这 可 以 通 过 使 用Microsoft Windows 应 用 程 序 编 程
接 口(API) 的SendMessage 函 数 来 实 现。 SendMessage 函
数 可 以 用 来 发 送 一 个EM_SETREADONLY 消 息 到 文 本 框
控 件 中, 这 将 使 文 本 框 控 件 变 为 只 读。

---- 要 在 程 序 中 使 用 该SendMessage 函 数, 需 要 将 如
下 的 声 明 语 句 包 含 在 项 目 的 通 用 声 明 部 分 中
?注 意 该 声 明 语 句 需 要 书 写 在 一 行 内):

---- Private Declare Function SendMessage Lib "user32" Alias
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long,
ByVal wParam As Integer, ByVal lParam As Long) As Long

---- 该SendMessage 函 数 需 要4 个 参 数, 如 下 所 示:

---- .hwnd 一 个 长 整 数 值, 它 包 含 文 本 框 控 件 的 句
柄。

---- .wMsg 一 个 长 整 数 值, 它 包 含 被 发 送 的 消 息,
在 这 个 例 子 里, 是EM_SETREADONLY。

---- .wParam 一 个 整 数 值, 如 果 它 为True, 则 控 件 被
设 置 只 读 标 记, 如 果 它 为False, 则 删 除 控 件 的 只
读 标 记。

---- .lParam 一 个 长 整 数 值, 它 应 该 被 设 置 为0
(EM_SETREADONLY 不 使 用 它)。

---- 在 程 序 运 行 了 此SendMessage 函 数 之 后, 将 返 回
一 个 长 整 数 值, 指 明 调 用 成 功( 返 回 值 非0) 或 是
失 败( 返 回 值 为0)。

样 例 程 序

---- 该 程 序 显 示 了 如 何 防 止 用 户 编 辑 一 个 文 本
框 控 件 中 的 内 容。

---- 1. 在Visual Basic 中 开 始 一 个 新 的 工 程, 采 用 缺
省 的 方 法 建 立Form1。

---- 2. 将 如 下 的 常 量 和 声 明 语 句 添 加 到Form1 的 通
用 声 明 部 分 中( 注 意 该 声 明 语 句 需 要 书 写 在 一
行 内):

---- Private Declare Function SendMessage Lib "user32" Alias
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long,
ByVal wParam As Integer, ByVal lParam As Long) As Long
---- Const WM_USER = &H400
---- Const EM_SETREADONLY = (WM_USER + 31)

---- 4. 在Form1 上 添 加 一 个 文 本 框 控 件, 采 用 缺 省
的 方 法 建 立Text1。 将 其MultiLine 属 性 设 置 为True, 并
且 将 它 的ScrollBars 属 性 设 置 为3-Both。

---- 5. 在Form1 上 添 加 一 个 命 令 按 钮 控 件, 采 用 缺
省 的 方 法 建 立Command1。

---- 6. 将 如 下 的 代 码 添 加 到Command1 的 单 击 事 件
中:



Private Sub Command1_Click()

    Dim RetVal As Long

    RetVal = SendMessage(Text1.hwnd, EM_SETREADONLY, True, ByVal 0&)

End Sub


---- 通 过 按 下F5 键 来 执 行 样 例 程 序。 在 文 本 框 控
件 中 键 入 一 些 文 本, 可 以 使 用 水 平 和 垂 直 滚 动
条 来 滚 动 文 本, 还 可 以 改 变 文 本 的 内 容。 单 击 命
令 按 钮, 用 户 仍 然 可 以 使 用 滚 动 条 或 是 光 标 键
来 查 看 文 本 框 控 件 的 内 容, 但 是 不 能 编 辑 它。

--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店