让Internet Explorer成为你的软件集成平台(二):献给VB Developer

2024-02-16 21:18

本文主要是介绍让Internet Explorer成为你的软件集成平台(二):献给VB Developer,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Microsoft Visual Basic 6.0是Microsoft的一个经典作品,尽管争议颇多,个人认为VB6是一个十分优秀的开发工具。做为一款1998年的产品,VB6至今还被许多人所喜爱,笔者就是其中之一。针对COM组件开发,VB6非常方便,但长期以来,VB6与IE插件开发却无缘无分,这一点多少有一些遗憾。作为一款建立在COM基础之上的应用软件,IE系列提供了对COM技术的深度支持,也许,这个支持的门槛过高,使得VB被拒之门外。
那么,能否建立VB6与IE开发之间的桥梁?一般而言,VB6可以十分方便的开发3类COM对象:1、简单的无UI COM对象;2、ActiveX控件;3、ActiveX Document对象。这几类对象中,前2类使用很广泛,第三种对象对一般开发者而言也许相对陌生,事实上,Microsoft的许多软件的插件往往是使用第三类对象,即基于VB的Active Document,例如Visual Studio IDE里的Tool Windows对象,就是一个典型的例子。选择这类对象,也许是因为ActiveX Document对象有完整的键盘消息控制能力。与MFC、ATL等相比,VB6的COM开发要简洁得多,例如,没有idl文件,触发事件的机制非常简单,连接事件的方式也十分清晰,VB6的“引用”机制,对COM开发的简化是无与伦比的,即使现在的.NET,也是延续早期VB的引用模式。建立IE与VB6之间的桥梁,基本是来自个人对VB6的一种偏爱,对此,也颇费苦心。从技术层面看,这个桥梁不单纯是为VB而建立的,而是针对两种极为重要的COM对象建立的,其一是ActiveX控件,另外一个就是Active Document。IE能够浏览.NET 3.0开发的WPF文档,就是采用Host ActiveX Document技术实现的。在VB环境内,开发一个Active Document非常容易,为此,我们建立一个支持VB ActiveX Document的DLL工程,取名为VBIEDoc:
经过编译后,我们得到一个已经注册的COM对象库,里包含一个ID为“VBIEDoc.IEDoc”的ActiveX Document对象。现在,我们有了一个很简单的IE“插件”了,为了能够看看这个插件如何被“裝入”IE,我们还需要一些处理工作,基本步骤如下:
1、 生产一个XML文件:
<Tangram DocViewID="TangramLiteFormD.DocTemplate.1" DocObjID="" ExtDocObjID="TangramLiteFormExtenderD.docextender.1">
<Window>
<TangramNode Name="VBDoc" ID="VBIEDoc.IEDoc" CnnID="" Caption="" Width="866" Heigh="127" Tag=""></TangramNode>
</Window>
<TangramDoc></TangramDoc>
</Tangram>
2、 以这个XML文件为模板,用TangramDesigner生成一个xtml格式的XML文件,并将这个文件保存到一个指定的目录,建议保存到“Program Files/Tangram/BandFile”目录,这里,我们指定文件名为“testvb.xml”,并将这个文件存放在“Program Files/Tangram/BandFile”目录;
3、 在IE地址栏里输入“ie:l/l(testvb)”,我们看到如下界面:
如果输入:“ie:l/l(testvb)”我们将得到:
当然,这里得到的东西,内容是“空白”的,但我们已经成功地走过了第一步。
通过以上的步骤,我们看到,在UI级别上,类似VB6这样的工具产生的组件,是能够与IE对接的,那么,这种对接,能够与IE融合吗?以下,我们将向你展示,这种融合是完全可能的。为了实现与IE融合,我们需要所开发的对象有一个“属性”,这个属性名是:“TangramDoc”,利用VB的Wizard,很容易添加这个属性,代码如下:
Option Explicit
Dim WithEvents thisDoc As TangramLiteFormDLib.Document
Dim WithEvents thisWebBrowser As WebBrowser
Public Property Let TangramDoc(ByVal vNewValue As TangramLiteFormDLib.Document)
Set thisDoc = vNewValue
Set thisWebBrowser = thisDoc.AxObject("WebBrowser")
End Property
我们可以为文档上的button添加如下“动作”:
Private Sub Command1_Click()
thisWebBrowser.Navigate txtURL.Text
End Sub
重新编译上面的文档,并按上述步骤重新加载文档对象,为了测试关联性,可以在文档中输入一个URL,并按下按钮,也许你已经感觉到应该发生的事情了:
以上步骤表明,VB Document通过“引用”,可以自然地与IE交互操作,类似的,其它ActiveX控件以及ActiveX Document也可以以同样的方式实现与浏览器的UI级别的集成。
一个比较有趣的问题是,如何组织多个VB Document(以及其它ActiveX对象)。为此,我们可以在如上的VB工程中,增加2个VB Document对象,分别命名为IEDoc1、IEDoc2,我们看如下XML描述:
<Tangram DocViewID="TangramLiteFormD.DocTemplate.1" DocObjID="" ExtDocObjID="TangramLiteFormExtenderD.docextender.1">
<Window>
<TangramNode Name="sp1" ID="TangramLiteTabWnd.CTangramLiteSplitterWnd" CnnID="TangramLiteTabWnd.TangramConnector" Caption="sp1" Width="" Heigh="" Tag="">
<Row>
<TangramNode Name="fm1" ID=" VBIEDoc.IEDoc" Width="866" Heigh="127" Tag=""></TangramNode>
</Row>
<Row>
<TangramNode Name="fm2" ID=" VBIEDoc.IEDoc1" Width="866" Heigh="446" Tag=""></TangramNode>
</Row>
</TangramNode>
</Window>
<TangramDoc></TangramDoc>
</Tangram>
从描述上看,这个结构描述了一个2行1列的切分窗口,处于(1,1)位置的是ID=" VBIEDoc.IEDoc"的VB Document(你可以用其它ID值替换),处于(2,1)位置的是ID=" VBIEDoc.IEDoc1"的VB Document对象。我们可以用TangramDesigner生成对应的XTML文件,记为:testvb2.xtml,在IE地址栏里输入“ie:l/l(testvb2)”,你可以看到:
一旦多个VB对象(或者多个ActiveX)彼此可以关联,那么这些关联即可形成特定的应用。
我们已经看到,ActiveX对象完全可以操作IE以及IE内部的DOM模型(通过引用技术,COM对象可以得到接口IHtmlDocument2,进而可以遍历DOM),那么,能否在DOM模型里操作外围的“插件”对象?这些插件对象,并不属于DOM对象集合,但由于这些对象的“多样性”,的确可能给IE提供大量的原本不具备的软件功能,一旦在“对象模型”上找到突破口,这种结合将急速促进桌面应用与Web应用相结合。我们将在以后的文章中陆续介绍如何将上述扩展对象有机的“融入”HTML的DOM模型,例如,这些对象可以与浏览器的脚本引擎完全的整合,脚本引擎可以自然的解释“外围”插件的事件,同时,外围插件也可以自如的处理HTML内部的各种操作……(待续)
 

