教程中国
PHOTOSHOP CS9.0中文版 MAYA 8.5 FOR WINDOWS Corel Painter v9.0 Flash MX2004 中文版 Illustrator cs2 中文版
VC++6.0含sp6 中英文版 VB6.0 +sp6 简体中文版 Borland Delphi 7汉化版 MSDN for vb6.0中文版 Visual Studio 2005简体
教程中国下属 文件存储共享专家BIBIDU.COM 提供大型软件,教材,源码,电影,音乐,图书等下载 更多精品请点此进入
  您目前所在位置: 教程中国 >> 编程基地 >> VB >> 运行时改变控件大小的两种方法 RSS订阅
运行时改变控件大小的两种方法
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   
运行时改变控件大小的两种方法
作者:李法龙
---- 通 常 我 们 在 设 计 应 用 程 序 时 可 以 任 意 改 变 控 件 的 大 小( 除 去 象Timer 这 样 的 运 行 时 不 可 显 示 的 控 件), 以 使 其 满 足 我 们 的 实 际 需 要, 使 界 面 友 好 而 且 美 观 大 方。 但 有 些 时 候, 我 们 为 了 方 便 用 户, 需 要 提 供 在 运 行 时 刻 能 够 改 变 控 件 大 小 的 功 能, 使 用 户 能 够 根 据 程 序 显 示, 输 出 的 需 要 通 过 鼠 标 的 拖 放 改 变 控 件 的 大 小, 从 而 方 便 用 户 的 阅 读 浏 览 等。 本 文 就 此 向 诸 位 介 绍 两 种 方 法 来 达 到 此 目 的。

---- 我 们 知 道, 运 行 时 刻 可 见 的 控 件 都 具 有Top,Left,Height,Width 等 属 性, 用 以 定 位 其 在 窗 体 上 的 位 置 及 大 小, 在 运 行 时 刻 改 变 控 件 大 小 的 原 理 也 基 于 此。 通 过 鼠 标 的 拖 放 等 操 作, 动 态 改 变 控 件 的Top,Left,Bottom,Height 属 性 值, 从 而 定 制 控 件 的 大 小, 甚 至 拖 动 整 个 控 件。

---- 第 一 种 方 法 需 要Win32 API 函 数。 所 用 到 的API 函 数 有:

Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As- POINTAPI) As Long

---- 获 得 鼠 标 的 屏 幕 坐 标 放 在lpPoint 中。
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

---- 将 屏 幕 坐 标 转 化 成 客 户 区 坐 标 系 统 的 坐 标, 转 换 后 的 坐 标 仍 在lpPoint 中。
---- 新 开 一 个 工 程, 在Form1 上 放 一 个TextBox 控 件, 命 名 为Text1。 在Form 的MouseMove 事 件 中 捕 获 鼠 标 坐 标, 如 果 鼠 标 的 位 置 与Text1 的 边 界 相 距 很 近( 比 如 说50 Twips,150 效 果 比 较 好), 根 据 需 要 将 Form1 的MousePointer 属 性 值 为vbSizeNS( 垂- 直 尺 寸 线), 或vbSizeWE( 水- 平 尺 寸 线), 或vbSizeNESW( 右 上- 左 下 尺 寸 线), 或vbSizeNWSE( 左 上- 右 下 尺 寸 线)。 用 户 一 看 就 知 道 可 以 改 变 该 控 件 的 尺 寸。 而 在 其 余 区 域 则 将Form1 的MousePointer 属 性 设 成 缺 省 值(vbDefault)。 当 用 户 按 下 鼠 标 键 并 拖 动 鼠 标 时 根 据 当 前 的MousePointer 进 行 判 断 该 如 何 改 变 控 件 的 大 小。 具 体 操 作 可 参 看 附 带 的 例 程。

---- 第 二 中 方 法 不 需 要 调 用API 函 数, 但 需 要 额 外 的 控 件。 同 样 新 开 一 个 工 程, 在Form1 上 放 一 个TextBox 控 件, 命 名 为Text1。 然 后 紧 靠Text1 的 右 侧 放 一 个 高 度 与Text1 相 同 但 宽 度 尽 量 小 的PictureBox 控 件, 命 名 为Picture1。 宽 度 要 小 到 看 不 见 立 体 效 果。 将Picture1 的MousePointer 属 性 设 置 成9 (vbSizeWE) 。

