没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2005-12-05 09:24:00.000|阅读 1915 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
VB6因为简单易用,受到很多朋友的喜欢。可是也有人说它功能简单,没有给开发者提供足够的发挥余地。比如不能方便地继承现有控件而派生出自己的控件。(什么?写ActiveX控件?太麻烦了吧。要花大量时间在接口的设计和实现上,而且你不想让你的软件发布时带一堆OCX控件吧?)其实还是有办法的,我们可以利用VB6里的类模块实现对控件的特殊控制和事件响应。本文介绍使用类模块把普通的Label控件变成窗体动态分割条。
初识类模块
类模块其实是一个对象的定义,封装了一些属性和方法,使用前需要生成一个实例:
’生成类模块clsTest的一个实例test
Dim test as new clsTest
然后可以使用类模块的方法:
test.DoSomthing() ’调用test的方法DoSomthing()
一个简单的例子
做一个鼠标移上去后自动获得焦点并将内容选中的“聪明”编辑框。
1、新建一工程,在[工程]菜单中,选择[添加类模块],添加一个类模块,更改其名称为clsTest。
2、进入类模块编辑界面
在左边的下拉框中选择“通用”,键入以下代码:
’定义一个带事件的文本框变量
Dim WithEvents MyText As TextBox
’保存文本框是否获得焦点的布尔变量
Dim bSetted As Boolean
’自己定义的类模块的方法,传入参数是文本框。
Public Sub BindText(t As TextBox)
’将文本框变量设置为传入的文本框,即是对传入文本框的引用
Set MyText = t
End Sub
3、在左边的下拉框中选择“Class”,在右边下拉框中选择Initialize,这是类模块的初始化事件,可以在这里写自己的初始化代码。VB会自动为我们添加一个事件子程序。我们要做的就是在其中添上自己的代码。其实这一步略过也没什么影响,不过对变量进行初始化是一个好习惯。
Private Sub Class_Initialize()
’将文本框变量初始化Nothing
Set MyText = Nothing
bSetted = False
End Sub
4、在左边的下拉框中选择“MyText”,注意到了吗,它就是我们在第2步定义的带事件的文本框变量。VB把它加进来了,再到右边下拉框中点击下拉按钮,呵呵,看到什么了?原来是我们熟悉的TextBox的所有事件!只不过这里的MyText文本框并不实际存在,只是一个代
号,等着你给它指定一个实际的文本框呢。
添加事件响应代码,这就不用我说了吧。
Private Sub MyText_GotFocus()
bSetted = True
End Sub
Private Sub MyText_LostFocus()
bSetted = False
End Sub
’鼠标在控件上移动时,如果还没设置焦点,将它设为焦点,
’并将内容选中
Private Sub MyText_MouseMove(Button As Integer, Shift As Integer, X As Single, Y
As Single)
If (Not bSetted) Then
MyText.SetFocus
MyText.SelStart = 0
MyText.SelLength = 9999
End If
End Sub
到此,类模块宣告完毕,保存它(.cls文件)。
5、下面就是类模块的使用,非常简单。现在一个窗体上放3 个TextBox控件,名称分别为Text1、Text2、Text3。
在通用部分键入以下代码:
’定义类模块的实例,因为有3个TextBox所以定义3个实例
Dim t1 As New clsTest
Dim t2 As New clsTest
Dim t3 As New clsTest
在窗体的Load事件中键入以下代码:
Private Sub Form_Load()
’调用类模块的方法BindText 参数是窗体上的TextBox们
t1.BindText Text1
t2.BindText Text2
t3.BindText Text3
End Sub
6、 运行程序,鼠标在不同的文本框上移动时,可以看到相应的文本框自动获得焦点,并将内容选中。
7、在其他程序里怎么用?也很简单,在其它工程中,到[工程]菜单,选择[添加文件],选择你以前保存的.cls文件(建议先将此文件拷到工程目录下,以便于管理)说到这里您一定对类模块有了一个大概的了解,发挥自己的想象力,可以作出更好的东西!一个复杂点的例子
——窗体动态分割条
总体思路
可以用现成的控件来做分割条,如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
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号