自己开发delphi的vcl
点击次数:50 次 发布日期:2008-11-09 08:38:39 作者:源代码网
|
源代码网推荐 1、 选择File | New,在对话框中选择component.在ancestor Type中选择你的控件是从那个类继承下来的,然后在 “Class Name”输入你的类的名称,在palette page 中选择要把你的控件放到哪一个页面中。输入完毕后点击ok,生成pas文件。 源代码网推荐 2、 在控件中添加属性: 源代码网推荐 首先,控件的属性要存储在一个类变量中,比如一个类型为string的变量,就可以存储在一个可以存储string的类变量,比如一个string,Tstringlist等。因此首先要在类的private区域声明一个私有的类变量,为了防止名字重复,一般在私有的类变量前加一个“F”。如 源代码网推荐 …………… 源代码网推荐 private 源代码网推荐 Fname:String 源代码网推荐 ………….. 源代码网推荐 我们假设这个属性的名字叫 FieldName,那我们就需要在published区域加上如下语句: 源代码网推荐 property FieldName:String read Fname write Fname; 源代码网推荐 这样的属性你可以访问,但是不在 “Object Inspector”中出现,如果想如此,应这样写: 源代码网推荐 property FieldName:String read Fname write Fname stored true; 源代码网推荐 这样的方法只实用于一些基本的数据类型,如integer, double ,String等等,对一些类,如Tstringlist,就不适合,对这些类应该怎么办呢?首先,还是要声明一个私有的变量存储该属性,以 Tstringlist为例子: 源代码网推荐 private Fnames:Tstringlist; 源代码网推荐 同时要写两个方法来对此类变量进行存取: 源代码网推荐 protected 源代码网推荐 Function getNames:Tstringlist; 源代码网推荐 Procedure setNames(value:Tstringlist); 源代码网推荐 在getName的函数体中,应这样写: 源代码网推荐 begin 源代码网推荐 result:=Fname; 源代码网推荐 end; 源代码网推荐 在setNames的方法中,应这样写: 源代码网推荐 begin 源代码网推荐 Fname.assign(value); 源代码网推荐 end; 源代码网推荐 在published中写: 源代码网推荐 property Names:Tstringlist read getNames write setNames; 源代码网推荐 同样如果想要这个属性在 “Object Inspector”中出现,要在后面加 stored true. 源代码网推荐 当然,你也可以通过其他类型的类对这个属性进行存取,比如通过Tlistbox来存取Tstringlist,因为类Tlistbox也包含有一个Tstringlist类。 源代码网推荐 3、 在控件中添加方法 源代码网推荐 添加方法比较简单,在published中声明方法,然后写方法体就可以。 源代码网推荐 4、 在控件中添加事件 源代码网推荐 添加事件之前,首先要声明一个事件类,如TnotifyEvent 源代码网推荐 private 源代码网推荐 MyEvent:TnotifyEvent; 源代码网推荐 声明事件 源代码网推荐 //published 源代码网推荐 property OnMyEvent:TnotifyEvent read MyEvent write MyEvent stored true; 源代码网推荐 然后在特定的条件下调用这个事件: 源代码网推荐 OnMyEvent(owner); 源代码网推荐 5、 写数据敏感的控件: 源代码网推荐 数据敏感的控件和普通控件基本相同,只是有一个类Tdatalink,Tdatalink有一个onDatachange事件,你可以声明一个事件,然后将事件指向Tdatalink的onDatachange事件,然后在事件中写下程序就可以实现数据敏感了。 源代码网推荐 FDataLink.OnDataChange := DataChange; 源代码网推荐 然后在Datachange中写程序。 源代码网推荐 6、 重载构造器和构析器。在public或published中写: 源代码网推荐 构造器: 源代码网推荐 constructor Create(Aowner:Tcomponent);override; 源代码网推荐 构析器: 源代码网推荐 destructor Destory;override; 源代码网推荐 在构造时对一些类变量进行初始化,有的需要调用类变量的类构造方法进行构造,如 源代码网推荐 Fnames:=Tstirnglist.create; 源代码网推荐 在构析时对类变量进行释放 源代码网推荐 Fnames.Free; 源代码网推荐 7、 对于一些界面有关的控件,如果有特殊的界面需要,需要重载onpaint事件,在重画时对自己的canvas进行操作,当然,也可以对别的类的canvas进行操作,比如写一个控件,在重画时对它的容器用一个画进行平铺处理。 源代码网推荐 8、 对于从哪些类继承,根据自己的需要选择,尽可能选择功能接近,已经实现部分功能的类,这样写比较方便。 源代码网推荐 以上是自己的一些心得,还望多多指正。 源代码网推荐 源代码网供稿. |
