Delphi 编写ActiveX控件(OCX控件)的知识和样例

Delphi 编写ActiveX控件(OCX控件)的知识和样例

分类: Delphi COM编程技术 2011-09-26 14:13 402人阅读 评论(0) 收藏 举报 程序员

delphipascalwindowsimportinternet编程编程

目录(?)[+]windows

  1. 一ActiveX应用状况简介数组

  2. 二ActiveX控件的相关知识浏览器

  3. 三快速开发ActiveX控件框架

  4. 四开发实例编辑器

  5. 五小结工具

1、ActiveX应用状况简介:

                         ActiveX控件也就是通常所说的OCX控件,它是 ActiveX技术的一部分。ActiveX是微软公司推出的基于组件对象模型COM的技术,包括对Windows 32位应用编程接口(Win32 API)和组件对象模型的一系列扩充和加强,目标是把计算机桌面环境与因特网环境集成起来,同时保护在Windows技术中现有的开发投资。微软的 ActiveX技术根本上就是修改过的OCX技术,使它可以跨越Internet,主要是使用WWW来传递控件。
             ActiveX控件能够被集成到不少支持ActiveX的应用当中去,或者直接用来扩展应用的功能,这些支持ActiveX的应用包括C++ Builder、Delphi、Visual dBASE、 Visual Basic、Visual C++、Internet Explorer、Netscape Navigator等。ActiveX控件还可使用在因特网上,在网页上使用它来发布信息、处理与用户的交互,可是须要使用支持ActiveX的浏览器才能阅读这些网页。目前已经开发出来的ActiveX控件愈来愈多,因为ActiveX控件具备很好的特性,咱们能够在编程的时候选择使用合适的控件来加快本身的应用开发。能够不夸张地说,ActiveX控件是Windows平台编程必不可少的法宝。
                    使用ActiveX控件是相对比较简单的。可是,开发ActiveX控件并非一件简单的事情,必需要熟悉而不仅是了解ActiveX技术才能开发出好的ActiveX控件。而COM、OLE等ActiveX技术对于通常的程序员来讲,是比较复杂难懂的。因此,ActiveX控件的开发者通常都是“老鸟”级别的程序员。
                  可是若是您有了Inprise公司的Borland Delphi,那又另当别论了。Delphi做为Windows平台上最优秀的程序开发工具之一,为ActiveX控件的开发提供了强有力的支持,让您轻松地开发ActiveX控件。Delphi的开发者仅仅须要了解一些ActiveX控件的简单知识,就可使用Delphi提供的工具来快速开发本身的 ActiveX控件。本文详细介绍了利用Delphi所提供的工具来快速开发ActiveX控件的技巧。开发工具

2、ActiveX控件的相关知识

        要开发ActiveX控件,咱们先得简单了解一下ActiveX控件的一些相关知识。在Delphi中,一个ActiveX控件由以下几个部分组成: VCL(可视化构件库)控件、属性、方法、事件,以及一个或者多个相关的类型库,其中每一个部分都有各自的做用。ui

 

如今对每一个部分介绍以下:

  一、VCL构件

        在Delphi中,一个ActiveX控件是由一个或者多个VCL构件通过包装之后获得的。因此,要使用Delphi来开发ActiveX控件,必须先得开发出或者选择要进行包装的VCL构件。也正是因为这个缘由,咱们能够将Delphi里大量优秀的VCL构件包装成ActiveX控件,从而能够在别的不可以直接使用VCL构件的开发工具(如Visual Basic、Visual C++)里也可以使用到这些控件啦!
        可是,在Delphi里能够用来作ActiveX控件的VCL构件必须是TWinControl的后代。若是想用一个TGraphiControl的子类作ActiveX控件,在大多数状况下只须要把它的基类变为TCustomControl便可。有的VCL构件是被注册成非ActiveX控件的,例如EditControl,这些控件也不能作ActiveX控件。

 

        二、类型库

        类型库包含了控件的类型定义信息,提供了比接口更多的详细信息,是控件向它的宿主程序提供服务信息的一种途径。类型库的目的是为其余应用编程工具提供关于它包含的构件对象的信息。开发ActiveX控件时,Delphi把类型库信息存入一个.TLB文件中及一个对应的Pascal文件(.TLB文件的Pascal语言版本),编译时类型库将做为资源链入DLL或者EXE等中。