这篇关于让Internet Explorer成为你的软件集成平台(二):献给VB Developer的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/715736

相关文章

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

springboot2.1.3 hystrix集成及hystrix-dashboard监控详解

《springboot2.1.3hystrix集成及hystrix-dashboard监控详解》Hystrix是Netflix开源的微服务容错工具,通过线程池隔离和熔断机制防止服务崩溃,支持降级、监... 目录Hystrix是Netflix开源技术www.chinasem.cn栈中的又一员猛将Hystrix熔

MyBatis-Plus 与 Spring Boot 集成原理实战示例

《MyBatis-Plus与SpringBoot集成原理实战示例》MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBa... 目录 一、MyBATis-Plus 简介 二、集成方式(Spring Boot)1. 引入依赖 三、核心机制

SpringBoot集成P6Spy的实现示例

《SpringBoot集成P6Spy的实现示例》本文主要介绍了SpringBoot集成P6Spy的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录本节目标P6Spy简介抛出问题集成P6Spy1. SpringBoot三板斧之加入依赖2. 修改

springboot项目中集成shiro+jwt完整实例代码

《springboot项目中集成shiro+jwt完整实例代码》本文详细介绍如何在项目中集成Shiro和JWT,实现用户登录校验、token携带及接口权限管理,涉及自定义Realm、ModularRe... 目录简介目的需要的jar集成过程1.配置shiro2.创建自定义Realm2.1 LoginReal

SpringBoot集成Shiro+JWT(Hutool)完整代码示例

《SpringBoot集成Shiro+JWT(Hutool)完整代码示例》ApacheShiro是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,在现代应用开发中,Shiro因... 目录一、背景介绍1.1 为什么使用Shiro?1.2 为什么需要双Token?二、技术栈组成三、环境

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

《SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南》本文将基于开源项目springboot-easyexcel-batch进行解析与扩展,手把手教大家如何在SpringBo... 目录项目结构概览核心依赖百万级导出实战场景核心代码效果百万级导入实战场景监听器和Service(核心

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick