zoukankan      html  css  js  c++  java
  • Delphi编写自定义控件以及接口的使用(做了一个TpgDbEdit)

    写给觉得自己编写Delphi很复杂的人,包括自己。

    Delphi自己写控件其实并不难,难的在于开发复杂的控件。(其实,编程,很多东西都是会了就不难,因此,我怕自己日后觉得自己写控件很难,特意在这记录自己写控件的过程,顺便也写下接口的使用)

    第一步:控件代码:

    下面是控件的一个Unit内容:

    复制代码
    代码
    unit pgdbedit;

    interface

    uses
      SysUtils, Classes, Controls, StdCtrls, CnEdit;

    const
      IID_pgDBConInterface='{88CEA70D-0506-4CC0-ABB0-4BDBFA0DDBCE}';


    type
      TdbType = (dbText, dbInteger, dbFloat, dbBit, dbTime, dbBlob); //文本类型

      IpgDBConInterface = interface(IInterface) //定义数据库操作控件的接口
        [IID_pgDBConInterface]
        //Stdcall是指示函数的参数入栈方式是从右到左
        function GetCanUpdate: Boolean;
        procedure SetCanUpdate(value: Boolean);
        property DB_canUpdate: Boolean read GetCanUpdate write SetCanUpdate; //是否更新数据。
      end;
      TpgDbEdit = class(TEdit, IpgDBConInterface)
      private
        { Private declarations }
        FCanUpdate: Boolean;
        function GetCanUpdate: Boolean;
        procedure SetCanUpdate(value: Boolean);
      protected
        { Protected declarations }
      public
        { Public declarations }
      published
        { Published declarations }
        property DB_canUpdate: Boolean read GetCanUpdate write SetCanUpdate; //是否更新数据。

    implementation

    function tpgdbedit.GetCanUpdate: Boolean;
    begin
      Result:=FCanUpdate;
    end;

    procedure tpgdbedit.SetCanUpdate(value: Boolean);
    begin
      FCanUpdate:=value;
    end;
    end.
    复制代码

    说明:这里没有RegisterComponents是因为打算创建2个包,一个是运行时的包以及设计时的包。

    第二步:创建注册单元:

    下面是这个单元的源码:

    复制代码
    代码
    unit pgControlsRegister;

    interface
    uses
      Classes;

    procedure Register;
    {* 控件、组件编辑器、属性编辑器注册过程}

    implementation

    uses
      pgdbedit;

    procedure Register;
    begin
      RegisterComponents('pgControls', [TpgDbEdit]);
    end;

    end.
    复制代码

    第三步:创建运行时的包:

    (文件->新建->其它->Package)

    在创建出来的Package中点上面的Add按钮,把第一步中的单元添加进去,然后点上面的Options按钮,在Usage Options中选择Runtime only。点击OK关闭掉Options,然后点Compile进行编译,系统会提示需要加入其它包的,点确认就行了,系统会自动添加必要的包。这样,运行时的包就创建完了。

    第四步:创建设计时的包:

    (文件->新建->其它->Package)

    在创建出来的Package中点上面的Add按钮,把第二步中的单元添加进去,然后点上面的Options按钮,在Usage Options中选择Designtime only。点击OK关闭掉Options,然后点Compile进行编译,系统会提示需要加入其它包的,点确认就行了,系统会自动添加必要的包。这样,设计时的包就创建完了。

    有关这两个包的概念,大家可以去:

    http://www.cnpack.org/showdetail.php?id=510&lang=zh-cn

    看下介绍,我都是看了介绍才知道,才会去这样弄。这里,我们也是安装设计时的包就行了。运行时的包不用管。

    原创作品出自努力偷懒,转载请说明文章出处http://www.cnblogs.com/kfarvid/

    http://www.cnblogs.com/kfarvid/archive/2010/08/05/1793219.html

  • 相关阅读:
    又爱又恨的eval
    http_build_query 这个方法会把值为NULL的给干掉
    allow_url_fopen设置
    纠结了下 B 和 STRONG标签区别
    Drupal 发邮件模块 drupal smtp 安装与设置
    php array_merge 和 两数组相加区别
    学历严格正相关于素质 Kai
    表语就是主语补语,靠 Kai
    一些真正有思想的up Kai
    光速不变且最大,换个思路想,非常合理,犹如天经地义【转载】 Kai
  • 原文地址:https://www.cnblogs.com/findumars/p/5951328.html
Copyright © 2011-2022 走看看