Delphi之TComponent类

TComponent类

TComponent类直接由TPersistent派生。TComponent的独特特征是它的属性能够在设计期间通过ObjectInspector来控制,能够拥有其他组件。非可视组件也是从TComponent派生的,因此它们也继承了在设计期间可以被控制的能力。TComponent派生的非可视对象的典型例子是TTimer组件。TTimer组件是不可视组件,但它仍可以在组件面板上得到。TComponent定义了几个重要的属性和方法,在随后的段落中将加以描述。

1.TComponent的属性:

Owner:组件的拥有者

ComponentCount:组件所拥有的组件数目

ComponentIndex:组件在其拥有者列表中的位置。列表中第一个组件的该值为0

Components:一个属性数组,包含组件拥有的组件列表。列表中第一个组件的该值为0

ComponentState:该属性包含TComponentState类型组件的当前状态。(更详细的解释:

ComponentState属性
对应对象:所有组件。
声明:property ComponentState: TComponentState; 
功能:ComponentState属性用来描述组件的状态。 ComponentState属性在运行时是有效的,且它是只读型的。它的类型是TComponentState,被声明成为:TComponentState = set of (csLoading, csReading, csWriting, csDestroying, csDesigning, csAncestor, csUpdating, csFixups); TComponentState是一个标志集合,把它们组合在一起可以导出组件的状态,一些公用的标志包括以下:
csDesigning:Delphi环境是设计方式,因此可以编辑组件。
csReading:组件从一个流中读取它的属性值。
csWriting:组件将它的属性值写入一个流中。
组件在内部使用CompnentState属性,可以保证某些程序可以执行。因此,无需经常直接地访问ComponentState。)

ComponentStyle:组件的风格。可设为csInheritable或csCheckPropAvail,其意思参见在线帮助。

Name:组件的名称

Tag:一个整数,该属性没有确定的意思。组件编写者不能使用它,但应用程序编写者可以使用。因为该值为一整数类型,数据结构的指针(甚至于对象实例)可以通过它来区分。

DesignInfo:不要使用这个属性。它由窗体设计器使用。

2.TComponent的方法

TComponent定义了几个方法,可以拥有其他组件,可以在窗体设计器上被控制。TComponent定义了组件的构造器Create()。该构造器负责创建组件的实例并通过参数传递指定组件的拥有者。与TObject.Create()不同,TComponent.Create()是虚拟的。TComponent派生类要实现构造器,必须覆盖这个方法。虽然你能在组件类中声明其他的构造器,但在设计期和运行期基于流创建组件的实例时,VCL只能使用TComponent.Create()构造器。

TComponent.Destroy():析构器用于释放组件及其所有资源。

TComponent.Destroying():方法用于给组件及其所拥有的组件设置一个状态,表示它们正在被销除。

TComponent.DestroyComponents():方法用于析构组件。一般你不必直接使用这些方法。

TComponent.FindComponents():方法便于你查找只知道名字的组件。假设你知道主窗体中有一个叫Edit1的TEdit组件,当你想查找这个组件时,你可以通过执行下列代码来获取它的实例指针:
EditInstance := FindComponent('Edit');此例中,EditInstance是TEdit类型。如果没有找到,FindComponent()将返回nil。

TComponent.GetParentComponent():方法返回父组件的实例。如果该组件没有父,这个方法将返回nil。

TComponent.HasParent():返回一个Boolean值,表明组件是否有父。注意该方法与组件是否有拥有者无关。

TComponent.InsertComponent():方法增加一个组件,为调用该方法的组件所拥有;

TComponent.RemoveComponent():从调用该方法的组件中删除一个它拥有的组件。你一般不需要调用这些方法,因为组件的Create()构造器和Destroy()析构器会自动调用它们。

原文地址:https://www.cnblogs.com/spider518/p/1917527.html