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

原创 2002年04月11日 18:04:00

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

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

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

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

1.12

 

 

 

 

 

 

 

 

 

 

 

 

 


    新建一个程序,在窗体上放置一个TAXCalendar控件。再放上一个DataSource Table控件。设定DataSourceDatasetTable1,然后设定Table1DataBaseName 属性为DBDEMOSTableName 属性为EMPLOYEE.DB,最后设定Table1.Active属性为True

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

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

 

1.13

 

 

 

 

 

 

 

 

 

 


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

1.14

 

 

 

 

 

 

 

 

 

 

 

 


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

1.15

 

 

 

 

 

 

 

 

 

 

 

 

 


    创建数据明了的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框架。

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

 

1.16

 

 

 

 

 

 

 

 

 

 

 


    注意在Flags属性页有很多多选框,对于我们来说,只关心同数据绑定相关的选项。它们是BindableDisplay BindableDefault BindableImmediate BindableRequest Edit选项。

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

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

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

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

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

    Immediate Bindable当被标记时,所有的改变都会被通知,同时还需要设定bindableRequest Edit标记。

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

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

 

 

 

1.17

 

 

 

 

 

 

 

 

 

电子书下载:DELPHI深度探索(第二版)

下载:http://www.400gb.com/file/54803782
  • MaxWoods
  • MaxWoods
  • 2014年01月18日 16:19
  • 2695

Delphi2007 下安装ActiveX控件

此英文文章来自codegear官方网站,但是是讲在BDS2006 下如何安装,我在delphi 2007下用此方法,一样通过,原文如下 Description:How to import an Act...
  • lee576
  • lee576
  • 2007年09月03日 19:44
  • 3872

delphi中ActiveX 和 Web

http://book.77169.com/data/web5302/20050228/20050228__3692503.htmlActiveX 和 Web在Windows 操作系统下,有一个重要的...
  • leixg
  • leixg
  • 2010年05月13日 16:42
  • 3728

Delphi下的COM接口編程(ActiveX Library)

在較早的時候,我的博客里已經有關于COM編程的有關知識(http://hi.baidu.com/yueyun889/blog/item/53ad2c1208b6f950f919b8ee.html),不...
  • lailai186
  • lailai186
  • 2012年11月16日 14:18
  • 2989

delphi 10 lite安装 Activex控件的变通方法

delphi 10 lite 直到现在的v3.0还没有加入“Import a Type Library”,很多优秀的Activex控件自然无法使用。本人电脑中同时安装了delphi 7 和delphi...
  • fluky
  • fluky
  • 2007年07月07日 14:23
  • 1614

delphi实现web activex控件

目前在做一个项目,开发一个控件供给web使用,第一次开发Delphi ActiveX,记录开发过程。1、新建一个ActiveX Library工程。2、接着新建一个Type Library。3、现在新...
  • justit
  • justit
  • 2008年12月16日 15:51
  • 894

Delphi中彻底卸载ActiveX控件的方法(该方法同样适用于CBuilder)

最近为了做一个项目,尝试了很多皮肤控件,其中一个使用ocx。尝试完后希望能够彻底删除,可是从component->import ActiveX Control中删除后再ActiveX标签中还是能够找到...
  • binnygoal
  • binnygoal
  • 2014年04月07日 16:28
  • 2308

ActiveX控件在浏览器中的鼠标键盘事件处理方法

ActiveX控件开发人员如需正确处理在浏览器中的鼠标键盘事件,可首先参考一下潘爱民老师的《COM原理与应用》第12章:ActiveX控制,第392页。其中系统阐述了ActiveX控件与其容器程序的键...
  • colinchan
  • colinchan
  • 2010年04月22日 17:11
  • 4964

彻底删除Delphi中ActiveX面板中的第三方控件

打开Project|Options|Packages选中Borland user component 找到Borland user component,点Edit 点Yes...
  • luojianfeng
  • luojianfeng
  • 2016年05月06日 10:32
  • 438

工业仪表盘控件Iocomp ActiveX/VCL更新至v4.0.8 SP4

概述:Iocomp ActiveX/VCL是知名的工业仪表盘控件,被全球1000多家企业所使用。此次更新至v4.0.8 SP4,主要是更新全线产品对Embarcadero XE5等的支持,同时还修复了...
  • yeyeyi1989
  • yeyeyi1989
  • 2015年01月26日 10:09
  • 2217
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi深度探索-数据库明了的ActiveX控件
举报原因:
原因补充:

(最多只允许输入30个字)