转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
组件制作之一(概念)         ★★★★

组件制作之一(概念)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1528 更新时间:2009/4/23 18:34:07

作为组件制作的开始,应该了解一些概念,我以为这些概念是非常重要的,将可以作为以后实践的理论基础。

 

一, 组件的简要层次结构。一般情况下,VCL的组件可以从Tcomponent为开始。其最明显的特征就是它的属性可以在设计时通过对象察看器来操纵,另外,他还能拥有其他组件。

从Tcomponent下,分出非可视组件和可视组件。

非可视组件如TOPenDialog,TTimer,TTable等,这些组件因为继承自Tomponent,所以也就继承了在设计时可以被操纵的特性。

可视化组件始自TControl,是它引入了可视化属性和方法,使继承自它的类都有了这些可视化特性。

TControl又分出两类组件类型:从TWinControl(窗口控件)自下的控件,和从TGraphicControl(图形控件)自下的控件。继承自TWinControl的控件将windows控件进行封装,所以拥有windows控件的很多特性,比如可以得到焦点,有唯一的句柄,用户可以通过发送消息与这些控件进行交互等。而继承自TGraphicControl的控件,也是可见的,但没有句柄,可以称之为图形控件,比如TLabel,TBevel,都是Delphi画出来的,并不占用系统资源。

二,属性 先看一个简单的属性定义:

     TsomeObj=class

          Private

            FCount:integer;

          Protected

            Procedure SetCount(value:Integer);

          published

       Property count:integer read FCount write SetCount default 0;//属性定义

          End;

    该属性从私有成员FCount读出值,而靠SetCount方法设置值到私有成员FCount。

属性的优势在于可以很直观进行读写,而又不同于私有成员。因为属性可以通过写访问方法来保护私有成员:

     Procedure TsomeBoj.SetCount(value:Integer);

          Begin

             If FCount<>value then

                 FCount:=value;

          End;

    其中属性定义中的Default 0并不是默认值(即对象察看器显示的值),默认值要在组件类的构造函数中设定。而Default有这样的作用,决定DFM文件中是否要保存该属性的值,比如上面为Default 0,即当该属性值为0时,则该属性不会被保存到DFM中,如果该属性值不为0,则该属性会被保存到DFM中。另外属性定义还有一个关键字为

  NoDefault,设置了这个关键字,比如

  Property count:integer read FCount write SetCount NoDefault;

  则无论它的值是什么,都会被写到DFM文件中。

 

属性可以有如下几种类型,下面只给出简单介绍,而这些类型的属性,会在组件制作时详细的运用:

简单类型属性:如上面定义的,加一个例子

       Property text:string read Ftext write SetText;

枚举类型属性:TEnumtype=(Enum1,Enum2,Enum3);

              FEnumtype:TEnumtype;

              Property Enumtype:TEnumtype read FEnumtype write FEnumtype;

        在对象察看器中看来就是下拉列框选择值。

集合类型属性:Tset=(set1,set2,set3);

              Tsets=set of  Tset;

              Fsets:Tsets;

              Property sets:Tsets read Fsets write Fsets;

在对象察看器中看来,就是列出几个选项分别设置真假。比如TForm的BorderIcons属性即是。

  对象类型属性:一个属性是一个对象,而这个对象必须派生自Tpersistent或者他之下的类,才能在对象察看器中可以展开它,并设置它里面的属性。

    数组类型属性:数组属性如果要在对象察看器中看见,需要有自己的属性编辑器(如果不想在对象察看器看当然就不用啦),是比较高级的组件,在后来的组件制作再来介绍,会更直观一些。这里只给出它的定义形式:

         property Selected[Index: Integer]: Boolean read GetSelected write SetSelected;

三,事件:事件其实是一种特殊的属性,他是指针类型,指向一个事件方法类型。当有特定的事件发生时,它就会关联到一段执行代码。

     下面以一个例子来讲解事件是怎么发生的。

          我们先定义一个鼠标点下事件的鼠标事件类型,它其实就是方法指针:

     type TMouseEvent = procedure (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) of object;

          又定义一个私有成员:鼠标事件类型的,即一个方法指针类型

          FonMouseDown:TMouseEvent

          最后定义一个属性:类要通过这个属性将外部的事件处理函数和FonMouseDown关联在一起:

          onMouseDown:TMouseEvent read FonMouseDown write FonMouseDown;

     当有鼠标左键点击的,系统会向窗口会发送WM_LBUTTONDOWN;消息

     Delphi 可以截获这个消息,如下定义消息函数:

          procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;

   &nbs

[1] [2]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台