DELPHI基础教程

第二章 Delphi面向对象的编程方法(四)

2.1.10.7 将库单元加入工程 

        将库单元加入工程是比较简单的。无论是您自己建立的库单元还是 Delphi

2.2 用 Delphi

        Delphi

2.2.1 什么是对象 

        一个对象是一个数据类型。对象就象记录一样,是一种数据结构。按最简单的理解,我们可以将对象理解成一个记录。但实际上,对象是一种定义不确切的术语,它常用来定义抽象的事务,是构成应用程序的项目,其内涵远比记录要丰富。在本书中,对象可被理解为可视化部件如按钮、标签、表等。

        了解对象,最关键的是掌握对象的特性。一个对象,其最突出的特征有三个:封装性、继承性、多态性。 

2.2.1.1 对象的封装性 

        对对象最基本的理解是把数据和代码组合在同一个结构中,这就是对象的封装特性。将对象的数据域封闭在对象的内部,使得外部程序必需而且只能使用正确的方法才能对要读写的数据域进行访问。封装性意味着数据和代码一起出现在同一结构中,如果需要的话,可以在数据周围砌上“围墙”,只有用对象类的方法才能在“围墙”上打开缺口。 

2.2.1.2 对象的继承性 

        继承性的含义直接而且显然。它是指把一个新的对象定义成为已存在对象的后代;新对象继承了旧类的一切东西。在往新对象中添加任何新内容以前,父类的每一个字段和方法都已存在于子类中,父类是创建子类的基石。 

2.2.1.3 对象的多态性 

        多态性是在对象体系中把设想和实现分开的手段。如果说继承性是系统的布局手段,多态性就是其功能实现的方法。多态性意味着某种概括的动作可以由特定的方式来实现,这取决于执行该动作的对象。多态性允许以类似的方式处理类体系中类似的对象。根据特定的任务,一个应用程序被分解成许多对象,多态性把高级设计处理的设想如新对象的创建、对象在屏幕上的重显、程序运行的其它抽象描述等,留给知道该如何完美的处理它们的对象去实现。 

2.2.1.4 通过 Delphi

      让我们结合 Delphi

      当您要建立一个新工程时, Delphi

unit Unit1; 

interface 

uses SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs;

type

TForm1 = class(TForm) { 窗体的类型说明开始}

private

{ Private declarations }

public

{ Public declarations }

end; { 窗体的类型说明结束} 

var

Form1: TForm1; { 说明一个窗体变量} 

implementation 

{$R *.DFM}  

end. 

        新的窗体类型是 TForm1

         假设您向窗体中加入了一个按钮部件,并对这个按钮建立了一个 OnClick

type

TForm1 = class(TForm)

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end; 

      现在 TForm1

       当您使用 Object Inspector 来改变对象 (

TColorBox=class(TForm); 

         并且在变量说明部分,会说明 ColorBox

2.2.2 从一个对象中继承数据和方法 

        前面的 TForm1

        一个比较特殊的对象是从一个范围较广或较一般的对象中继承下来的,它是这个特别对象的祖先,这个对象则称为祖先的后代。一个对象只能有一个直接的祖先,但是它可以有许多后代。 TForm

       用 F1

        在这个结构中所有的部件都是对象。部件类型 TComponent

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.

       如果 Edit1

Form2.Edit1.Color := clLime; 

而且需要把 Unit2

        一个对象的范围扩展到这个对象的所有后代。 TForm

2.2.3.2 重载一个方法 

        您可以重载 (Override)

2.2.4 对象公有域和私有域的说明 

        当使用 Delphi

        您可以在对象的 Public

2.2.5 访问对象的域和方法 

       当您想要改变一个窗体对象的一个域的某个属性,或是调用它的一个方法时,您必须在这个属性名称或调用方法之前加上这个对象的名称。例如,如果您的窗体上有一个编辑框部件,而您需要在运行中改变它的 Text

Edit1.Text := 'Welcome to Delphi';

同样,清除编辑框部件中选中的文本,可以调用 TEdit

Edit1.ClearSelection; 

        如果您想改变一个窗体对象中一个对象域的多个属性或调用多个方法时,使用 with

procedure TForm1.Button1Click(Sender:TObject);

begin

ListBox1.Clear;

ListBox1.MultiSelect :=True;

ListBox1.Item.Add('One');

ListBox1.Item.Add('Two');

ListBox1.Item.Add('Three');

ListBox1.Sorted :=Ture;

ListBox1.FontStyle :=[fsBold];

ListBox1.Font.Color :=clPurple;

ListBox1.Font.Name :='Times New Roman';

ListBox1.ScaleBy(125,100);

end; 

如果使用了 With

procedure TForm1.Button1Click(Sender:TObject);

begin

with (ListBox1) do

begin

Clear;

MultiSelect :=True;

Item.Add('One');

Item.Add('Two');

Item.Add('Three');

Sorted :=Ture;

FontStyle :=[fsBold];

Font.Color :=clPurple;

Font.Name :='Times New Roman';

ScaleBy(125,100);

end;

end; 

       使用 with

2.2.6 对象变量的赋值 

        如果两个变量类型相同或兼容,您可以把其中一个对象变量赋给另一个对象变量。例如,对象 TForm1

Form2 :=Form1;

         只要赋值的对象变量是被赋值的对象变量的祖先类型,您就可以将一个对象变量赋给另一个对象变量。例如,下面是一个 TDataForm

type

TDataForm = class(TForm)

Button1:TButton;

Edit1:TEdit;

DataGrid1:TDataGrid;

Database1:TDatabase;

TableSet1:TTableSet;

VisibleSession1:TVisibleSession;

private

{ 私有域说明}

public

{ 公有域说明}

end;

var

AForm:TForm;

DataForm:TDataForm;

       因为 TDataForm

AForm :=DataForm;

        这一点在 Delphi

procedure TForm1.Button1Click(Sender:TObject);

begin

end;

        您可以看到 TObject

       您可以使用保留字 is

procrdure TForm1.Memo1DragOver(SenderSource:TObject;X,Y:integer;

State:TDragState;var Accept:Boolean);

begin

Accept :=Source is TLabel;

end;  

        Source 参数也是 TObject

下面的 drag-and-drop

procedure TForm1.Memo1DragDrop(SenderSource:TObject;

X,Y:Integer);

begin

Memo1.Font := (Source as TLabel).Font;

end; 

         当您在这个事件处理过程中编写赋值语句时,开发人员并不知道用户会放入哪一个标签,只有通过参考这个标签的名称 (Source as TLabel) 用户才能知道,并把标签类型赋给 Memo1.TFont

2.2.7 建立非可视化对象 

        您在 Delphi

2.2.7.1 说明一个非可视化对象 

        下面,通过一个简单的例子讲述如何建立自己的非可视化对象:

        您可以用如下的方法,建立一个自己的 TEmployee

type

Temployee = class(TObject);

Name := String[25];

Title := String[25];

HourlyPayRate : Double;

function CalculatePayAmount:Double;

end; 

        在这种情况下, TEmployee

var

Employee : TEmployee; 

2.2.7.2 用 Create

        TEmployee

        建立一个对象的实例,需要调用 Create

Employee := TEmployee.Create; 

        Create 方法并没有在 TEmployee

2.2.7.3 撤销对象 

        当您使用完对象后,您应该及时撤销它,以便把这个对象占用的内存释放出来。您可以通过调用一个注销方法来撤销您的对象,它会释放分配给这个对象的内存。

        Delphi 的注销方法有两个: Destroy

         您可以用下列的语句释放用完的 Employee

Employee.Free; 

         和 Create

[目录] [上一页] [下一页]