- Rongsen.Com.Cn 版权所有 2008-2010 京ICP备08007000号 京公海网安备11010802026356号 朝阳网安编号:110105199号
- 北京黑客防线网安工作室-黑客防线网安服务器维护基地为您提供专业的
服务器维护
,企业网站维护
,网站维护
服务 - (建议采用1024×768分辨率,以达到最佳视觉效果) Powered by 黑客防线网安 ©2009-2010 www.rongsen.com.cn
作者:黑客防线网安网站维护基地 来源:黑客防线网安网站维护基地 浏览次数:0本篇关键词:Delphi
|
假设您向窗体中加入了一个按钮部件,并对这个按钮建立了一个OnClick事件处理过程。再查看Unit1的源程序,会发现TForm1的类型说明部分如下:
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
现在TForm1对象有了一个名为Button1的域:它是您在窗体中加入的按钮。TButton是一个对象类型,Button1是Tbutton的一个实例。它被TForm1对象所包含,作为它的数据域。每当您在窗体中加入一个部件时,部件的名称就会作为TFom1的域加入到类型说明中来。在Delphi中,您所编写的事件处理过程都是窗体对象的方法。每当您建立一个事件处理过程,就会在窗体的对象类型中说明一个方法。
当您使用Object Inspector来改变对象(部件)的名称时,这个名称的改变会反映到程序中。例如,在Object Inspector中将Form1的Name属性命名为ColorBox,您会发现在类型说明部分,会将前文的TForm1改为:
TColorBox=class(TForm);
并且在变量说明部分,会说明ColorBox为TColorBox类型的变量,由Delphi自动产生的事件处理过程名称会自动改为TColorBox.Button1Click;但您自行编写的实现部分的代码却不会被自动修改。因此,如果您在改变Name属性前编写了程序,则您必须将事件处理过程中的对象名称进行改变。所以,原先的Form1.Color要改为ColorBox.Color。
2.2.2 从一个对象中继承数据和方法
前面的TForm1类型是很简单的,因为它只含有域Button1和方法Button1Click。但是在这个窗体上,您可以改变窗体的大小、加入或删除窗体的最大最小化按钮,或设置这个窗体为MDI界面。对于一个只包含一个域和方法的对象来讲,您并没有看到显式的支持程序。在窗体上单击鼠标或用Object Inspector的上端的Object Selector选中Form1对象,按动F1查阅它的在线帮助,您会在Properties和Method中找到它的继承到的全部属性和方法。这些是在TForm类型中说明的,TForm1是TForm的子类,直接继承了它所有的域、方法、属性和事件。例如窗体的颜色属性Color就是在TForm中说明的。当您在工程中加入一个新窗体时,就等于加入了一个基本模型。通过不断地在窗体中加入部件,您就自行定义了一个新的窗体。要自定义任何对象,您都将从已经存在的对象中继承域和方法,建立一个该种对象的子类。例如对象TForm1就被说明为对象TForm的子类,拥有一个窗体部件的基本属性或方法。只有当您在窗体中加入了部件或编写了事件处理过程时,Form1才成为您自己的类型。
一个比较特殊的对象是从一个范围较广或较一般的对象中继承下来的,它是这个特别对象的祖先,这个对象则称为祖先的后代。一个对象只能有一个直接的祖先,但是它可以有许多后代。TForm是TForm1类型的祖先,所有的窗体对象都是TForm的后代。
用F1查阅窗体的在线帮助时,您会发现TForm被称为component(部件)。这是因为所有的部件都是对象。
在这个结构中所有的部件都是对象。部件类型TComponent从TObject类型中继承数据和程序代码,并具有额外的可以用作特殊用途的属性、方法、事件,所以部件可以直接和用户打交道,记录它的状态并存贮到文件中等等。控制类型TControl从TComponent中继承而来,又增加了新的功能,如它可以显示一个对象。在上图中,虽然TCheckBox不是直接由TObject继承来的,但是它仍然有任何对象所拥有的属性,因为在VCL结构中,TCheckBox终究还是从TObject 中继承了所有功能的特殊对象,但它还有些自行定义的独到的功能,如可以选择记录状态等。
2.2.3 对象的范围
2.2.3.1 关于对象的范围
一个对象的范围决定了它的数据域、属性值、方法的活动范围和访问范围。在一个对象的说明部分说明的数据域、属性值、方法都只是在这个对象的范围中,而且只有这个对象和它的后代才能拥有它们。虽然这些方法的实际程序代码可能是在这个对象之外的程序库单元中,但这些方法仍然在这个对象的范围内,因为它们是在这个对象的说明部分中说明的。
当您在一个对象的事件处理过程中编写程序代码来访问这个对象的属性值、方法或域时,您不需要在这些标识符之前加上这个对象变量的名称。例如,如果您在一个新窗体上加入一个按钮和一个编辑框,并为这个按钮编写OnClick事件处理过程:
procedure TForm1.Button1Click(Sender:Tobject);
begin
Color :=clFuchsia;
Edit1.Color :=clLime;
end;
其中的第一行语句是为整个窗体Form1着色。您也可以编写如下:
Form1.Color :=clFuchsia;
但您可以不必加上Form1.,因为Button1Click方法是在TForm1对象的范围里。当您在一个对象的范围中时,您可以省略所有这个对象中的属性值、方法、域之前的对象标识符。但是当您编写第二个语句改变编辑框的底色时,因为此时您想访问的是TEdit1对象的Color属性,而不是TForm1类型的,所以您需要通过在属性前面加上编辑框的名称来指明Color属性值的范围。如果不指明,Delphi会象第一个语句一样,将窗体的颜色变成绿色。因为Edit1部件是在窗体中的,它是窗体的一个数据域,所以您同样不必指明其从属关系。
如果Edit1是在其他窗体中,那么您需要在编辑框之前加上这个船体对象的名称了。例如,如果Edit1是在Form2之中,那它是Form2说明的一个数据域,并位于Form2的范围中,那么您需要将第二句改为:
Form2.Edit1.Color := clLime;
而且需要把Unit2加入Unit1的uses子句中。
一个对象的范围扩展到这个对象的所有后代。TForm的所有属性值、方法和事件都在TForm1的范围中,因为TForm1是TForm的后代。您的应用程序不能说明和祖先的数据域重名的类型、变量等。如果Delphi显示了一个标识符被重复定义的信息,就有可能是一个数据域和其祖先对象(例如TForm)的一个数据域有了相同的名称。可以尝试改变这个标识符的名称。
我要申请本站:N点 | 黑客防线官网 | |
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479 |