类型库的元素包括:
           (1)类型库信息:包括类型库的整体信息和特征、当前类型库引用的其余类型库;
           (2)构件类:表明整个ActiveX控件,包含了提供给客户应用的接口;
           (3)接口属性和方法、事件;
           (4)枚举类型:一种用做数据类型的相关常量,能够用在类型库的其余地方定义属性和方法。

     Delphi提供了一个类型库编辑器,用于观察或修改类型库,可使用它来增长、修改、删除类型库的各类元素。类型库的界面上能够看到,左边是一个树形结构,各类元素的成员做为子节点出现;右边是根据左边所选中的元素类型显示不一样的页签,能够对该元素的一些属性进行编辑。

 

  三、属性、方法和事件

         VCL构件的属性、方法和事件天然就变成为ActiveX控件的属性、方法和事件。控件的属性,例如颜色、标签等;控件的方法是请求控件执行某些动做;事件则是控件给宿主程序的一个通知,发生了一些事情。 

      四、属性页

       ActiveX控件所带的属性页可让控件的使用者查看和修改控件的属性。您能够把几个属性捆绑在一个属性页上,也能够只为一个属性提供一个属性页。

 

3、快速开发ActiveX控件

        下面就让咱们来使用Delphi具体作一个ActiveX控件。
        假设咱们如今面临的问题是,在使用Visual C++(VC)开发一个应用的时候,须要使用一个Grid控件来处理界面的事情,而使用VC所提供的FlexGrid控件又很麻烦,发现Delphi里的 TStringGrid构件很是合适。可是TStringGrid是Delphi里的VCL构件,又不能直接被VC使用,怎么办呢?不用愁,咱们只要把 TStringGrid包装成为VC可使用的ActiveX控件就能够解决这个问题了。

Delphi为ActiveX控件的开发提供了两个向导:
  1>、ActiveX控件向导可让你把一个VCL构件包装成为一个ActiveX控件。下面将会使用到这个向导。
  2>、ActiveForm向导则能够把几个VCL构件包装成为一个ActiveX控件或者开发一个完整的ActiveX应用。

4、开发实例:

在Delphi当中把TStringGrid包装成一个ActiveX控件的主要步骤:

一、  点击【File】—>【New】—>【Other】菜单项,打开【New Items】,选择【ActiveX】;
二、  选择【ActiveX Library】选项卡,点击ok,建立工程。
三、  点击【File】—>【New】—>【Other】菜单项,打开【New Items】,选择【ActiveX】;
四、  选择【ActiveX Control】选项卡,点击ok,打开【ActiveX Control Wizard】窗口;
五、  在【VCL Class Name】组合框中选择‘VCL’类(如TStringGrid),单击Ok;
六、  添加代码;
七、  运行程序,生成ocx文件。
八、在Delphi中单击【Component】—>【Import ActiveX Control】菜单项,打开【Import ActiveX】窗口,在窗口中点击【Add】,而后选择ocx文件,而后单击Install按钮安装组件。若是成功,在ActiveX组件页中将显示该组件。

 

一、首先,要启动ActiveX控件向导,建立ActiveX项目

        首先,要启动ActiveX控件向导,选择File菜单里的New命令,在弹出的对话框里选择ActiveX页签,而后双击ActiveX Control图标便可。向导中的第一个域要求选择一个要进行包装的VCL构件,点击选择TStringGrid。其余几个域取缺省值便可,若是须要包含版本信息等其余信息,也能够选上。点击OK按钮,向导将生成一个Delphi的ActiveX控件开发项目 StringGridXControl1,包括如下几个的文件:

1.     一个ActiveX项目文件(dpr后缀名),包含了启动、初始化一个ActiveX控件所须要的代码。一般是不须要修改这个文件的。

2.     一个类型库文件(tlb后缀名),定义和实现了ActiveX控件向外所提供的接口、属性、方法和事件。Delphi专门为这个文件提供 了一个Pascal版本的文件(tlb扩展名),并且自动维护这两个文件的一致性。

3.     一个ActiveX实现的文件(Pas扩展名),使用了Delphi ActiveX框架(DAX)定义和实现了这个ActiveX控件,具体实现类型库里定义的接口。这个文件是咱们常常须要修改的。DAX是Delphi对ActiveX控件的COM规约的实现方式。

4. 若是选择了包括一个“关于”对话框的话,还有一个对应的对话框实现文件。


          Delphi的ActiveX控件向导根据所包装的VCL构件的属性、方法和事件生成了ActiveX控件相应的属性、方法和事件。可是它没有把 VCL构件使用非OLE类型(如集合、数组等)的属性、方法和事件转换过去。例如,TStringGrid的Options属性是集合类型的, RowHeights是数组类型的,在控件向导所生成的属性中就没有这些属性。可是有时候恰恰这些属性、方法和事件是很重要的,这时就须要手工添加一些属性、方法和事件!

 

