没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2004-01-20 11:48:00.000|阅读 2588 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
一、概 述
在实际工程应用中,有时需要在程序运行时动态加载ActiveX控件,以满足不同的应用条件或用户输入,因此有必要研究动态加载ActiveX控件的实现方法。
----一个控件要在Windows中使用,必须将其在Windows中注册。注册ActiveX控件一般来说有三种途径:1.使用Regsvr32.exe程序对ActiveX控件进行注册;2.使用安装程序进行注册;
3.利用Windows API 函数进行注册。
----为了保护控件不被非法用户使用,VB提供了加许可证(License)功能。当生成控件时选择了加许可证选项,生成的控件会含有许可证码(包含在.vbl文件中)。当向其他机器安装该控件时,该许可证码会自动安装在该机器的注册表中,而如果仅复制控件到该机器并注册它,则复制机器注册表中没有控件的许可证码,控件不可使用。
二、实现方法
----以下是不同情况下动态加载控件的实现方法。
----1.控件在应用程序的窗体(Form)上
----这种情况适合于应用程序中需要该控件,但需要控件实例的具体数量不定。实现方法是首先从工具箱中拖动需要的控件到窗体上;然后将控件的 index属性设为0(生成一个控件实例数组);最后编程实现控件实例的加载卸载。
Dim iControlIndex As Integer
‘加载控件实例的索引值
Private Sub LoadControl(iIndex As Integer)
Load UserControl11(iIndex)
‘加载控件实例,UserControl11是自定义控件名字
UserControl11(iIndex).Visible = True
End Sub
Private Sub UnloadContr(iIndex As Integer)
Unload UserControl11(2)
‘卸载控件实例,当不使用控件实例时自动卸载
End Sub
Private Sub UserControl11_Done(Index As Integer)
‘根据控件实例的索引决定相应控件实例作出响应
Select Case Index
Case 0
Case 1
......
End Sub
----2.控件在应用程序工具箱(TOOLBOX)中,但没有添加到应用程序中
----这种情况适合于为了完成不同的任务,制作了多个不同功能的控件,在特定条件下只需要一个或几个控件即可。实现方法是将所有可能用到的控件加到VB工具箱中,当应用程序执行时,根据需要由程序自动加载控件。
Dim WithEvents oControl As VBControlExtender
动态加载控件虽然实现了控件的动态加载,但不能预先设计加载控件的响应事件代码,如:预先设计处理事件代码Sub sZlfPrinr1_Click() 将是非法的,当然,可以将要响应的事件封装在控件内部,但这样降低了控件的灵活性。
WithEvents 关键词使VBControlExtender控件实例能提供事件捕捉陷井,VBControlExtender对象对动态添加控件特别有用,它提供了一套通用的属性、方法、事件给开发人员。
Private Sub LoadControl() ‘加载控件
If Not oControl Is Nothing Then
‘首先判断控件是否存在,若存在则先卸载
Controls.Remove (“szlfPrint1") ‘卸载控件实例
End If
Licenses.Add “test.usercontrol1",
“9CA5E0CC-37D7-11D4-
8547-00A024EE55CD =
uohhlohhhhmoooiouijoohloririmhlhtoqi"
‘如果控件需要许可证码,则需先填加许可证码
Set oControl = Me.Controls.Add(
“test.usercontrol1",“szlfPrint1", Frame1)
‘test.usercontrol是控件的对象编号,
可通过VB的Object Browser得到控件的对象编号,
szlfPrint1是控件的名字,Frame1是控件的容器。
oControl.Visible = True
End Sub
Private Sub UnloadControl() ‘卸载控件实例
If Not oControl Is Nothing Then
Controls.Remove (“szlfprint1")
Set oControl = Nothing
End If
End Sub
Private Sub CmdTest_Click()
‘测试程序,可以像静态加载控件
那样使用控件实例的属性及方法
oControl.Visible = False
oControl.DoMsg
oControl.NodeCode = “dd"
End Sub
Private Sub oControl_ObjectEvent(Info As EventInfo)
Select Case Info.Name
Case “MouseDown"
oControl.DoMsg
Case “click"
MsgBox “Click"
‘双击处理代码
Case Else ‘
End Select
End Sub
----ObjectEvent(Info As EventInfo)能捕捉到控件使用 RaiseEvent产生的所有事件,EventInfo数据结构映射了事件的名称、参数个数和参数的值。
值得注意的是,由于控件在工具箱中而没有在应用程序中,当程序运行时会报错,需把程序的工程属性Remove information about unused Activex Controls 设为不选。
----3.控件在应用程序运行机器上,但没有在工具箱中
----这种情况适合于在较大工程项目中,开发者彼此分工合作,控件由第三方提供,制作应用程序的开发者没有此控件,但要安装的机器有这个控件。
----这种情况的实现方法与情况2类似,并可以实现控件的动态注册及撤消注册,但应用程序无法访问控件的方法及部分属性。
Private Sub RegisterControl_Click
(strControlName As String) ‘注册控件
‘Syspath是regsvr32的目录;
strControlName是控件名字(包括路径)
i=Shell(Syspath & “regsvr32.exe /s /I"
& strControlName, vbHide)
End Sub
Private Sub UnRegisterControl_Click
(strControlName As String) ‘撤消注册控件
i=Shell(Syspath & “regsvr32.exe /s /U"
& strControlName, vbHide)
End Sub End Sub
标签:
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至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号