科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道用Visual Basic6类模块打造控件

用Visual Basic6类模块打造控件

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

VB6因为简单易用,受到很多朋友的喜欢。可是也有人说它功能简单,没有给开发者提供足够的发挥余地。

作者:许瑞军 来源:开发高手 2007年10月14日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共4页)

总体思路

  可以用现成的控件来做分割条,如Label。一个分割条分割窗体实际上是把窗体上的控件根据分割条的位置来重新安排。要实现这个功能,首先鼠标要能移动分割条,其次分割条要知道它两侧分别有哪些控件,可以随时根据它自身的位置来计算两侧控件的新位置。

  详细思路

  分割条分为水平和垂直,水平分割条是水平移动,它自己是垂直的,控件在它的左右。垂直分割条则相反。

  因此要有一个变量保存分割条的类型。

  1、 鼠标移动分割条

  当鼠标在Label控件上按下时,表明移动开始,当鼠标移动时,用API函数得到鼠标在屏幕上的位置,转换为窗体上的坐标,水平分割条则设置Label控件的水平位置为鼠标水平位置,垂直位置不变,垂直分割条则设置Label控件的垂直位置为鼠标垂直位置,水平位置不变,
执行步骤3,鼠标键松开,表明移动结束。

  2、 让分割条知道它两侧有哪些控件

  每个分割条都有一个数组,该数组保存了对分割条两侧控件的引用,同时还有该控件相对分割条的位置(左、右、上、下),水平分割条只有左右,垂直分割条只有上下。

  3、 控件位置的计算

  (1)水平分割条:

  控件在左侧:

  控件宽度 = 分割条左侧位置-控件左侧位置-控件与分割条间隔控件在右侧:

  控件左侧位置 = 分割条左侧位置+分割条宽度+控件与分割条间隔

  控件宽度 = 窗体宽度-分割条左侧位置-分割条

  宽度-控件与分割条间隔

  另外:如果控件是位于窗体最下方的控件,应将控件填满窗体下方,

  控件高度 = 分割条顶部位置 + 分割条高度 - 控件顶部位置

  (2)垂直分割条控件位置:

  控件在上方:

  控件高度 = 分割条顶部位置-控件顶部位置-控件与分割条间隔

  控件在下方:

  控件顶部位置 = 分割条顶部位置+分割条高度+控件与分割条间隔

  控件高度 = 窗体高度-分割条顶部位置-分割条

  高度-控件与分割条间隔

  另外:如果控件是位于窗体最右方的控件,应将控件填满窗体右方:

  控件宽度 = 分割条左侧位置 + 分割条宽度 - 控件左侧位置

  编码

  1、通用部分

Option Explicit ’强制变量声明
’API与数据类型定义:
’点数据类型POINTAPI的定义
Private Type POINTAPI
X As Long
Y As Long
End Type
’将屏幕坐标转化为窗体坐标
Private Declare Function ScreenToClient Lib "user32" (ByVal
hwnd As Long, lpPoint As POINTAPI) As Long
’将窗体坐标转化为屏幕坐标
Private Declare Function ClientToScreen Lib "user32" (ByVal
hwnd As Long, lpPoint As POINTAPI) As Long
’设置鼠标捕捉
Private Declare Function SetCapture Lib "user32" (ByVal
hwnd As Long) As Long
’释放鼠标捕捉
Private Declare Function ReleaseCapture Lib "user32" ()
As Long
’获得鼠标在屏幕上的位置
Private Declare Function GetCursorPos Lib "user32" (lpPoint
As POINTAPI) As Long
’设置鼠标在屏幕上的位置
Private Declare Function SetCursorPos Lib "user32" (ByVal
X As Long, ByVal Y As Long) As Long

  2、自定义数据类型

’分割条类型: 0 水平,1垂直
Dim HorV As Integer
’窗体变量 引用当前的窗体
Dim mForm As Form
’控件数组类型
Private Type BindControl
 binControl As Control ’控件
 ’ 控件位置: 0左侧,1右侧,2上方,3下方
 pos As Integer
End Type

’控件数组 定义了10个控件的容量 可以根据实际需要增减
Dim myBindControls(10) As BindControl
’控件数组中已有元素的数量
Dim numControls As Integer
’鼠标位置点
Dim pot As POINTAPI
’鼠标是否在移动分割条
Dim Resizing As Boolean
’分割条的最小位置和最大位置
Dim iMin As Integer
Dim iMax As Integer
’带事件的控件定义 这里我们选用Label
Dim WithEvents SplitBar As Label
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章