Delphi深度探索-数据库明了的ActiveX控件

Delphi深度探索-数据库明了的ActiveX控件,第1张

强大的数据库开发功能无疑是Delphi王冠上的明珠 至少有 %以上的人每天使用Delphi来开发数据库程序 基于积木式的VCL数据库控件 以及Dev Express和Woll Woll等公司提供的强大的第三方数据库明了控件 毫不夸张的说只需要简单的设置一下属性 拖拉几下鼠标我们就可以非常快速的完成数据库程序的开发 由于Delphi的数据库功能过于强大了 所以很多人就忽视了一个事实 就是ActiveX同样可以提供灵活的数据库绑定 遗憾的是Delphi本身所提供的几个第三方的ActiveX控件中没有一个是数据库明了的控件 这间接导致了一个误解 使得很多人误以为Delphi并不支持数据明了的ActiveX控件(也包括很久以前的我J) 这当然是错误的看法

在Delphi中使用数据明了的ActiveX控件

在下面的例子中 我们将使用随Office 安装到系统中的Microsoft Calendar 控件来进行演示 它就是一个数据明了控件 选择Component | Import ActiveX Control 选择Microsoft Calendar (见下图 ) 把类名从TCalendar改成TAXCalendar 以避免同系统中原有的同名控件冲突 然后点Install按钮安装此控件

新建一个程序 在窗体上放置一个TAXCalendar控件 再放上一个DataSource 和Table控件 设定DataSource的Dataset为Table 然后设定Table 的DataBaseName 属性为DBDEMOS TableName 属性为EMPLOYEE DB 最后设定Table Active属性为True

接下来就该进行数据库绑定了 注意一下引入的TAXCalendar具有DataSource和DataBindings这两个同一般ActiveX控件不同的属性 这是因为ActiveX Import Wizard在引入ActiveX控件先判断是否是数据库明了的控件 如果是就以TDBOleControl作为基类进行继承 如果不是就从TOleControl开始继承 而TDBOleControl实现了DataBindings和DataSource属性 设定AXCalendar DataSource属性为Datasource

这时我们在窗体上用鼠标右键单击TAXCalendar控件的话 会发现在右键菜单中多出了一个DataBindings…菜单项(见下图 )

点击菜单项后 会显示数据绑定属性编辑框(见下图 ) 分别在FieldName列表框中选定HireDate 在Property Name列表框中选择Value( )(其中 是Value的Dispid号) 点击Bind按钮 就会在数据库字段和Value属性间建立数据关联

最后 再在窗体上放置一个DBGrid和DBNavigator控件 并设定它们的DataSource为DataSource 运行程序 移动当前数据位置的时候 你可以注意到ActiveX的日期显示也会随之变化 同数据库中的Hiredate保持一致 如图 所示

创建数据明了的ActiveX控件

虽然我们已经清楚了Delphi的确可以使用数据明了的ActiveX控件 那么一个新的问题就产生了 Delphi本身可不可以创建数据明了的ActiveX控件呢?由于Delphi提供了一步到位的ActiveX控件转换生成 就有很多人希望能够把Delphi中强大的数据库控件转换为ActiveX控件 以便能在其他支持ActiveX的开发环境开发数据库程序时仍然能够享受到象在Delphi中一样的轻松愉快的感觉 但是我在前面第一部分中已经提到了 由于Delphi的数据明了控件同ActiveX数据库控件的在内部机制上差距过大 因此Delphi无法简单的直接转换其强大的数据库控件 那么是不是就意味我们就没有办法了呢?of course not! 其实使用类型库编辑器 我们可以异常轻松的实现数据明了的ActiveX控件 就让我们用TEdit控件来试验一下 看看如何去做

选菜单命令New | ActiveX | ActiveX Control启动ActiveX Control Convert Wizard 选TEdit控件作为转化对象 生成EditX ActiveX框架

接下来 我们将改造TEdit的Text属性 使其支持数据绑定 选 View | Type Library来察看Delphi生成的类型库 并选中Text属性 然后切换到Flags属性页(见下图 )

注意在Flags属性页有很多多选框 对于我们来说 只关心同数据绑定相关的选项 它们是Bindable Display Bindable Default Bindable Immediate Bindable和Request Edit选项

标记一个属性为bindable后 并将其同数据库字段绑定后 当用户修改了属性后 控件就会通知数据库值已经变化 并请求数据库记录更新状况 数据库反过来也会通知记录更新是否成功

Bindable选项表明属性支持数据绑定 如果把属性标记为bindable 属性将在其值变化时通知其容器

Request Edit表明属性支持OnRequestEdit 通知消息 这允许控件询问容器属性值是否允许用户修改

Display Bindable表示容器可以向用户显示这个属性是可绑定的

Default Bindable表示它是唯一的 缺省的可绑定属性 使用它必须同时标记了Bindable属性

Immediate Bindable当被标记时 所有的改变都会被通知 同时还需要设定bindable和Request Edit标记

下面我们就标记EditX控件的Text属性为Bindable Display Bindable Default Bindable 和Request Edit 然后点Refresh按钮刷新类型库 最后选Run | Register ActiveX Server注册ActiveX控件

再引入新的EditX ActiveX控件 就会发现它确实实现了数据绑定的功能 下面就是一个使用了数据明了的EditX的程序的运行示意图 (Delphi的ActiveX数据明了功能的实现的确简单很COOL 不是吗?

lishixinzhi/Article/program/Delphi/201311/24662

分类: 电脑/网络 >> 程序设计 >> 其他编程语言

问题描述:

详细描叙:

我以前在一个网站上看**电视(在线播放)很正常,但是最近出了点问题,当我点击在线播放的时候在播放的那个网页跳出一行字:您的安全设置不允许网站使用安装在您计算机上的ActiveX控件。此页可能没有正确显示。单击此处查看选项

接下来要等差不多两分钟左右的时间才正常播放,而以前打开播放网页马上会显示正在连接,正在缓冲,差不多30秒左右就可以正常播放了。

请问,是什么原因呢?和跳出的那一行字有关系吗?

本人现在有用金山毒霸和兔子魔法v79版本,经常设置一些东东,是不是有地方设置错了?还是把电脑中的某些参数设置错了,请高手指点,不胜感激!

解析:

Authorware作为一种主要面向非程序员的多媒体创作工具,具有简单易用、编程灵活的特点,但其软件功能相对比较简单。为了满足一些高级设计人员进行复杂程序创作的需要,Authorware从40版本开始提供了对ActiveX控件的支持,允许用户在Authorware文件中嵌入ActiveX控件,与其它支持ActiveX控件的环境中一样方便快捷地使用。由于有许多软件厂商支持ActiveX技术,所以大多数功能都能找到相应的ActiveX控件。这意味着在Authorware中,通过调用ActiveX控件来直接使用现成的程序模块,从而省掉许多繁琐的编程工作。所能使用的ActiveX控件,除了Windows *** 作系统本身提供的以外,还可以根据需要,利用编程语言如VB、VC、Delphi等,制作具有特殊功能的ActiveX控件,然后在Authorware中使用它们。

1 ActiveX的基本知识

11 Activex简介

ActiveX是Microsoft的元素软件标准。简单地说,ActiveX技术是一种共享程序数据和功能的技术。它由微软提出并大力推广,并已成为事实上的标准。

ActiveX技术是Microsoft对OLE技术的更新和发展,Microsoft公司为了适应网络的高速发展把它的OLE技术和OCX技术融为一体并加以改进形成联合标准,改进之后赋予新名字ActiveX。也就是说,ActiveX中涵盖了OLE的所有技术和功能,同时又具有许多新的特性,以适应网络发展的需要。

ActiveX指的是一组包括控件、DLL和ActiveX文档的组件,它通常以动态链接库的形式存在,其设计思想是将一个程序(比如Flas )嵌入到另一个程序中(这个程序通常被称做容器,比如Authorware、Delphi、VB、VC、Inter Explorer等)。借助这种技术使得用户在一个程序中所创建的信息可以被集成到其它程序所产生的文档中。这样就可使它(如Flas )可以随意地应用到各种场合。

ActiveX控件的数据输入和函数功能执行都必须通过容器,因此ActiveX控件和容器之间必须有一些特定的接口协议。ActiveX控件必须具备如下的性能机制:

属性和方法:ActiveX控件必须提供属性的名称、方法的名称及参数,通过这项机制,容器可以存取和改变ActiveX控件的属性参数。

事件:ActiveX控件由这项机制通知容器在ActiveX控件中发生的事件,比如属性参数的改变,用户按下鼠标左键等。

虽然在本质上ActiveX和OLE是同一种技术(实现不同程序的数据和功能的共享),但其目的有所差别。ActiveX的目的主要是共享程序模块之间的计算功能,生成一些专门的可以嵌入其他程序中的“小程序”,例如Microsoft web浏览器控件可以使得别的应用程序能够浏览(仅仅是浏览而不是创建)Web网页。

ActiveX控件是一个模块化的灵活对象,如果某个应用程序或网页需要增加一项特殊的功能,则无须重写整个程序,只要灵活地插入一个具有此项功能的ActiveX控件即可实现,ActiveX的优势还在于它的动态可交互性,用户可以动态地在使用过程中,通过改变它的属性和参数,在应用程序中实现自己的特殊要求。

12 使用ActiveX

作为一个外部程序,ActiveX控件在Authorware中的使用与普通图标的使用有很大区别。总的来说,使用ActiveX控件要涉及到以下内容。

121 安装注册控件

如果要使用自己编写的控件或者使用其他人提供的控件,就先要在Windows中进行注册。同样如果我们的程序中使用了控件又要交给用户使用,最好必须先检测用户机中是否注册了该控件,若没有就要进行注册。

注册的方法有两种:

1.手动注册

方法是:单击Windows的开始菜单,选择运行命令,在打开的对话框中输入以下命令:

regsvr32 <ActiveX控件的文件名>

regsvr32exe是Windows自带的ActiveX注册工具,可以在Windows的系统目录中找到,假定要注册一个自建的控件Newocx,那么就输入如下命令:regsvr32 newocx,如图1所示。

图1 运行窗口

单击确定按钮,如果注册成功,将会出现如图2所示的对话框,提示成功,否则会出现如图3所示的对话框,提示没有注册成功,原因一般是已经注册过该控件或控件本身有问题。

图2 注册成功对话框

图3 注册失败对话框

若要解除某一个ActiveX控件的注册,则格式如下:

regsvr32 /u <ActiveX控件的文件名>

比如要删除刚才注册的控件newocx,就可以在运行窗口输入以下命令:

regsvr32 /u newocx

然后单击确定按钮,如果删除成功,将出现对话框来提示成功删除,如图4所示。

图4 控件删除成功对话框

2.在Authorware中自动注册

方法是利用Authorware 中的Xtra ActiveX 里的函数来进行注册。

对ActiveX控件注册的格式如下:

ActiveXControlRegister("<ActiveX控件的文件名>")

如要注销该控件,格式如下:

ActiveXControlUnregister("<ActiveX控件的文件名>")

同样以newocx为例(通常首先要检测当前系统是否支持控件注册):

注册控件:

if ActiveXInstalled()=-1 then

result:= ActiveXControlRegister(FileLocation^"newocx")

end if

这里假定newocx是放在程序文件所在目录中。result是自定义变量,用来记录函数ActiveXControlRegister的返回值的,若注册成功则返回值为-1,否则为0。

注销控件:

if ActiveXInstalled()=-1 then

result:= ActiveXControlUnregister(FileLocation^"newocx")

end if

具体的用函数注册控件和删除控件在后面相应的实例中均有介绍。

ActiveX 是一个打开集成平台提供开发、 用户和 Web 发生器快速简便快捷地为 Internet 和 Intranet 创建程序集成和内容。 使用 ActiveX, 可轻松插入到 Web页, 多媒体效果、 交互式对象, 以及复杂程序创建用户体验相当的高质量多媒体 CD-ROM 。

根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中。

ActiveX的内容

[编辑本段]

ActiveX 控件

以前称为 OLE 控件或 OCX 控件, ActiveX, 是组件 (或对象) 打包, 别人编程功能, 以便您可以重用 Web页或其他程序中插入。 例如, 随 InternetExplorer 一起提供 ActiveX 控件可用于增强 Web页具有复杂格式功能和动画。

ActiveX 控件通过 Java 程序和 Netscape 插件关键优点是, 还可以用许多编程语言, 包括所有 Microsoft 编程和数据库语言编写程序中使用 ActiveX 控件。

ActiveX 文档

用一个 ActiveX - 识别 Web 浏览器如 InternetExplorer, 浏览时 ActiveX 文档使您能够使用自己的工具栏和菜单可打开程序。 这意味着您可以通过使用 ActiveX - 识别 Web 浏览器打开非HTML 文件, 如 MicrosoftExcel 或 MicrosoftWord 文件。

ActiveX 脚本

ActiveX 脚本支持最常用脚本语言, 包括 Microsoft VisualBasic 脚本和 JavaScript。 ActiveX 脚本可用于集成行为若干 ActiveX 控件或 Java 程序从 Web 浏览器或服务器, 扩展其功能。

ActiveX的特点

[编辑本段]

在因特网上,ActiveX插件软件的特点是:一般软件需要用户单独下载然后执行安装,而ActiveX插件是当用户浏览到特定的网页时,IE浏览器即可自动下载并提示用户安装。 ActiveX插件安装的一个前提是必须经过用户的同意及确认。

ActiveX插件技术是国际上通用的基于Windows平台的软件技术,除了网络实名插件之外,许多软件均采用此种方式开发,例如Flash动画播放插件、Microsoft MediaPlayer插件、CNNIC通用网址插件等。

相关内容

[编辑本段]

1浏览器如何保证ActiveX插件的安全性?

当通过Internet发行软件时,软件的安全性是一个非常引人注意的问题,IE浏览器通过以下的方式来保证ActiveX插件的安全:

ActiveX使用了两个补充性的策略:安全级别和证明,来追求进一步的软件安全性;

Microsoft提供了一套工具,可以用它来增加ActiveX对象的安全性;

通过Microsoft的验证代码工具,可以对ActiveX控件进行签名,这告诉用户你的确是控件的作者而且没有他人篡改过这个控件;

为了使用验证代码工具对组件进行签名,必须从证书授权机构获得一个数字证书;证书包含表明特定软件程序是正版的信息,这确保了其他程序不能再使用原程序的标识。证书还记录了颁发日期。当您试图下载软件时,Internet Explorer 会验证证书中的信息,以及当前日期是否在证书的截止日期之前。如果在下载时该信息不是最新的和有效的,Internet Explorer 将显示一个警告;

在IE默认的安全级别中,ActiveX控件安装之前,用户可以根据自己对软件发行商和软件本身的信任程度,选择决定是否继续安装和运行此软件。

在最新的IE 7中,安全性有进一步的提高。

2关于三个概念:ActiveX、OLE和COM

熟悉面向对象编程和网络编程的人一定对ActiveX、OLE和COM/DCOM这些概念不会陌生,但是它们之间究竟是什么样的关系,对许多们还是比较模糊的。在具体介绍它们的关系之间,我们还是先明确组件(Component)和对象(Object)之间的区别。组件是一个可重用的模块,它是由一组处理过程、数据封装和用户接口组成的业务对象(Rules Object)。组件看起来像对象,但不符合对象的学术定义。它们的主要区别是:1)组件可以在另一个称为容器(有时也称为承载者或宿主)的应用程序中使用,也可以作为独立过程使用;2)组件可以由一个类构成,也可以由多个类组成,或者是一个完整的应用程序;3)组件为模块重用,而对象为代码重用。现在,比较流行的组件模型有COM(Component Objiect Module,对象组件模型)/DCOM(Distributed COM,分布式对象组件模型)和CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构)。到这里,已经出现了与本文相关的主题COM,而CORBA与本文无关,就不作介绍。之所以从组件与对象的区别说起,是想让大家明确COM和CORBA是处在整个体系结构的最底层,如果暂时对此还不能理解,不妨继续往下看,最后在回过头看一看就自然明白了。现在开始阐述ActiveX、OLE和COM的关系。首先,让大家有一个总体的概念,从时间的角度讲,OLE是最早出现的,然后是COM和ActiveX;从体系结构角度讲,OLE和ActiveX是建立在COM之上的,所以COM是基础;单从名称角度讲,OLE、ActiveX是两个商标名称,而COM则是一个纯技术名词,这也是大家更多的听说ActiveX和OLE的原因。既然OLE是最早出现的,那么就从OLE说起,自从Windows *** 作系统流行以来,“剪贴板”(Clipboard)首先解决了不同程序间的通信问题(由剪贴板作为数据交换中心,进行复制、粘贴的 *** 作),但是剪贴板传递的都是“死”数据,应用程序开发者得自行编写、解析数据格式的代码,于是动态数据交换(Dynamic Data Exchange,DDE)的通信协定应运而生,它可以让应用程序之间自动获取彼此的最新数据,但是,解决彼此之间的“数据格式”转换仍然是程序员沉重的负担。对象的链接与嵌入(Object Linking and Embedded,OLE)的诞生把原来应用程序的数据交换提高到“对象交换”,这样程序间不但获得数据也同样获得彼此的应用程序对象,并且可以直接使用彼此的数据内容,其实OLE是Microsoft的复合文档技术,它的最初版本只是瞄准复合文档,但在后续版本OLE2中,导入了COM。由此可见,COM是应OLE的需求而诞生的,所以虽然COM是OLE的基础,但OLE的产生却在COM之前。COM的基本出发点是,让某个软件通过一个通用的机构为另一个软件提供服务。COM是应OLE的需求而诞生,但它的第一个使用者却是OLE2,所以COM与复合文档间并没有多大的关系,实际上,后来COM就作为与复合文档完全无关的技术,开始被广泛应用。这样一来,Microsoft就开始“染指”通用平台技术。但是COM并不是产品,它需要一个商标名称。而那时Microsoft的市场专家们已经选用了OLE作为商标名称,所以使用COM技术的都开始贴上了OLE的标签。虽然这些技术中的绝大多数与复合文档没有关系。Microsoft的这一做法让人产生这样一个误解OLE是仅指复合文档呢?还是不单单指复合文档?其实OLE是COM的商标名称,自然不仅仅指复合文档。但Microsoft自己恐怕无法解释清楚,这要花费相当的精力和时间。于是,随着Internet的发展,在1996年春,Microsoft改变了主意,选择ActiveX作为新的商标名称。ActiveX是指宽松定义的、基于COM的技术集合,而OLE仍然仅指复合文档。当然,ActiveX最核心的技术还是COM。ActiveX和OLE的最大不同在于,OLE针对的是桌面上应用软件和文件之间的集成,而ActiveX则以提供进一步的网络应用与用户交互为主。到这里,大家应该对ActiveX、OLE和COM三者的关系有了一个比较明确的认识,COM才是最根本的核心技术,所以下面的重点COM。让对象模型完全独立于编程语言,这是一个非常新奇的思想。这一点从C++和Java的对象概念上,我们就能有所了解。但所谓COM对象究竟是什么呢?为了便于理解,可以把COM看作是某种(软件)打包技术,即把它看作是软件的不同部分,按照一定的面向对象的形式,组合成可以交互的过程和以组支持库。COM对象可以用C++、Java和VB等任意一种语言编写,并可以用DLL或作为不同过程工作的执行文件的形式来实现。使用COM对象的浏览器,无需关心对象是用什么语言写的,也无须关心它是以DLL还是以另外的过程来执行的。从浏览器端看,无任何区别。这样一个通用的处理技巧非常有用。例如,由用户协调运行的两个应用,可以将它们的共同作业部分作为COM对象间的交互来实现(当然,现在的OLE复合文档也能做到)。为在浏览器中执行从Web服务器下载的代码,浏览器可把它看作是COM对象,也就是说,COM技术也是一种打包可下载代码的标准方法(ActiveX控件就是执行这种功能的)。甚至连应用与本机OS进行交互的方法也可以用COM来指定,例如在Windows和Windows

NT中用的是新API,多数是作为COM对象来定义的。可见,COM虽然起源于复合文档,但却可有效地适用于许多软件问题,它毕竟是处在底层的基础技术。用一句话来说,COM是独立于语言的组件体系结构,可以让组件间相互通信。随着计算机网络的发展,COM进一步发展为分布式组件对象模型,这就是DCOM,它类似于CORBA的ORB,本文对此将不再做进一步的阐述。通过上面的讲述相信大家一定对ActiveX、OLE和COM/DCOM的关系有了一个清楚的了解。

备注

[编辑本段]

在编辑过程中,采用了部分机器翻译的内容。

特注

[编辑本段]

2008年中 ActiveX为微软十大垃圾软件榜首

以上就是关于Delphi深度探索-数据库明了的ActiveX控件全部的内容,包括:Delphi深度探索-数据库明了的ActiveX控件、关于ActiveX控件!、ActiveX是什么~~~有什么功能呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9624965.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存