VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - VB 开 发 技 巧 三 则
发表评论(0)作者:孙 俊 峰 刘 云 楚, 平台:VB6.0+Win98, 阅读:9068, 日期:2001-04-01
VB 开 发 技 巧 三 则
四 川 绵 阳89959 部 队
孙 俊 峰 刘 云 楚
一、 用 控 件 拖 放 表 单
---- 怎 样 用 控 件 拖 放 表 单 呢 ? 很 简 单, 将 这 段 代 码 插 入 到Declare 部 分。
Declare Function ReleaseCapture Lib "user32" () As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
再 在 控 制 的Mousedown 事 件 中 插 入:
Sub Command1_MouseDown (Button As Integer, _
Shift As Integer, X As Single, Y As Single)
       Dim Ret&
       ReleaseCapture
       Ret& = SendMessage(Me.hWnd, &H112, &HF012, 0)
     End Sub

二、 把 表 单 放 在 屏 幕 的 正 中 央
---- 在 开 发VB 程 序 时, 一 般 希 望 将 表 单 放 在 屏 幕 可 利 用 区 域 的 正 中 央, 实 现 上 可 以 利 用Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2 的 方 法 来 实 现。 但 是 当 用 户 使 用Windows 95 或 NT 操 作 系 统 时, 在 屏 幕 的 底 端 会 有 一 任 务 条, 上 述 的 实 现 方 法 并 未 考 虑 该 任 务 条 所 占 的 空 间, 表 单 实 际 并 未 处 于 屏 幕 可 利 用 区 域 的 正 中 央。 下 面 的 代 码 段 实 现 了 在 每 次 启 动 应 用 程 序 时, 无 论 屏 幕 是 否 有 任 务 条, 表 单 都 会 处 于 屏 幕 可 利 用 区 域 的 正 中 央。 在 工 程 中 增 添 一 模 块, 在 模 块 中 加 上 如 下 的 代 码:
Option Explicit
Private Const SPI_GETWORKAREA = 48
Private Declare Function _
SystemParametersInfo& Lib "User32" _
Alias "SystemParametersInfoA" ( _
ByVal uAction As Long, _
ByVal uParam As Long, lpvParam As Any, _
ByVal fuWinIni As Long)
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Public Function CenterForm32 (frm As Form)
Dim ScreenWidth&, ScreenHeight&, _
ScreenLeft&, ScreenTop&
Dim DesktopArea As RECT
Call SystemParametersInfo ( _
SPI_GETWORKAREA, 0, DesktopArea, 0)
ScreenHeight = (DesktopArea.Bottom - _
DesktopArea.Top) * Screen.TwipsPerPixelY
ScreenWidth = (DesktopArea.Right - _
DesktopArea.Left) * Screen.TwipsPerPixelX
ScreenLeft = DesktopArea.Left * Screen.TwipsPerPixelX
ScreenTop = DesktopArea.Top * Screen.TwipsPerPixelY
frm.Move (ScreenWidth - frm.Width)  _
\ 2 + ScreenLeft, (ScreenHeight - _
frm.Height) \ 2 + ScreenTop
End Function

---- 要 调 用CenterForm32 函 数, 可 在 表 单 的Load 事 件 中 增 添 代 码CenterForm32 Me 即 可。 以 上 代 码 在VB4/32,VB5 中 实 现。

三、 在RichTextBox 控 件 中 实 现 上、 下 标 形 式
---- VB 提 供 了 一 个 优 秀 的 控 件RichTextBox, 我 们 可 以 在 其 中 实 现 文 本 的 各 种 编 辑 方 式。 下 面 的 程 序 是 在RichTextBox 控 件 中 实 现 上 标 和 下 标 的 形 式, 主 要 是 使 作 为 上、 下 标 的 字 符 的 尺 寸 小 一 些, 位 置 在 基 线 上 下 浮 动。 程 序 利 用 属 性SelCharOffset, 由 它 确 定RichTextBox 控 件 中 的 文 本 是 出 现 在 基 线 上( 正 常 状 态), 当SelCharOffset >0 时, 文 本 出 现 在 基 线 之 上, 成 为 上 标 形 式;
---- 当SelCharOffset< 0 时, 文 本 出 现 在 基 线 之 下, 成 为 下 标 形 式。

---- 该 属 性 在 设 计 时 无 效。

---- 在 表 单 的Load 事 件 中 添 加 以 下 代 码:

Private Sub Form_Load()
      RichTextBox1.Font.Name = "Times New Roman"
      RichTextBox1.Font.Size = 10
      RichTextBox1.Text = "H2SO4"
      注释: Move the numbers down 2 points.
      OffsetRichText RichTextBox1, 1, 1, 2
      OffsetRichText RichTextBox1, 4, 1, -2
    End Sub

    Private Sub OffsetRichText(box As _
      RichTextBox, start As Integer, _
      length As Integer, offset As Integer)
      注释:box指RichTextBox控件;start指作为上下标的
      注释:字符的起始位置;length指上下标字符的长度;
      注释:offset指上标还是下标,大于0上标;小于0下标。
      box.SelStart = start
      box.SelLength = length
      box.SelFontSize = box.Font.Size -abs(offset)
      box.SelCharOffset = ScaleY(offset, _
vbPoints, vbTwips)
      box.SelStart = 0
      box.SelLength = 0
    End Sub
   该程序在VB4/32和VB5上调试通过。最后在RichTextBox
控件中字符串的形式为:H2SO4.

---- // 作 者 注: 文 章 最 后 的H2SO4. 中 的2 应 为 上 标,4 为 下 标, 文 本 文 件 中 无 法 表 示 出 来