Delphi在定义属性时允许存储关键字,如下所示:
property Fields: TIndexDefs read FFields write SetFields stored FieldsStored;
关键字的目的是什么?它的作用是什么?
答案 0 :(得分:23)
从我的Delphi 7帮助文件:
可选存储,默认和 调用nodefault指令 存储说明符。他们没有 对程序行为的影响,但是 控制是否保存 表格中已发布属性的值 文件。
必须遵循stored指令 by True,False,布尔名称 字段,或无参数的名称 返回布尔值的方法。 例如,
property Name: TComponentName read FName write SetName stored False;
如果某个属性没有存储指令, 它被视为存储为True 指定。
这听起来像是控制是否在表单的.DFM文件中存储与组件相关的属性。 (只是猜测)
答案 1 :(得分:6)
此关键字确定是否应将属性值保存在表单文件中;默认情况下为true
。例如,避免在.dfm
文件中保存大块二进制信息(例如,必须仅在运行时读取其内容的图像组件)可能很有用。
答案 2 :(得分:0)
stored指令采用布尔值:一种返回布尔结果,布尔类型字段引用或布尔类型常量表达式的方法。该属性的RTTI记录字段偏移量,方法引用或常数值,而Delphi的IDE使用此信息来决定是否从.dfm文件中省略该属性。
IDE会调用该方法,检查字段的值或使用常量布尔值,如果该值为False,则该属性不会保存到.dfm文件中。如果存储的值为True,则会发生默认行为,即,如果属性的值与默认值不同,则会存储该属性。
提示和技巧
存储的指令经常被误解。将存储设置为True不会强制Delphi将属性值存储在.dfm文件中。 True是存储指令的默认值。相反,您所能做的就是通过将storage设置为False来从.dfm文件中忽略该属性。
您可以在任何访问级别使用带有属性的存储,但这仅对已发布的属性有意义。
如果使用方法名称,则该方法可以是静态或虚拟的,但不能是动态的或消息处理程序。
字段引用可以是字段名称,记录成员或具有恒定索引的数组元素。字段引用必须具有布尔类型。
参考:https://www.oreilly.com/library/view/delphi-in-a/1565926595/re307.html