社区
控件
帖子详情
使用两个activex控件编译成OCX插入到网页中,如何让两个OCX控件件实现通讯?
BESTMAN
2000-05-29 10:45:00
使用两个activex控件编译成两个OCX插入到网页中,如何让两个OCX控件件实现通讯?
...全文
102
4
打赏
收藏
使用两个activex控件编译成OCX插入到网页中,如何让两个OCX控件件实现通讯?
使用两个activex控件编译成两个OCX插入到网页中,如何让两个OCX控件件实现通讯?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
huitor
2000-06-02
打赏
举报
回复
hi,
jing
2000-06-01
打赏
举报
回复
用java applet
BESTMAN
2000-05-30
打赏
举报
回复
怎样用ASP实现通信呢?
请说明具体方法好吗?
yangpo
2000-05-29
打赏
举报
回复
情况1、在一个主页上:
用ASP实现通信
情况2、在不同的机器上:
需要知道对方的IP地址,可以用后台服务程序统一管理,也可以让用户输入机器名或IP地址,然后用Socket通信
COM/
ActiveX
/
OCX
反
编译
工具 获取名称工具 IDA插件
COM/
ActiveX
/
OCX
反
编译
工具 测试运行正常,可以反
编译
com/
activex
方法、属性。 定位com方法的地址。
VB6.0动态加载
ActiveX
控
件漫谈
VB6.0动态加载
ActiveX
控
件漫谈 深圳 罗汉军 罗德昌 熟悉VB的朋友对
使用
ActiveX
控
件一定不会陌生,众多
控
件极大地方便了编程, 但唯一的缺陷是不能动态加载
控
件,必须在设计时通过引用,将
控
件放置在窗体上。 VB6.0已能够解决该问题,只是帮助
中
没有明确说明,并且没有描述到一些关键功 能,由于以前的版本
中
可以动态创建进程外服务:如果对象是外部可创建的,可在 Set 语句
中
用 New 关键字、CreateObject 或 GetObject 从部件外面将对象引用赋予变 量。 如果对象是从属对象,则需
使用
高层对象的方法,在 Set 语句
中
指定一个对象引 用: Dim xlApp1 As Excel.Application Set xlApp1 = New Excel.Application 或 Dim xlApp As Object '定义存放引用对象的变量。 Set xlApp = CreateObject("excel.application") xlApp.Visible = True ---- 这些语法很容易造
成
误导,以为动态加载
ActiveX
控
件也是此方法,可能有朋 友也象我一样利用CreateObject尝试了无数次,却无功而返,不知微软公司是出于何种 考虑,动态加载
ActiveX
控
件是扩展
控
件集合的方式
实现
,通过实际摸索,终于就如 何
实现
动态
ActiveX
控
件找出了一条切实可行的方法,下面以一个具体的实例来详细说 明。 一、
ActiveX
控
件 ----
ActiveX
控
件是 Visual Basic 工具箱的扩充部分。
使用
ActiveX
控
件的方 法与
使用
其它标准内装的
控
件,如 CheckBox
控
件,完全一样。在程序
中
加入
ActiveX
控
件后,它将
成
为开发和运行环境的一部分,并为应用程序提供新的功能。 ----
ActiveX
部件通过客户端/服务器关系与应用程序— 及与部件相互之间— 交 互作用。客户端是
使用
部件功能的应用程序代码或部件。服务器是部件及其关联的对象。 例如,假设应用程序
使用
ActiveX
控
件来提供一个标准的雇员窗体,供公司的多种 应用程序
使用
。提供雇员窗体的
ActiveX
控
件就是服务器,
使用
这个
控
件的应用程序 就是服务器的客户端。 二、加载方法 ---- VB6.0
中
对Controls 集合进行了扩展,以前版本
中
Controls 集合在窗体上列 举出已加载的
控
件,这在迭代过程
中
是很有用的。Controls 集合标识一个叫做 Controls的内在窗体级变量。如果忽略可选的 object 所在处的整数,则关键字 Controls 必须包括在内。我们通常在窗口
中
使用
如下代码: Text1.Text="Hello, world" 其实也可以
使用
如下代码达到同一目的: Controls(1).Text="Hello, world" ---- 在VB6.0
中
除了原来的Clear、Remove 方法外(很奇怪,为什么微软在VB5.0
中
只提供这两种方法,而没有提供Add方法,因为没有Add,这两种方法也就没什么用处), 增加了Add方法,该方法就是用于动态加载
控
件的: Controls.Add(progid as String, Name as String); progid:
ActiveX
部件的ProgID,如:"VB.CheckBox"; Name:
ActiveX
部件加载后的名称,如: "MyCheckBox"; 若要在窗体上添加一个名为MyButton的按钮,可以
使用
: dim oControl as Object '窗体级变量 注意:这里声明为Object对象类型 Private Sub LoadControl() Set oControl = Controls.Add ("VB.CommandButton", "MyButton") oControl.Left = 10 oControl.Top = 10 oControl.Visible = True '使
控
件可见 End Sub ---- 这是VB6.0的标准语法,它在例程
中
也是如此演示的,不过该方法虽然现实了
控
件的动态加载,按钮显示在窗体上,可以象普通按钮一样按下去,但加载的
控
件不能 预先设计响应事件代码,如:事件Sub MyButton_Click()将是非法的,当然,可以将要 响应的事件封装在
控
件内部。就编程的观点来看该方法没什么大的用处,开发
ActiveX
控
件的目的是为了资源共享,为了被其他开发人员利用,所以要提供必要的事件接口, 显然利用该方法不行,通过分析VBControls等相关对象,找出VBControlExtender对象 与EventInfo相结合能提供事件陷井捕捉,VBControlExtender对象对动态添加
控
件特 别有用,它提供了一套通用的属性、方法、事件给开发人员,它的一个突出特点是能编 程设计
控
件的事件,熟习类编程的朋友对带事件的对象声明一定不会陌生: ---- Dim WithEvents objElemt as CElemtVBControlExtender也不例外,声明的 语法一样,只不过它有个特殊的事件ObjectEvent(Info As EventInfo),它能捕捉到对 象
使用
RaiseEvent产生的所有事件,EventInfo数据结构映射了事件的名称、参数个数 和参数的值。VBControlExtender和 EventInfo相结合,采用Select Case 就可以预先 将不同类对象的事件放置一起,各自独立运作。将上面的代码改写一下就能提供Click 事件了: ---- Dim WithEvents oControl As VBControlExtender '带事件声明声明之后您 就可以在代码窗口的左上角的对象下拉框
中
发现该对象出现了,也就是说,该对象有了 事件或方法了,它的事件有DragDrop,DragOver ,LostFocus ,GotFocus , ObjectEvent和Validate,其
中
ObjectEvent是通用的事件捕捉。 Private Sub LoadControl() Set oControl = Controls.Add ("VB. CommandButton", "MyButton") oControl.Visible = True End Sub Private Sub oControl_ObjectEvent(Info As EventInfo) Select Case Info.Name Case "Click" 'Click事件 '您可以添加处理Click事件代码 MsgBox "您按了MyButton!" Case Else ' 其他事件 ' Handle unknown events here. End Select End Sub ---- 当然对微软提供的标准
控
件能采用该方法添加,大家都不会怀疑,但自己开 发的
控
件也能吗?答案是肯定的,我们可以用一个实际的例子进行说明。 三、实例描述 ---- 假设一个本地网络的监
控
系统,需要在原理图与实物示意图间切换,原理图 包括组网结构、传输资源、监
控
主机等,而实物示意图包括路由器、设备、采集器等, 当然两种图的事件要一致,如双击某个设备图形将显示给设备的实时数据等,为了简化 维护,将原理图与实物示意图封装
成
ActiveX
控
件,由于每种图需要加载许多图形
控
件,消耗资源较大,不能同时加载,需要将其分解为两个
控
件,在切换时首先卸载一个
控
件,然后加载另一个
控
件,所以要
实现
动态加载
ActiveX
控
件。 ---- 原理图
控
件为--Theory.
ocx
,对应工程为CTheory; ---- 实物图
控
件为---Fact.
ocx
,对应工程为CFact; ---- 注意:为了简化,在设计
控
件时不设置许可证关键字。 ---- 实物图
控
件上的图形对象可以被拖动,拖动后的位置信息通过事件 ChangePosition来通知拥有该
控
件的窗体,以便下次加载能显示在最后位置,实物 图和原理图
控
件都有双击事件完
成
的工作相同,其他事件此处忽略。 ---- 四、具体示例 ---- 1、准备工作 ---- 对
控
件Theory.
ocx
、Fact.
ocx
进行注册(利用Regsvr32.exe注册); ---- 建立窗体frmTest.frm ,在窗体上放置按钮cmdLoad
Ocx
—“原理图” ---- 2、声明窗体级变量与加载函数LoadControl Dim WithEvents oControl As VBControlExtender '地图仿真
控
件对象 Dim mblnTheory As Boolean '是否显示原理图 Private Function LoadControl(intType As Integer) If Not oControl Is Nothing Then '首先判断对象是否存在,若存在则卸载 Controls.Remove("MapView") '卸载
控
件,此操作非常重要 End If If intType = 0 Then Set oControl = Controls.Add ("CTheory. Theory", "MapView") Else Set oControl = Controls.Add ("CFact.Fact", "MapView") End If oControl.Height = 3500 oControl.Width = 6500 oControl.Top = 100 oControl.Visible = True End Function Private Sub Form_Load() mblnTheory = True End Sub ---- 3、为按钮cmdLoad
Ocx
编写代码 Private Sub cmdLoad
OCX
_Click() If mblnTheory Then Call LoadControl(0) mblnTheory = False cmdLoad
OCX
.Caption = "实物图" Else Call LoadControl(1) mblnTheory = True cmdLoad
OCX
.Caption = "原理图" End If End Sub ---- 4、为事件ChangePosition编写代码 Private Sub oControl_ObjectEvent (Info As EventInfo) Select Case Info.Name Case "ChangePosition" MsgBox CStr(Info.EventParamters.Item( 1).Value) + ":" + _ CStr(Info.EventParamters.Item(2).Value) Case "DbClick" '双击处理代码 Case Else ' End Select End Sub ---- 注意: EventInfo的参数EventParamters集合
中
是以1开始的,一般来说,微 软新的集合一般是以1开始的,而旧的是以0开始的,如RdoErrors.Item(0)。 ---- 5、关闭窗口前卸载
控
件 Private Sub Form_Unload(Cancel As Integer) Controls.Remove("MapView") Set oControl = Nothing End Sub ---- 6、特别注意 ---- 通过Controls.Add方法添加的
ActiveX
控
件一定不能在该工程
中
有该
控
件的任 何引用,否则系统将出错。 四、小结 ---- 通过
使用
动态加载
ActiveX
控
件
使用
庞大的应用程序变得很小,将不同的
ActiveX
控
件进行各种组合,使应用程序更加灵活多变,如您的应用系统要处理三十种门禁, 而某个具体的用户可能只有一种或两种门禁,根本没必要首先将所有门禁包含到应用
中
,可将各个门禁独立封装,只安装注册需要的组件,就象Windows的自定义安装一样。 微软的未来技术基础是分布式的组件技术(DCOM),将会把代码的重用发挥得淋漓尽致。 您不妨试一试动态加载,也许会产生令您惊喜的效果! ---- 本代码在Win98、VB6.0(英文版)上
编译
、运行。
如何在
ActiveX
控
件
中
显示对话框界面
1、先建一个
Activex
工程 2、在资源
中
增加一个对话框,将其属设置为child 和None 3、生
成
一个基于对话框的类 4、在含有OnDraw函数的类
中
调用该对话框 先在 *.h文件
中
定义对话框的类变量 在要调用类的OnCreate函数
中
添加dlg.Create(IDD_DIALOG1,this);和 dlg.ShowWindow(SW_SHOW); 两个语句,如下所示: int CTestDlgCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (COleControl::OnCreate(lpCreateStruct) == -1) return -1; dlg.Create(IDD_DIALOG1,this); dlg.ShowWindow(SW_SHOW); return 0; } 在OnDraw()
中
添加 dlg.MoveWindow(rcBounds); 5、在Release模式下
编译
生
成
.
Ocx
文件 6、注册
控
件 7、用VC自带的
Activex
contol test contianer工具进行测试
ActiveX
控
件测试容器
ActiveX
控
件测试容器(TstCon32.exe) 在Vista或者windows7操作系统可用 在VS2008 IDE
中
编译
通过。
Qt
中
ActiveX
控
件开发程序示例
Qt框架下的
ActiveX
控
件的开发的资料较少,该示例程序展示了Qt
中
OpenGL环境下开发
ActiveX
控
件。开发环境是VS2008+Qt4.6.2+OpenGL,需要配置环境,点开程序可以
编译
运行;生
成
的
控
件名称是GLBox。欢迎大家交流,谢谢~
控件
1,451
社区成员
41,355
社区内容
发帖
与我相关
我的任务
控件
VB 控件
复制链接
扫一扫
分享
社区描述
VB 控件
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章