捐助郴维网
感谢您对郴维网的支持,你的支持将是郴维网持续发展的动力!
二维码
×
当前位置:郴维网 >界面 > 正文
4 2020.02

Delphi组件开发(3) 组件注册

点击次数:1498 更新时间:2020-2-4 19:44:09  【打印此页

文中均以Delphi XE 10.3平台为例。

      在上一篇中,我们简单的实现了一个对Delphi自身的TEdit编辑框控件的一个扩充!但是我们并不能像Delphi自己的TEdit一样,能够在设计状态下进行设计,而是非得要自己手动创建控件,然后才能使用。这个虽然说也是组件,但是却失去了组件的可设计的方便性,仅仅可作为一个类库来使用。现在我就来介绍一下,如何让这个组件注册到IDE上,然后让你能够在设计状态下可以设计使用。

在讲注册组件的时候,我们需要先明白Delphi中的包的概念,这里我就不做说明了。在注册组件时,就需要一个设计期间的包文件。操作方法如下:

一:新建控件包

    1、File -> New -> Package - Delphi

    2、保存 File -> Save All 工程名为 TEditEx1.dproj ,这样包就建好了,如图:

        

 

 

二:使用 组件向导(New Component)创建TEdit组件模板 

    1、Component -> 选 New Component;

    2、选VCL for Delphi Win32 -> Next;

    3、 在 搜索框 输入edit快速找到TEdit 选中TEdit -> Next;

    4、设置 Class Name: 我这里设为TEditEx1

                 Palete Page: 选 Standard 选择卡,方便使用

                   Unit name: .pas单元保存的路径,选刚刚新建的包的目录,文件名也改为EditEx1.pas -> Next;

    5、选 Add unit to TEditEx1.dproj project (直接添加进刚刚的包中) -> Finish

    6、弹出保存对话框 保存 -> Yes。

 

EditEx1.pas 使用上一篇的代码,完整代码如下:

unit EditEx1;

interface

uses
  System.SysUtils, System.Classes, Vcl.Controls, Vcl.StdCtrls, WinApi.Windows, WinApi.Messages;

type
  TEditEx1 = class(TEdit)
  private
    { Private declarations }
  protected
    procedure WMNCPAINT(var msg: TWMNCPaint); message WM_NCPAINT;
  public
    { Public declarations }
  published
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TEditEx1]);
end;

procedure TEditEx1.WMNCPAINT(var msg: TWMNCPaint);
var
  DC: HDC;
  BorderBrush: HBRUSH;
  R: TRect;
begin
  inherited; // 必须继承Windows消息,让我们不处理的丢给Windows自己处理

  DC:= GetWindowDC(Handle);
  try
    SetRect(R,0,0,Width,Height);
    BorderBrush:= CreateSolidBrush(RGB(78,160,209));
    FrameRect(Dc, R, BorderBrush);//绘制默认的边线框
    DeleteObject(BorderBrush);
  finally
    ReleaseDC(Handle,DC)
  end;
end;

end.

 

关于Register组件注册过程

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TEditEx1]);
end;

这个Register就是组件注册的过程,包会自动调用的,注册过程中调用了RegisterComponents这个过程

这个过程的第一个参数指定要注册到IDE的哪个组件面板(如果IDE组件面板中没有你给定的这个值,Delphi会自动添加一个新的组件面板),参数二指定的是要注册到IDE的组件对象类数组

 

接下来编译安装 项目管理器 -> 右建点击 TEditEx1.bpl 项目 -> 点 Install 如图:

 

这样TEditEx1就被添加到了Standard选项卡中;但是TEditEx1还是不能正常工作的,会提示找不到EditEx1.pas单元文件,此时还需要把EditEx1.pas所在目录添加进Library path;添加方法:

Tools -> Options -> Language -> Delphi Options -> Library -> Library path 如图:

 

测试 可以直接在 项目管理器 -> 右建 ProjectGroup1 -> Add New Project (新建 Windows VCL Application) 用于测试

效果图:

 

组件图标更换

在IDE的组件面板上,可以发现TEditEx1和TEdit1两个组件的图标是一样的!其实也就是TEditEx1同时也继承的TEdit显示的图标,这个图标是可以换成别的图标的!下面我们再给这个组件换一个我们自己的图标,这个可以用Delphi7版本的ImageEditor构建一个dcr文件,新建一个dcr文件,然后添加位图,然后添加一个图片资源,然后修改名称为你组件的名字,比如这里叫TEditEx1,将图片修改成这个名字,然后保存到和EditEx1.pas相同的目录下保存名字为EditEx1.dcr,然后再编译一下包文件,再去看组件面板上的信息,就发现图标变了!这里,因为我用的是Delphi XE 10,所以没有那个ImageEditor的资源编辑器了,这里我就直接用Brcc32这个资源编译工具来生成dcr。

1、首先,我们新建立一个rc文件叫EditEx1.rc,用记事本打开写内容为:

TEDITEX1 BITMAP TEDITEX1.bmp

前面表示资源名称为TEDITEX1, BITMAP表示是位图资源,  TEDITEX1.bmp指定的就是位图的文件了

2、rc文件建立好了之后,运行命令brcc32 文件路径\EditEx1.rc

3、会在对应的文件夹下生成一个EditEx1.res的资源文件,我们将后缀名改为dcr,那就是我们需要的那个资源文件了,然后我们再修改TEditEx1.dpk的那个包文件代码

修改方法看图:

 

package TEditEx1;

{$R 'EditEx1.dcr'} // 此行为后面添加的
{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$IMPLICITBUILD ON}

requires
  rtl,
  vcl;

contains
  EditEx1 in 'EditEx1.pas';

end.

在最开头添加一行{$R 'EditEx1.dcr'},这个就表示包含进我们刚编辑完成的那个资源文件。

 

注意几点:

    1、图片为bmp、大小24 * 24、色深不大于 24位。

    2、资源名称必须大写且和组件类名称一致。如上面的: 资源名称 TEDITEX1, 组件类名称 TEditEx1

    3、EditEx1.dcr 和 EditEx1.pas 在同一目录下。

    4、关闭工程重新打开,你会发现EditEx1.dcr已列出到项目管理器。如下图

    5、重新编译,安装,即可了;如果图标没有变化可尝试重启电脑,重新编译,安装。

 

效果图:

 

提示
郴维网为您提供各类专业服务:
软件开发,电脑配件销售,WIFI路由器销售,上门电脑维修,上门安装系统,系统安装,软、硬件安装,电脑除尘清灰,显示器维修,WIFI安装调试,服务器维护,数据恢复,密码破解,网络布线,网络检修,打印机维修,打印机加碳粉,苹果电脑安装系统,苹果电脑安装双系统,监控安装维护,电脑外包,笔记本电脑维修,餐饮、美容行业软件安装 等。。。。。。
点击次数:1498 更新时间:2020-2-4 19:44:09  【打印此页
关键词推荐:郴州电脑城 郴州电脑维修公司 维修电脑公司 郴州软件开发 上门电脑维修 上门安装系统 笔记本电脑维修 郴州打印机维修 打印机加碳粉 电脑安装双系统 苹果电脑双系统 液晶显示器维修 联想笔记本维修 联想笔记本维修电话 戴尔笔记本维修电话 郴州戴尔笔记本维修 戴尔笔记本郴州维修点 华硕笔记本维修点 郴州华硕笔记本维修 郴州笔记本上网维修