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()析构器会自动调用它们。
Delphi之TComponent类的更多相关文章
- delphi TComponent类 2
来自:http://blog.csdn.net/lailai186/article/details/7442385 ------------------------------------------ ...
- delphi TComponent类(1)
来自:http://blog.csdn.net/lailai186/article/details/7442383 ------------------------------------------ ...
- 转:学习笔记: Delphi之线程类TThread
学习笔记: Delphi之线程类TThread - 5207 - 博客园http://www.cnblogs.com/5207/p/4426074.html 新的公司接手的第一份工作就是一个多线程计算 ...
- 学习笔记: Delphi之线程类TThread
新的公司接手的第一份工作就是一个多线程计算的小系统.也幸亏最近对线程有了一些学习,这次一接手就起到了作用.但是在实际的开发过程中还是发现了许多的问题,比如挂起与终止的概念都没有弄明白,导致浪费许多的时 ...
- 谈谈Delphi中的类和对象3---抽象类和它的实例
四.抽象类和它的实例 Delphi中有一个类称为是抽象类,你不能天真的直接为它创建一个实例,如 var StrLst: TString; begin StrLst:= TString.Create; ...
- Delphi中TStringList类常用属性方法详解
TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 先把要讨论的几个属性列出来: 1.CommaText 2.Delim ...
- Delphi Class of 类引用
Delphi Class of 类引用也就是类的类型,也可说是指向类的指针 Type TControlCls = Class of TControl;function CreateComponent( ...
- Delphi之TPersistent类 -----ASSIGN
Delphi之TPersistent类 TPersistent类 TPersistent类是由TObject直接派生的.凡是由TPersistent派生的对象都能够进行流操作.因为所有的组件都是由TP ...
- Delphi中线程类TThread实现多线程编程2---事件、临界区、Synchronize、WaitFor……
接着上文介绍TThread. 现在开始说明 Synchronize和WaitFor 但是在介绍这两个函数之前,需要先介绍另外两个线程同步技术:事件和临界区 事件(Event) 事件(Event)与De ...
随机推荐
- 【angularjs】使用angular搭建项目,获取dom元素
方法一:需要引入jq,否则会报angularJS1 Error: [jqLite:nosel](不建议使用) <div id="testID" class="tes ...
- 【vue】使用el-table时,实现批量选中效果
简单demo ①页面: <template> <el-table ref="multipleTable" :data="tableData3" ...
- robotframework日志中文乱码,编译提示‘utf-8’ codecxxxx。
1.需要设置robotframework的语系 2.设置完后,需要重启robotframework才生效.它比较特别,什么改变都要重启才生效
- 环境部署(八):jenkins配置邮件通知
完成基于jenkins的持续集成部署后,任务构建执行完成,测试结果需要通知到相关人员.这篇博客,介绍如何在jenkins中配置邮件通知的方法... 一.安装邮件插件 由于Jenkins自带的邮件功能比 ...
- centos 7 安装 MySQL 5.6
由于Centos7 默认数据库是mariabd,所以通过rpm安装MySQL需要卸载原有的Mariabd,再下载所有的依赖包比较麻烦且容易出错.通过yum的方式安装.yum其实是rpm的一个升级将所有 ...
- Luogu P3165 [CQOI2014]排序机械臂
先讲一下和这题一起四倍经验的题: Luogu P4402 [Cerc2007]robotic sort 机械排序 SP2059 CERC07S - Robotic Sort UVA1402 Robot ...
- 蓝牙speaker配对流程源码分析
这篇文章简单分析一下 蓝牙音箱配对流程.现在的音箱基本都支持security simple pairing.所以这里的流程基本上就是ssp的代码流程. 源码参考的是 Android 6.0 上面的bl ...
- 543A - Writing Code(二维动态规划)
题意:现在要写m行代码,总共有n个文件,现在给出第i个文件每行会出现v[i]个bug,问你在bug少于b的条件下有多少种安排 分析:定义dp[i][j][k],i个文件,用了j行代码,有k个bug 状 ...
- MySQL导出数据,并转存到Excel表格中
从数据库中导出数据的方法,这里就不提了,网上有很多方法,如果闲麻烦,可以看一下这个:mysql导出数据 其实使用最简单的下面这个语句: mysql > select * from demo in ...
- JUnit的配置及使用
一.安装插件JUnitGenertor V2.0 File->Setting->Plugins->在搜索框里输入JUintGenerator V2.0 二.导入JUnit相关jar包 ...