当前位置:系统之家 > 技术开发教程 > 详细页面

第109章 Delphi自定义部件开发(4)

第109章 Delphi自定义部件开发(4)

更新时间:2022-08-26 文章作者:未知 信息来源:网络 阅读次数:

19.3.2 创建图形部件 

  图形控制是一类简单的部件。因为纯图形部件从不需要得到键盘焦点,所以它没有也不要窗口句柄。包含图形控制的应用程序用户仍然可以用鼠标操作控制,但没有键盘界面。

  在本例中提供的图形部件是TShape。Shape部件位于Component Palette的Additional页。本例中的Shape部件有所不同,因此称其为TSampleShape。

  创建图形部件需要下列三个步骤:

  ● 创建和注册部件

  ● 公布(publishing)继承的属性

  ● 增加图形功能 

  19.3.2.1 创建和注册部件 

  每个部件的创建都从相同的方式开始,在本例中如下:

  ● 建立名为Shapes的部件单元

  ● 从TGraphicControl 继承,将新部件称为TSampleShape

  ● 在Component Palette的Samples页上注册TSampleShape 

  unit Shapes 

  intertace 

  use SysUtils, WinTypes, WinProcs, Messages, Classes,

  Graphics,Controls,Forms; 

  type

  TSampleShape=class(TGraphicControl)

  end; 

  implementation 

  procedure Register;

  begin

  RegisterComponents('Samples',[TSampleShape]);

  end; 

  end. 

  19.3.2.2 公布继承的属性 

  一旦决定了部件类型,就能决定在父类的protected部分声明哪些属性和事件能为用户可见。TGraphicControl已经公布了所有作为图形控制的属性,因此,只需公布响应鼠标和拖放事件的属性。 

   type

  TSampleShape=class(TGraphicControl)

  published

  property DragCursor;

  property DragMode;

  property OnDragDrop;

  property OnDragOver;

  property ONEndDrag;

  property onMouseDown;

  property onMouseMove;

  property onMouseup;

  end; 

  这样,该Shape控制具有通过鼠标和拖放与用户交互的能力。 

  19.3.2.3 .增加图形能力 

  一旦你声明了图形部件并公布了继承的属性,就可以给部件增加图形功能。这时需要知道两点:

  ● 决定画什么

  ● 怎样画部件图形 

   在Shape控制的例子中,需要增加一些能使用户在设计时改变形状的属性。 

  1. 决定画什么

  图形部件通常都具有改变外观的能力,图形控制的外观取决于其某些属性的结合,例如Gauge控制具有决定其形状、方向和是否图形化地显示其过程的能力。同样,Shape控制也应有决定显示各种形状的能力.

  给予Shape控制这种能力,增加名为Shape的属性。这需要下列三步:

  ● 声明属性类型

  ● 声明属性

  ● 编写实现方法 

  ⑴ 声明属性类型

  当声明一个用户自定义类型的属性时,必须首先声明属性类型。最普通地用于属性的自定义类型是枚举类型。

  对Shape控制来说,需要声明一个该控制能画形状的枚举,下面是枚举类型的声明: 

  type

  TSampleShapeType=(sstRectangle, sstSquare, sstRoundRect,

  sstRoundSquare, sstEllipse, sstCircle);

  TSampleShape = class(TGraphicControl)

  end;  

  这样,就可以用该类型来声明属性。

  ⑵ 声明属性

  当声明一个属性时,通常需要声明私有域来保存属性值,然后描述读写属性值的方法。

  对于Shape控制,将声明一个域保存当前形状,然后声明一个属性通过方法调用来读写域值。 

  type

  TSampleShape=class(TGrahpicControl)

  private

  FShape: TSampleShapeType;

  procedure SetShape(value: TSampleShapeType);

  published

  property Shape: TSampleShapeType read FShape write SetShape;

  end; 

  现在,只剩下SetShape的实现部分了。

[1] [2] [3]  下一页

温馨提示:喜欢本站的话,请收藏一下本站!

本类教程下载

系统下载排行