二、在ActiveX控件中添加一个属性和实现的方法:

         如今为这个ActiveX控件添加一个BRowSelect属性,这个属性原本是TStringGrid的Options属性的子属性,控制Grid是否处于行选中状态。在StringGridXControl1项目里打开ActiveX实现文件StringGridImp1.pas,选择【Edit】菜单里的【Add To Interface】命令(注意:只有打开了实现文件,这个命令才能使用),Delphi将弹出增长接口对话框。在对话框里的Interface项选择Properties/Methods-IStringGridX,而后在Declaration里写入BRowSelect属性的声明(若是你选中了对话框里的Syntax Helper选项,Delphi将随时提示你应该输入的内容):Property BRowSelect:WordBool;点击OK后,这个属性的相关信息将自动加入到控件的实现文件、类型库文件和对应的Pascal文件中。由于控件的接口是双向的,因此在Pascal文件里使用了读和写两个方法来实现控件的属性。


1>、Delphi自动在类型库里加入了如下声明:
       
property BRowSelect: WordBool read Get_BRowSelect write Set_BRowSelect;

  这说明了:对于BRowSelect这个属性,有一个读方法Get_BRowSelect,一个写方法Set_BRowSelect。Delphi自动在控件的实现文件里加入了对BRowSelect属性的读和写访问方法的声明和实现:
        function Get_BRowSelect: WordBool; safecall;
        procedure Set_BRowSelect(Value: WordBool); safecall;
        这时候这两个方法的实现体是空的,必须得本身填入具体实现的代码:

2>、在实现文件中编写代码

  function TStringGridX.Get_BRowSelect: WordBool;
  begin
   //如下代码由本身根据须要编写,得到如今是否处于行选中状态
   with FDelphiControl do
       Result := goRowSelect in Options ;
  end;

  procedure TStringGridX.Set_BRowSelect(Value: WordBool);
  begin
   //如下代码由本身根据须要编写,设置行选中状态
     with FDelphiControl do
     begin
       if Value then

                   Options := Options + [goRowSelect]
       else

                   Options := Options - [goRowSelect];
     end;
  end;

 

三、生成ActiveX控件(OCX控件)

       这时候,使用类型库编辑器来查看类型库,能够看到新增长的BRowSelect属性。好了,作好了前面这些工做之后,选择Project菜单的Build StringGridXControl1命令便可生成咱们所须要的ActiveX控件。在项目的目录下,咱们能够找到 StringGridXControl1.ocx这个文件,这个就是咱们的ActiveX控件啦!

 

四、把ActiveX控件(OCX控件)注册到系统中

         1>、在Delphi中单击【Component】—>【Import ActiveX Control】菜单项,打开【Import ActiveX】窗口,在窗口中点击【Add】,而后选择ocx文件,而后单击Install按钮安装组件。若是成功,在ActiveX组件页中将显示该组件。         

         2>、  把它拷贝到Windows 9x的System目录或者Windows NT/2000的System32目录里面。在DOS命令行状态中,运行命令:regsvr32.exe c:\winnt\system32\alasunsmscon.ocx (regsvr32 StringGridXControl1.ocx)在系统中注册这个StringGridX控件。

         3>、在Delphi中,打开建立该ActiveX控件的工程(*.dpr)文件,而后选择Run->Register ActiveX Server.

注意,以上第2种方法和第3种方法操做只是向Windows消息系统注册了该ActiveX控件,可是并无将其添加到Delphi的VCL库中。还没法在其它程序中调用。咱们还须要进行第1中方法中的操做。若是已经注册完毕就能够在Import ActiveX中查找,若是没有就须要点击【Add】充文件的路径添加。

5、小结

               相似的咱们还能够往ActiveX控件里加入更多的属性。还能够往ActiveX控件加入新的方法、事件,加入的方法与加入属性相似。并且加入之后,Delphi也会自动往相应的文件中加入对应方法和事件的声明和实现,具体的实现体还得本身编写,这里再也不多说。       咱们能够注意到,Delphi自动生成了把VCL构件包装成ActiveX控件所需的包装代码。咱们为ActiveX控件增长新的属性、方法和事件的时候,只须要在接口方法的实现里把ActiveX控件的数据与VCL构件的数据联系起来,或者使用VCL构件的方法来完成ActiveX控件的行为,而基本上不须要关心编写一个ActiveX控件的具体细节,例如COM规约等。       前面提到,还能够为ActiveX控件添加定制的属性页。这里没必要专门添加新的属性页,由于大多数支持ActiveX的IDE编程环境已经为每一个ActiveX控件提供了一个包含全部属性的属性页了,咱们使用这个属性页便可。          因为有了Delphi对开发ActiveX控件强有力的支持,咱们基本不费什么功夫就很快获得了一个新的ActiveX控件。Delphi让使用它来开发ActiveX控件的开发人员把注意力集中到了做为ActiveX控件基础的VCL构件上,而没必要过多地关心ActiveX控件的细节,因此让对 ActiveX技术不是太熟悉的开发者也可以享受到开发ActiveX控件的乐趣,并且也大大丰富了在VC、VB里开发可以利用的控件。

相关文章
相关标签/搜索