---- Picture1 的MouseMove 事 件 如 下:

Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, x As Single, y-As Single)
If Button< >1 Then Exit Sub
Picture1.Left=Picture1.Left+X
‘Move Picture
Text1.Width=Picture1.Left-Text1.Left
注释:Change TextBox注释:s size
End Sub

---- 运 行 程 序, 将 鼠 标 移 到Text1 的 右 边 缘, 这 时 鼠 标 变 成 水- 平 尺 寸 线 的 样 式, 按 住 鼠 标 左 键 左 右 移 动 鼠 标, 你 会 看 到Text1 的 大 小 可 以 自 由 改 变。
---- 以 上 只 是 举 一 些 简 单 的 例 子 说 明 定 制 控 件 尺 寸 的 基 本 方 法, 起 到 抛 砖 引 玉 的 作 用, 读 者 可 以 根 据 需 要 增 强 相 应 的 功 能, 但 要 注 意 建 立 错 误 陷 阱 捕 获 错 误。

---- 附:

---- 第 一 种 方 法 的 源 程 序:

注释:API Function declare

Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint _As POINTAPI) As Long
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Type POINTAPI
x As Long
y As Long
End Type

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, - y As Single)
Dim Pnt As POINTAPI
Dim CurX As Long
Dim CurY As Long
Dim DistX As Long
Dim DistY As Long

Const mDist = 150 注释:150 twips

GetCursorPos Pnt
注释:Get mouse position
ScreenToClient Me.hwnd, Pnt
注释:Convert to client coordinate
CurX = Pnt.x * Screen.TwipsPerPixelX
注释:Pixels to Twips
CurY = Pnt.y * Screen.TwipsPerPixelY
DistX = Abs(CurX - (Text1.Left + Text1.Width))
注释:distance to text1注释:s
DistY = Abs(CurY - (Text1.Top + Text1.Height))

If DistX < = mDist And DistY < = mDist Then
注释:set mouse pointer
注释:according to distance
Form1.MousePointer = vbSizeNWSE
ElseIf DistX < = mDist And DistY > mDist Then
Form1.MousePointer = vbSizeWE
ElseIf DistX > mDist And DistY < = mDist Then
Form1.MousePointer = vbSizeNS
Else
Form1.MousePointer = vbDefault
End If

If Button < > 1 Then Exit Sub
If Form1.MousePointer = vbSizeNWSE Then
注释:change text1注释: size
Text1.Width = CurX - Text1.Left
Text1.Height = CurY - Text1.Top
End If
If Form1.MousePointer = vbSizeWE Then
Text1.Width = CurX - Text1.Left
End If
If Form1.MousePointer = vbSizeNS Then
Text1.Height = CurY - Text1.Top
End If
End Sub

Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, x As -Single, y As Single)
Form1.MousePointer = vbDefault
注释:set default mouse pointer
End Sub

来源:upschool.cn
作者:
关键字:运行时改变控件,两种方法
发表日期:2006-12-20 19:30:19

网页显示有限 阅读全文请下载本文完整版WORD文档

上一篇:在ListBox适当设定水平滚动条的宽度   下一篇:运用ActiveX组件技术创建通用的查询控件


2009-1-10 9:38:14
本文的相类似文章
  • 用VC 开发基于ORACLE数据库应用程序的两种方法
  • ORACLE*Forms 中List Item 加载数据的两种方法
  • 绕过防火墙限制的两种方法
  • 部署和分发.NET应用程序的两种方法
  • 运行时改变控件大小的两种方法
  • VB查找文件的两种方法
  • VB中利用API函数实现特殊窗体的两种方法
  • VB中处理长列表框项的两种方法
  • 利用VB动态改变Windows显示模式的两种方法
  • 利用API函数实现VB特殊窗体的两种方法
  • 在学习中进步 在进步中成长 教程中国相随您的成长之路
    华腾联合科技股份有限公司版权所有
    广告联系:Rosibo@163.com