科技行者

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

知识库

知识库 安全导航

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

用Visual Basic6类模块打造控件

  • 扫一扫
    分享文章到微信

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

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

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

关键字:

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

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

4、类模块及控件事件

’类模块初始化
Private Sub Class_Initialize()
 numControls = 0 ’控件数设为0
 Resizing = False ’鼠标调整设为假
End Sub

’鼠标在Label控件上按下左键,开始调整
Private Sub SplitBar_MouseDown(Button As Integer, Shift
 As Integer, X As Single, Y As Single)
 If Button = vbLeftButton Then Resizing = True
End Sub

’鼠标在Label控件上抬起左键,结束调整
Private Sub SplitBar_MouseUp(Button As Integer, Shift As
 Integer, X As Single, Y As Single)
 If Button = vbLeftButton Then Resizing = False
End Sub

’鼠标移动事件
Private Sub SplitBar_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

 ’得到鼠标位置
 
 GetCursorPos pot
 ’屏幕坐标转为窗体坐标
 ScreenToClient mForm.hwnd, pot
 ’如果鼠标不在调整则退出
 If Not Resizing Then Exit Sub
 If HorV = 0 Then ’如果是水平分割条
 ’如果鼠标在窗体上的水平位置超过最小值
 If pot.X * Screen.TwipsPerPixelX < iMin Then
 ’设置鼠标位置为窗体上水平位置最小值 退出
 pot.X = iMin / Screen.TwipsPerPixelX
 ClientToScreen mForm.hwnd, pot
 SetCursorPos pot.X, pot.Y
Exit Sub
 ’如果鼠标在窗体上的水平位置超过最大值
 ElseIf pot.X * Screen.TwipsPerPixelX > iMax Then
 ’设置鼠标位置为窗体上水平位置最大值 退出
 pot.X = iMax / Screen.TwipsPerPixelX
 ClientToScreen mForm.hwnd, pot
 SetCursorPos pot.X, pot.Y
Exit Sub
Else
 ’设置分割条的左侧位置为鼠标水平位置减去
 ’分割条宽度的二分之一
 SplitBar.Left = pot.X * Screen.TwipsPerPixelXSplitBar.Width / 2
End If
Else ’如果是垂直分割条
’如果鼠标在窗体上的水平位置超过最小值
If pot.Y * Screen.TwipsPerPixelY < iMin Then
 ’设置鼠标位置为窗体上水平位置最小值 退出
 pot.Y = iMin / Screen.TwipsPerPixelY
 ClientToScreen mForm.hwnd, pot
 SetCursorPos pot.X, pot.Y
 Exit Sub
 ’如果鼠标在窗体上的水平位置超过最大值
ElseIf pot.Y * Screen.TwipsPerPixelY > iMax Then
 ’设置鼠标位置为窗体上水平位置最大值 退出
 pot.Y = iMax / Screen.TwipsPerPixelY
 ClientToScreen mForm.hwnd, pot
 SetCursorPos pot.X, pot.Y
 Exit Sub
Else
 ’设置分割条的顶部位置为鼠标垂直位置
 ’减去分割条高度的二分之一
 SplitBar.Top = pot.Y * Screen.TwipsPerPixelY - SplitBar.Height / 2
 End If
End If
’调用子程序计算控件位置
ArrangePosition
End Sub

  至此分割条类模块编写完毕,下面就是实际使用测试。

  分割条的使用

  新建一窗体,在上面放两个文本框Text1、Text2,一个标签Label1,如图4:


图4 测试分隔条

  定义一个分割条实例:

Dim sp As New clsSplitBar

  1、窗体Load事件

Private Sub Form_Load()
sp.Attach Me, Label1, 0, 1000, 5000
sp.SetLeftBind Text1
sp.SetRightBind Text2
End Sub

  2、窗体Resize事件

Private Sub Form_Resize()
sp.ArrangePosition
End Sub

  使用类模块的优点

  相比ActiveX控件,类模块不需要编译控件,不需要控件注册。它是将类模块直接编译到应用程序中的,所以不会被别人非法使用。提高了代码重用性。而且由于是源码级的重用,可以方便的进行修改,从而更加灵活,可以适用不同的要求。笔者还用类模块写了一个语法着色控件,使用普通的RichTextBox控件,可以定义多种文字样式(每条样式包括字体、颜色、大小、下划线、粗体、斜体),最多可定义10组样式。每组样式都可以规定采用该样式的文字组。相信大家会做出更好的控件!

  在VB.net中,要创建带分割条的窗体非常简单。VB.net提供了一个分割条控件:Splitter。假设要创建一个可以左右调整大小的窗格,先在窗体上放一个面板Panel控件,设置其Dock 属性为Left,再从工具箱中拖动一个Splitter控件到窗体上,它会自动依靠在Panel控件的边缘,然后,再从工具箱中拖入第2 个Panel,这回,设置它的Dock属性为Fill。好了,运行看看,是不是就可以调整左右窗格的大小了?

查看本文来源

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

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

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