VCL组件之属性
属性(Properties)
属性是组件元素,它用来控制组件操作,很多组件都具有相同的属性,例如,所有可视化组件都有Top和Left属性,这两个属性不但在设计阶段控制组件在窗体上的位置,在运行时间也一样。所有的组件都有Owner属性,VCL用此属性来跟踪子窗体组件的父窗体或者跟踪拥有子组件的组件。
一、属性和Object Inspector
一个图形比数千字的文字说明强好多倍,默认情况下启动Delphi 7 ,会看到一个空白窗体和它的Object Inspector,如下图:
Tip
一般情况下我们不希望以开启Delphi7就自动创建一个空白Application,我们可以通过在Delphi7的快捷图标中设置,让它默认不创建空白窗体:
1、在Delphi7的快捷图标上点击右键菜单选择【属性】,打开属性对话框;
2、在其中的“目标”中最后输入“-np”,代表不创建工程。
当启动Delphi后,Object Inspector的大小要基于当前屏幕的分辨率,一般喜欢使Object Inspector达到屏幕允许的最大高度,这样一次就可以最大限度地查看属性。点击Properties标签,就会显示当前选中组件的属性,组件属性是按字母顺序排列的。
每个属性都有一个与之有关的基本数据字段,但属性本身不是类数据字段,改变属性常导致幕后的代码运行。
New Term
属性常系于存取方法(access methods),当属性被修改时,此存取方法就要执行。
二、改变属性值
在设计阶段,属性是可以改变的,并且在运行阶段它也是可以改变的。不论在哪种情况下,如果此属性有一个存取方法,当属性被修改时,此存取方法就会被调用和执行。您可以试着在Object Inspector中改变窗体TForm的Left属性并观察窗体在屏幕上的运动,这个就是一个在设计阶段改变属性的示例。
这就是VCL强大功能之一,在Delphi中使用它的方法为:可以不停地观看设计改变的屏幕结果,但不是所有的属性在设计阶段都能在窗体上显示可视变化。
要改变运行阶段属性,只需简单地给属性赋值就可以了。当给属性赋值时,VCL将幕后调用这个属性的存取方法。为了改变运行阶段Left属性,代码如下:
Left := 200;
就Left属性而言,VCL将移动和重画此窗体。
New Term
属性存取说明符(Property Access Specifiers),属性有两个存取说明符,在读取和修改属性时就会用它们,这就是读说明符(read specifier)和写说明符(write specifier)。
当读或写属性时,与之相关的方法就会自动被调用。在前面的例子中,当给属性赋值时,就在存取一个写说明符。实际上,VCL检查写说明符是否存在存取方法,如果存在,就会调用其存取方法,若存取方法不存在,VCL将给与此属性有关的数字段赋一个新值。
当引用一个属性时(把属性放在等号右边),就会存取读说明符:
X := Form1.Left;
在这种情况下,VCL调用读说明符来读取Left属性的值,在很多情况下,读说明符都会返回属性的当前值。
三、属性的性质
属性的属性是由组件编写者决定的,一个属性可以是只读的,一个只读属性只能被读取——它的值也可以被检查——但不能写,换句话说,可以获取属性的值,但不能改变它的值,在极少情况下,属性是只写的(一个只能写而不能读的属性在大部分情况下是没有意义的),他显然与只读属性是对立的。
最后,还有一些属性只能在运行阶段声明,一个唯运行阶段声明的属性只能在运行阶段存取而不能再设计阶段存取,因为唯运行阶段属性在设计阶段不能用,它在Object Inspector上不能显示,唯运行阶段属性也可以声明成只读属性,这意味着只有要运行阶段才能存取它,并且只能读。
四、属性类型
有些属性用VCL类的一个实例作为其基本数据字段,例如,Delphi组件选项板上的Standard标签中的Memo组件的Line属性,如下:
Note
省略号按钮表示此属性可以用属性编辑器编辑。通过点击省略号按钮或双击属性值,就可以带出属性编辑器。
Memo组件的Line属性是TStrings类的一个实例,当双击Value栏时,就会显示字符串编辑器,此时可以输入应用程序运行时想要在Memo组件中显示的字符串。
Font属性也是VCL类的一个实例,字体包括字体名称、颜色和字体大小等内容。注意在属性Font前面有一个加号,这表示这个属性有一些可分别设置的子属性。双击Font属性名,就会扩展开来,如下:
有些属性是集合,例如Font属性中的Style属性就是集合。Style前面也有一个加号,双击就会看到Style中的内容。一个集合可以是空集或者是包含一个或多个值。
有些属性可以是枚举类型的,即一个所有可能选择的清单。枚举类型和集不一样,只有一个选项可以选择,集可以包含空集或者任意数目的选择项。例如Cursor属性就是一个很好的例子,如下:
运行Delphi 7,新建一个Application,然后花些时间来体验一些不同组件和它们的属性。
属性规则
- 属性表现像一个类字段,并且可以像类字段一样存取。
- 属性不是类字段,它是特殊的类成员。
- 当写属性时(给属性赋值),属性经常调用一个存取方法,但并不总是遮掩个,这样一来此具体组件是怎么被写的。
- 公布的(published)属性通常有缺省值,一个组件第一次启用时,其缺省值就是Object Inspector中初始显示的值,并且如果没有特别的赋值,它就用这个值。
- 属性可以被设计成读/写、只读和只写。
- 唯运行阶段属性在Object Inspector中不显示,并且只能在运行阶段修改。
- 属性类型包括简单数据类型、字符串、数组、集合、枚举和VCL类对象。
posted on 2012-01-09 12:01 pchmonster 阅读(2203) 评论(3) 编辑 收藏 举报