zoukankan      html  css  js  c++  java
  • Delphi编写自定义控件以及接口的使用

    写给觉得自己编写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/

  • 相关阅读:
    Ftp、Ftps与Sftp之间的区别
    Previous Workflow Versions in Nintex Workflow
    Span<T>
    .NET Core 2.0及.NET Standard 2.0 Description
    Announcing Windows Template Studio in UWP
    安装.Net Standard 2.0, Impressive
    SQL 给视图赋权限
    Visual Studio for Mac中的ASP.NET Core
    How the Microsoft Bot Framework Changed Where My Friends and I Eat: Part 1
    用于Azure功能的Visual Studio 2017工具
  • 原文地址:https://www.cnblogs.com/kfarvid/p/1793219.html
Copyright © 2011-2022 走看看