VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: 410023425

[分享] VB入门技巧N例

[复制链接]
发表于 2007-1-21 12:53:03 | 显示全部楼层
哈哈,教授的资料就是多,谢阿.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-21 12:53:43 | 显示全部楼层
一下传不上来,分着传

VISUAL BASIC 编程标准13和14.rar

1.77 MB, 下载次数: 445

回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-21 13:09:14 | 显示全部楼层
把 VB 标准的工具栏变成平面式


平面式的工具栏好象显得很酷!但 VB5 只提供了普通的凸起的工具栏。你是否想
把它变成平面的?这似乎很不容易。但事实并非如此,试试:
BAS:
Public Const WM_USER = &H400
Public Const TB_SETSTYLE = WM_USER + 56
Public Const TB_GETSTYLE = WM_USER + 57
Public Const TBSTYLE_FLAT = &H800
Public Declare Function SendMessageLong Lib "user32" Alias "SendMessageA
" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA"
_
(ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
SUB:
Private Sub MakeFlat()
Dim style As Long
Dim hToolbar As Long
Dim r As Long
hToolbar = FindWindowEx(Toolbar1.hwnd, 0&, "ToolbarWindow32",
vbNullString)
style = SendMessageLong(hToolbar, TB_GETSTYLE, 0&, 0&)
If style And TBSTYLE_FLAT Then
style = style Xor TBSTYLE_FLAT
Else: style = style Or TBSTYLE_FLAT
End If
r = SendMessageLong(hToolbar, TB_SETSTYLE, 0, style)
Toolbar1.Refresh
End Sub
注意:需要 4.70 或其以上版本的 comctl32.dll 支持。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-21 13:10:06 | 显示全部楼层
窗口处理技巧大全
     Vb提供了API函数SetWindowLong和GetWindowLong,可以让我们很容易取得对窗口的操作;通过对窗口属性的操作,可以更改窗口的显示风格。有些看来是正常情况下无法实现的窗口,现在你可以很容易的实现。只要你想到,更多希奇古怪的你也能做到。快试试下面的例子吧。



    一下例子中可能用到的API声明和常量、变量声明
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
    Private Const SWP_NOSIZE = &H1
    Private Const SWP_NOZORDER = &H4
    Private Const SWP_NOMOVE = &H2
    Private Const SWP_DRAWFRAME = &H20
    Private Const GWL_STYLE = (-16)
    Private Const WS_THICKFRAME = &H40000
    Private Const WS_DLGFRAME = &H400000
    Private Const WS_POPUP = &H80000000
    Private Const WS_CAPTION = &HC00000
    Private Const WS_SYSMENU = &H80000
    Private Const WS_MINIMIZEBOX = &H20000
    Private Const WS_MAXIMIZEBOX = &H10000
    Private Const WS_MINIMIZE = &H20000000
    Private Const WS_MAXIMIZE = &H1000000



--------------------------------------------------------------------------------

    例子一:任何一个控件(只要有窗口,这是我们的前提,下同),你可以在运行时随便更改它的大小。     Private Sub ControlSize(ControlName As Control, SetTrue As Boolean)
    Dim dwStyle As Long
    dwStyle = GetWindowLong(ControlName.hwnd, GWL_STYLE)
    If SetTrue Then
        dwStyle = dwStyle Or WS_THICKFRAME
    Else
        dwStyle = dwStyle - WS_THICKFRAME
    End If
    dwStyle = SetWindowLong(ControlName.hwnd, GWL_STYLE, dwStyle)
    SetWindowPos ControlName.hwnd, ControlName.Parent.hwnd, 0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
    End Sub
    用法:ControlSize picture1,true;设置第二个参数为False取消这种设置,下同



--------------------------------------------------------------------------------

    例子二:任何一个控件,我们都可以控制其显示风格为对话框的风格。
    Private Sub ControlDialog(ControlName As Control, SetTrue As Boolean)
    Dim dwStyle As Long
    dwStyle = GetWindowLong(ControlName.hwnd, GWL_STYLE)
    If SetTrue Then
        dwStyle = dwStyle Or WS_DLGFRAME
    Else
        dwStyle = dwStyle - WS_DLGFRAME
    End If
    dwStyle = SetWindowLong(ControlName.hwnd, GWL_STYLE, dwStyle)
    SetWindowPos ControlName.hwnd, ControlName.Parent.hwnd, 0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
    End Sub
    用法:ControlSize picture1,true



--------------------------------------------------------------------------------

    例子三:任何一个控件,我们都可以控制其显示风格为模式对话框的风格
    Private Sub ControlModal(ControlName As Control, SetTrue As Boolean)
    Dim dwStyle As Long
    dwStyle = GetWindowLong(ControlName.hwnd, GWL_STYLE)
    If SetTrue Then
        dwStyle = dwStyle Or WS_POPUP
    Else
        dwStyle = dwStyle - WS_POPUP
    End If
    dwStyle = SetWindowLong(ControlName.hwnd, GWL_STYLE, dwStyle)
    SetWindowPos ControlName.hwnd, ControlName.Parent.hwnd, 0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
    End Sub
    用法:ControlModal Picture1,true



--------------------------------------------------------------------------------

    例子四:任何一个控件,我们都可以给它加上标题栏,通过拖动标题栏,可以实现控件的运行时移动。
    Private Sub ControlCaption(ControlName As Control, SetTrue As Boolean)         Dim dwStyle As Long
    dwStyle = GetWindowLong(ControlName.hwnd, GWL_STYLE)
    If SetTrue Then
        dwStyle = dwStyle Or WS_CAPTION
    Else
        dwStyle = dwStyle - WS_CAPTION
    End If
    dwStyle = SetWindowLong(ControlName.hwnd, GWL_STYLE, dwStyle)
    SetWindowPos ControlName.hwnd, ControlName.Parent.hwnd, 0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
    End Sub
    用法:ControlCaption picture1,true



--------------------------------------------------------------------------------

    例子五:任何一个控件,我们都可以给它加上ControlBox(所谓ControlBox,就是窗体的图标+最小化+最大化+关闭按钮)。
    Private Sub ControlSysMenu(ControlName As Control, SetTrue As Boolean)
    Dim dwStyle As Long
    dwStyle = GetWindowLong(ControlName.hwnd, GWL_STYLE)
    If SetTrue Then
        dwStyle = dwStyle Or WS_SYSMENU
    Else
        dwStyle = dwStyle - WS_SYSMENU
    End If
    dwStyle = SetWindowLong(ControlName.hwnd, GWL_STYLE, dwStyle)
    SetWindowPos ControlName.hwnd, ControlName.Parent.hwnd, 0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
    End Sub
    用法:ControlCaption picture1,true:ControlSysmenu picture1,true
回复 支持 反对

使用道具 举报

发表于 2007-1-21 13:13:51 | 显示全部楼层
还有啊,哈哈,又丰收了.谢谢教授.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-21 13:14:02 | 显示全部楼层
VB常用代码.chm

VB常用代码.chm

682.63 KB, 下载次数: 377

回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-21 13:16:34 | 显示全部楼层
原帖由 ABCDEFA 于 2007-1-21 13:13 发表
还有啊,哈哈,又丰收了.谢谢教授.

继续。。。。。
好东西大家来分享。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-21 13:18:40 | 显示全部楼层
VB5.0中基于桌面的屏幕技巧
作者:金永涛
---- WINDOWS 95 的 桌 面 是 用 户 的 一 个 主 要 工 作 场 所, 如 果 你 能 使 这 个 桌 面 移 动 起 来 或 者 发 生 其 它 变 化, 将 是 一 种 别 具 一 格 屏 幕 特 技 效 果, 而 实 际 上 目 前 具 有 类 似 效 果 的 程 序 并 不 少 见, 比 如Microsoft PLUS! 中 提 供 的 一 种 屏 幕 保 护 程 序, 下 面 介 绍 在VB5.0 中 实 现 桌 面 变 化 特 技 的 基 本 原 理 和 具 体 操 作 过 程。

---- 一、 桌 面 变 化 的 实 质: 这 种 编 程 效 果 的 奥 妙 在 于, 它 不 是 使 真 正 的WINDOWS 95 桌 面 发 生 了 变 化, 而 是 启 动 了 一 个 具 有 黑 色 背 景 的 且 运 行 在 最 大 化 模 式 下 的 应 用 程 序, 在 这 个 程 序 中 复 制 了 一 张 和 桌 面 完 全 一 样 的 图 像, 覆 盖 在 整 个 桌 面 之 上, 通 过 一 些 特 殊 的 操 作 使 这 幅 图 像 在 黑 色 的 背 景 下 发 生 扭 曲、 移 动 等 动 作, 当 结 束 此 程 序 时, 自 然 恢 复 到 原 来 的 桌 面 状 态, 整 个 过 程 连 贯 进 行, 即 可 以 给 人 一 种 桌 面 发 生 变 化 的 假 象。

---- 二、 基 本 实 现 原 理: 首 先 必 须 通 过 有 关 的WINDOWS API 函 数, 取 得 桌 面 窗 口 的 句 柄, 然 后 把 此 桌 面 图 像 放 入 与 屏 幕 尺 寸 相 同 的 图 形 框 或 其 它 图 形 容 器 控 件 之 中, 然 后 以 此 为 图 像 源, 利 用 其 它 图 形 控 件 或 有 关 的 图 像 处 理 函 数, 灵 活 地 控 制 这 幅 图 像, 使 之 产 生 特 殊 的 屏 幕 效 果。 编 程 时 需 要 使 用 下 面 几 个API 函 数:

---- BitBlt: 一 个 较 常 见 的 图 像 处 理 函 数, 完 成 图 像 的 复 制 工 作;

---- GetDC: 获 得 窗 口 的 描 述 表 句 柄;

---- GetDesktopWindow: 返 回 桌 面 窗 口 句 柄;

---- ReleaseDC : 释 放 窗 口 描 述 表;

---- 具 体 的 参 数 格 式 及 使 用 方 法 见 后 面 的 程 序 代 码。

---- 这 里 还 需 要 使 用 一 个VB 内 部 函 数PaintPicture, 语 法 格 式:

PaintPicture Pic,destX,
destY,destWidth,destHeight,
scrX,scrY,scrWidth,scrHeight
其 中Pic: 为 图 片 对 象,
如 图 形 框Picture 等;
destX,destY: 目 标 图 像 位 置;
destWidth,destHeight: 目 标 图 像 尺 寸;
scrX,scrY: 原 图 像 的 裁 剪 坐 标;
scrWidth,scrHeight: 原 图 像 的 裁 剪 尺 寸;

---- 此 命 令 的 功 能 就 是 把 一 个 源 图 像 资 源 任 意 复 制 到 指 定 的 区 域, 其 功 能 相 当 于API 函 数 的BitBlt, 但 使 用 更 为 简 单。

---- 其 中 有 一 点 需 要 说 明, 在VB 通 常 有 两 种 图 形 控 件 可 以 使 用, 即 图 形 框PICTURE 及 图 像 框IMAGE, 其 中PICTURE 具 有 与 窗 体 通 用 的Hdc 句 柄 属 性, 所 以 可 方 便 的 进 行 图 像 复 制, 而IMAGE 最 大 的 优 点 是 具 有Stretch 伸 缩 性, 可 方 便 的 进 行 图 像 的 缩 放 处 理, 所 以 在 编 程 时 会 涉 及 到 把 图 像 从 图 形 框PICTURE 复 制 到 图 像 框IMAGE 的 动 作, 这 里 需 要 澄 清 图 形 框PICTURE 的 两 个 相 似 的 属 性 即PICTURE 及IMAGE, 比 如 一 般 可 用 下 面 的 命 令 在 图 形 框 中 装 入 图 像:

---- Picture1.picture=Loadpicture("c:\windows\setup.bmp")

---- 此 时 可 用 下 面 的 命 令 把 图 像 复 制 到 图 像 框 中:

---- Set Image1.picture=Picture1.Picture

---- 而 利 用 BitBlt 命 令 复 制 到Picture 中 的 图 像 则 不 是 它 的 Picture 属 性, 使 用 上 述 的 复 制 命 令 将 无 法 得 到 真 实 的 图 像, 而 必 须 使 用 其Image 属 性, AutoRedraw 属 性 可 以 引 起Image 改 变,Image 是 指 向 位 图 的 句 柄, 当AutoRedraw 为True 时, 对 象 的hDC 属 性 成 为 指 向 设 备 描 述 体 的 句 柄, 复 制 命 令 为:

---- Set Image1.Picture = Picture1.Image

---- 同 样, 在 针 对 上 述 的Picture 两 种 不 同 的 装 入 图 像 方 法, 使 用 图 像 重 写 命 令PaintPicture 也 需 要 两 种 不 同 的 方 法:

---- PaintPicture Picture1.Image,x,y,Width,Height

---- PaintPicture Picture1.Picture,x,y,Width,Height

---- 三、 一 个 演 示 程 序 的 编 制 过 程

---- 创 建 一 个 新 的 工 程, 在 窗 体 Form1 上 放 置 一 个 图 形 框 Picture1 和 一 个 图 像 框Image1, 置Form1 及 Picture1 的 AutoReadraw 属 性 为True, 置 form1 的BorderStyle 属 性 为 None, 背 景BackColor 为 黑 色, 如 果 想 要 任 务 条 安 全 地 参 加 特 技 运 动, 最 好 使 程 序 运 行 在 最 大 化 模 式, 即 置Form1 的 WIndowState 属 性 为Maximized。 然 后 进 行API 函 数 说 明, 可 通 过API Viewer 直 接 获 得, 把 其 放 入 一 个BAS 模 块 文 件 中, 也 可 以 直 接 放 在 窗 体Form1 代 码 文 件 的General 段 中, 但 此 时 在 函 数 前 面 必 须 加 上Private 关 键 字, 详 见 下 面 的API 说 明, 最 后 文 后 程 序 代 码 填 入 有 关 的 事 件 之 中。 此 演 示 程 序 运 行 之 后 可 实 现 下 面 的 桌 面 特 技 效 果, 任 何 时 候 单 击 图 形 框 可 强 制 退 出 程 序:

---- 1. 桌 面 逐 渐 缩 小: 图 形 的 放 大 缩 小 使 用Image 控 件 最 为 方 便, 实 现 此 特 技 的 关 键 处 就 是 需 要 把 桌 面 图 形 传 递 到 图 像 框IMAGE 之 中, 然 后 置Stretch 属 性 为 真, 逐 渐 修 改IMAGE 的 尺 寸 即 可 使 桌 面 放 大 或 缩 小;

---- 2. 随 机 位 置 显 示 桌 面: 此 效 果 主 要 使 用PaintPicture 命 令, 通 过 随 机 修 改 目 标 图 形 的 起 始 坐 标, 把 桌 面 图 像 写 到 屏 幕 的 随 机 位 置;

---- 3. 桌 面 的 横 向 或 纵 向 滚 动: 此 效 果 只 需 要 把 桌 面 图 形 写 到 一 个 图 形 框Picture 之 中, 然 后 通 过 修 改 此 图 形 框 的 起 始 坐 标, 即 可 以 使 桌 面 在 屏 幕 上 发 生 平 滑 滚 动;

---- 4. 桌 面 上 显 示 文 字 或 图 形: 此 效 果 主 要 使 用VB 的 绘 图 方 法 及Print 命 令, 在VB 中 窗 体 或 图 形 框 均 支 持VB 绘 图 方 法, 下 面 的 程 序 中 先 画 两 个 重 叠 的 实 心 矩 形, 然 后 在 其 上 面 显 示 文 字, 最 终 形 成 带 有 背 景 和 边 框 的 字 符 串;

---- 5. 桌 面 变 暗: 桌 面 变 暗 的 效 果 在 你 关 闭WINDOWS 95 时 即 可 见 到, 在VB 中 要 使 图 形 亮 度 降 低 并 不 件 容 易 的 事, 需 要 多 个API 函 数 及 复 杂 的 编 程, 但 可 通 过 一 种 颜 色 抖 动 的 方 法 解 决, 即 在 桌 面 图 形 上 均 匀 的 写 上 黑 色 象 素, 可 使 图 形 产 生 明 显 的 降 低 亮 度 的 感 觉。

---- 由 于 这 个 演 示 程 序 是 连 续 演 示 上 述 五 种 特 技, 其 效 果 显 得 不 太 理 想, 如 果 你 单 独 使 用 其 中 的 一 种 处 理 方 法, 即 在 正 常 的 桌 面 状 态 下 直 接 使 桌 面 变 化, 将 更 为 理 想。 以 上 给 出 了 用VB 对WINDOWS 95 桌 面 进 行 特 殊 操 作 的 原 理 和 方 法, 实 际 上 利 用 这 个 原 理 加 入VB 中 灵 活 的 图 像 处 理 手 段, 可 以 实 现 对 桌 面 更 为 复 杂 的 其 它 控 制 效 果, 比 如 可 制 作 完 整 的 屏 幕 保 护 程 序, 有 兴 趣 的 读 者 可 以 一 试, 以 上 程 序 在WINDOWS 95 系 统、VB5.0 环 境 下 调 试 通 过。

---- 附 源 程 序 清 单:

---- 注释:API 函 数 引 用

Private Declare Function BitBlt
Lib "gdi32" (ByVal hDestDC As Long,
ByVal X As Long, ByVal Y As
Long, ByVal nWidth As Long,
ByVal nHeight As Long, ByVal
hSrcDC As Long, ByVal xSrc As Long,
ByVal ySrc As Long, ByVal
dwRop As Long) As Long
Private Declare Function GetDC
Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function Get
DesktopWindow Lib "user32" () As Long
Private Declare Function ReleaseDC
Lib "user32" (ByVal hwnd As Long,
ByVal hdc As Long) As Long

注释: 变 量 说 明
Dim sWnd, sDC, hd
注释: 直 接 演 示 特 技 效 果
Private Sub Form_Load()
注释: 置 窗 口 背 景 为 黑 色 无 边 框
注释:Form1.BackColor = 0
注释:Form1.BorderStyle = 0
注释: 修 改 窗 口 尺 寸 与 屏 幕 相 同
Form1.AutoRedraw = True
Form1.Width = Screen.Width
Form1.Height = Screen.Height
Form1.Top = 0
Form1.Left = 0
注释: 修 改PICTURE 尺 寸 与 屏 幕 相 同
Picture1.Width = Screen.Width
Picture1.Height = Screen.Height
Picture1.Top = 0
Picture1.Left = 0
注释: 获 得 桌 面 图 像 句 柄
sWnd = GetDesktopWindow()
sDC = GetDC(sWnd)
hd=BitBlt(Picture1.hdc,0,0,Form1.
Width,Form1.Height,sDC,0,0,&HCC0020)
hd = ReleaseDC(sWnd, sDC)
Picture1.Visible = False
Form1.Show
注释: 修 改IMAGE 尺 寸 与 屏 幕 相 同
Image1.Stretch = True
Image1.Picture = Picture1.Image
Image1.Width = Screen.Width
Image1.Height = Screen.Height
Image1.Top = 0
Image1.Left = 0
注释: 桌 面 逐 渐 缩 小
For i = 0 To Screen.Height / 35
Image1.Visible = False
Image1.Top = 15 * i
Image1.Left = 15 * i
Image1.Width = Screen.Width - 2 * Image1.Left
Image1.Height = Screen.Height - 2 * Image1.Top
Image1.Visible = True
DoEvents
Next i
Image1.Visible = False
注释: 随 机 位 置 显 示 桌 面
For i = 0 To 20
Dim ll As Integer
Dim tt As Integer
ll = Rnd(1) * Screen.Width - Screen.Width / 2
tt = Rnd(1) * Screen.Height - Screen.Height / 2
Form1.PaintPicture Picture1.
Image,ll,tt,Screen.Width,Screen.Height
DoEvents
Next i
注释: 显 示PICTURE 并 清 屏 幕
Picture1.Visible = True
Form1.Cls

注释: 横 向 移 动
For i = 0 To Screen.Width * 2 / 5
Picture1.Left = Picture1.Left + 5
If Picture1.Left > Screen.Width Then
Picture1.Left = -Screen.Width
End If
DoEvents
Next i
注释: 纵 向 移 动
For i = 0 To Screen.Height * 2 / 5
Picture1.Top = Picture1.Top + 5
If Picture1.Top > Screen.Height Then
Picture1.Top = -Screen.Height
End If
DoEvents
Next i
注释: 桌 面 上 显 示 文 字
For i = 0 To 50
With Picture1
.ScaleMode = 3 注释: 以 象 素 为 单 位
.FontTransparent = True
.Font.Size = Rnd * 30 + 10
.Font.Italic = True
.ForeColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)
.FontName = Screen.Fonts(Rnd * 7 + 14)
End With
hh = Picture1.TextHeight("OK DESKTOP 演 示")
ww = Picture1.TextWidth("OK DESKTOP 演 示")
X = Rnd * (Picture1.ScaleWidth - ww)
Y = Rnd * (Picture1.ScaleHeight - hh)
Picture1.Line(X-2,Y-2)-(X+ww+2,
Y+hh+2),RGB(Rnd*256,Rnd*256,Rnd*256),BF
Picture1.Line(X,Y)-(X+ww,Y+hh),
RGB(Rnd*256,Rnd*256,Rnd*256),BF
Picture1.CurrentX = X
Picture1.CurrentY = Y
Picture1.Print "OK DESKTOP 演 示"
DoEvents
Next i
注释: 桌 面 变 暗
Form1.Picture1.ScaleMode = 3 注释: 以 象 素 为 单 位
For j = 0 To Picture1.ScaleHeight / 2
Picture1.Line(0,2*j)-(Picture1.ScaleWidth,2*j),RGB(0,0,0)
Next j
End Sub
注释: 强 制 退 出 程 序
Private Sub Picture1_Click()
End
End Sub
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-21 13:21:53 | 显示全部楼层
VB编程常见问题  

  问题:如何编程使文本框中文本的某一特定字符或字符串同时高亮显示?

  答:由于普通TextBox控件不支持不连续字符串的同时高亮显示,所以我们选择RichTextBox控件。单击工程(Project)选单项,在弹出的下拉选单中单击组件(Components)选单项,从弹出的对话框中选择Microsoft Rich Textbox Control 5.0复选框,确定加载RichTextBox控件。

  新建(New)一个工程,在窗体(Form)上添加一个RichTextBox控件和两个Command(按钮)控件,都采用系统默认的Name属性值;设置RichTextBox的Text属性值为空,Command1和Command2的Caption属性值分别设为“输入文本”和“选择字符串”。最后,添加如下VB代码:

  Private Sub Command1--Click()

   Dim str As String

   Dim Text As String

   str=″输入文本″

   Text=InputBox(str)

   RichTextBox1.Text=Text

  End Sub

  Private Sub Command2--Click()

  Dim str As String

  Dim Text As String

  Dim Position As Integer

  Dim Lenth As Integer

  str=″输入要高亮显示的字符串″

  Text=InputBox(str)

  If Text 〈〉 ″″ Then

   Position=InStr(RichTextBox1.Text, Text)-1

   Lenth=Len(Text)

   RichTextBox1.SelStart=Position

   RichTextBox1.SelLength=Lenth

   RichTextBox1.SelColor=RGB(255,0,0)

   Do While InStr(Position+Lenth+1, RichTextBox1.Text, Text) 〈〉 0

     Position=InStr(Position+Lenth+1, RichTextBox1.Text, Text)-1

     RichTextBox1.SelStart=Position

     RichTextBox1.SelLength=Lenth

     RichTextBox1.SelColor=RGB(255,0,0)

   Loop

  End If

  End Sub

  按F5执行程序,单击“输入文本”按钮,在弹出的对话框中输入一些文本,确定后,刚刚输入的文本将显示在RichTextBox中;再单击“选择字符串”按钮,在弹出的对话框中输入你希望高亮显示的字符串,确定后,RichTextBox中相应的字符串将以红色高亮显示。

  问题:如何利用VB编写程序实现Windows 95操作系统的热启动?

  答:要利用程序实现系统的重新启动,可以在你的程序中调用API函数来实现。建一个子函数:(以VB为例)

  Declare Function SystemParametersInfo Lib ″user32″ Alias --

  ″SystemParametersInfo″ (ByVal uAction As Long, ByVal uParam As Long,

  ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long

  Sub DisableCtrlAltDelete(bDisabled As Boolean)

  Dim X As Long

  X=SystemParametersInfo(97, bDisabled, CStr(1), 0)

  End Sub

  Call DisableCtrlAltDelete(true)  ′禁止热启

  Call DisableCtrlAltDelete(false) ′允许热启

  问题:如何把数据文件输出到Text控件中?如果数据量比较大,窗体满屏也不够大,怎么解决?

  答:有一个比较简单的方法,就是把数据放到一个文本框(Text)里,并在其中加上水平和垂直滚动条。具体实现步骤为:先在窗体(Form)里加入一个文本框,采用默认名Text1;然后,设置文本框Text1的属性:Text属性设置为空,MultiLine属性设置为True,ScrollBars属性设置为3-Both;接着添加如下VB代码:

  Private Sub Form--Load()

  Dim Handle As Integer

  Dim FileName As String

  On Error GoTo ErrExit

  begin:

  ′输入要显示的数据文件的名称

  FileName=InputBox$(″Input Filename″,

  ″Open File″)

  On Error GoTo FileErr

  Handle=FreeFile

  Open FileName For Input As #Handle

  ′把数据文件中的数据输出到文本框中

  Text1.Text=Input$(LOF(Handle), Handle)

  Close #Handle

  Exit Sub

  FileErr:

  Dim ErrNum As Integer

  If Err.Number=53 Then

    ErrNum=MsgBox(″File not exist″, vbOKCancel, ″Error Information″)

    If ErrNum=1 Then

      GoTo begin

    Else

      Exit Sub

    End If

  End If

  MsgBox Err.Description, , ″file open failed″

  ErrExit:

  Exit Sub

  End Sub

  ′使文本框充满整个窗体

  Private Sub Form--Resize()

  Text1.Left=0

  Text1.Top=0

  Text1.Width=Form1.Width-100

  Text1.Height=Form1.Height-400

  End Sub

  通过这样的处理,不仅能解决问题,而且用户还可以在文本框中对数据进行编辑。

  问题:怎样把文件列表框、目录列表框和驱动器列表框相互关联起来?

  想做一个对话窗体,包含驱动器列表框、目录列表框和文件列表框,并能实现三者的同步操作,怎么做?

  答:在实际应用中,经常会遇到上述问题,在VB中解决这个问题非常简单,可以通过Path属性的改变引发Change事件来实现。例如:

  Sub Dir1--Change()

File1.Path=Dir1.Path

  End Sub

  该事件过程使窗体上的目录列表框Dir1和文件列表框File1产生同步。因为目录列表框Path属性的改变将产生Change事件,所以在Dir1--Change事件过程中,把Dir1.Path赋给File1.Path,就可以产生同步效果。

  类似地,增加下面的事件过程,就可以使三种列表框同步操作:

  Sub Drive1--Change()

Dir1.Path=Drive1.Drive

  End Sub

  该过程使驱动器列表框和目录列表框同步,前面的过程使目录列表框和文件列表框同步,从而使三种列表框同步,问题即可解决。

  问题:如何在Windows 95或Windows 98启动后自动启动程序?

  答:我们都知道在Windows 95和Windows 98的“开始”→“程序”选单下有一“启动”选单项,当每次启动Windows 95或Windows 98时,系统都会自动启动放在“启动”选单栏里的可执行程序。

  但目前有好多软件,像解霸五、ICQ,以及大部分实时侦测病毒的软件等等,安装后,并没有放在“启动”选单里,也能在启动操作系统时自动启动。怎么实现的呢?

  其实只要知道Windows注册表的一些知识,这个问题就不能称之为问题了。用鼠标单击“开始”,打开开始选单,再单击“运行”,出现一对话框,然后输入“regedit”,确定后,会打开系统注册表编辑器,找到HKEY--LOCAL--MACHINE? SOFTWARE?Microsoft?Windows?CurrentVersion?Run,加入你的程序的入口,就可以了。如果不知道怎么加,就参考一下已经存在的键值。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-21 13:24:29 | 显示全部楼层
API及应用

VBAPI.chm

974.79 KB, 下载次数: 302

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2021-4-12 01:56

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表