Delphi中存储的关键字

Delphi中存储的关键字,delphi,Delphi,Delphi在定义属性时允许存储关键字,如下所示: property Fields: TIndexDefs read FFields write SetFields stored FieldsStored; 关键字的用途和作用是什么?来自我的Delphi 7帮助文件: 可选的存储、默认和 nodefault指令被称为 存储说明符。他们没有 对程序行为的影响,但是 控制是否保存文件 表单中已发布属性的值 档案 必须遵循存储指令 通过True、False,布尔值的名称 字段,或无参数 方法返回布尔

Delphi在定义属性时允许存储关键字,如下所示:

property Fields: TIndexDefs read FFields write SetFields stored FieldsStored;

关键字的用途和作用是什么?

来自我的Delphi 7帮助文件:

可选的存储、默认和 nodefault指令被称为 存储说明符。他们没有 对程序行为的影响,但是 控制是否保存文件 表单中已发布属性的值 档案

必须遵循存储指令 通过True、False,布尔值的名称 字段,或无参数 方法返回布尔值。 比如说,

property Name: TComponentName read FName write SetName stored False;
如果属性没有存储的指令, 它被视为存储为True 指定的


这听起来像是控制是否在表单的.DFM文件中存储与组件相关的属性。(只是猜测)

此关键字确定是否应将属性值保存在表单文件中;默认情况下为
true
。例如,避免将大块二进制信息保存在
.dfm
文件中(例如,必须仅在运行时读取其内容的图像组件)可能很有用。

存储指令采用布尔值:返回布尔结果的方法、布尔类型字段引用,或布尔类型的常量表达式。属性的RTTI记录字段偏移量、方法引用或常量值,Delphi的IDE使用这些信息来决定是否从.dfm文件中省略属性

IDE调用该方法、检查字段的值或使用常量布尔值,如果该值为False,则该属性不会保存到.dfm文件中。如果存储的值为True,则会发生默认行为,即如果属性的值与默认值不同,则存储该属性

诀窍

  • 存储指令经常被误解。将stored设置为True不会强制Delphi将属性值存储在.dfm文件中。True是存储指令的默认值。相反,您所能做的就是通过将stored设置为False,从.dfm文件中省略该属性

  • 您可以在任何访问级别使用与属性一起存储,但它仅适用于已发布的属性

  • 如果使用方法名称,则该方法可以是静态的或虚拟的,但不能是动态的或消息处理程序

  • 字段引用可以是字段名、记录成员或具有常量索引的数组元素。字段引用必须具有布尔类型


参考资料:

您的猜测是对的。:-)但是,它适用于所有组件,而不仅仅是视觉控件。将“视觉控件”更改为“组件”,我将投票支持这个答案。:-)“听起来像”?Cmw,这正是你引用的第一段文档中所说的。无需猜测。@Ken:changed=]@Rob:Yes这正是它所说的,但我没有测试它的实际功能。@KenWhite,@Uli-存储的关键字可以应用于任何组件,但只有当它所应用的属性“已发布”时才有意义。看看我的答案。既然只为可视组件发布
属性是有意义的,那么结果是……您使用的是哪个版本的Delphi,文档中没有描述它?@RobKennedy,您是否尝试过在Delphi 7之后使用任何Delphi版本的文档?(…是的,这个问题是修辞性的)@SlashV,Delphi 7帮助文件中的措辞与相同。“bash Delphi的文档”游戏已经过时了。如果你在这个话题上没有什么建设性的建议,请不要提反问。说到老问题,你三年半前回答的问题不是修辞性的。@RobKennedy,令人惊讶的是,我认为你的评论特别“缺乏建设性”,但我承认我上了“击打德尔福博士”的圈套。然而关于这些:我的最新版本是2010年,帮助系统太糟糕了,一点也不好笑。因此,我很欣赏关于stackoverflow的答案,因为我使用的是XE7。如果它在文档中,我就找不到它了。upvote提供了一个实际的示例,其中存储的内容非常有用!