这个Delphi代码是什么意思?(来自customlistbox示例)

这个Delphi代码是什么意思?(来自customlistbox示例),delphi,firemonkey,delphi-xe6,Delphi,Firemonkey,Delphi Xe6,我在查看RAD Studio xe6附带的所有示例时,发现了位于 对象Pascal>FireMonkey桌面>自定义列表框 尝试使用它,看看我能做些什么修改,我决定创建一个for循环,为每个对象获取visible或not属性。但问题是我不明白下面这句话的真正含义 107| Item.StylesData['visible.OnChange'] := TValue.From<TNotifyEvent>(DoVisibleChange); // set OnChange value 1

我在查看RAD Studio xe6附带的所有示例时,发现了位于

对象Pascal>FireMonkey桌面>自定义列表框

尝试使用它,看看我能做些什么修改,我决定创建一个for循环,为每个对象获取visible或not属性。但问题是我不明白下面这句话的真正含义

107| Item.StylesData['visible.OnChange'] := TValue.From<TNotifyEvent>(DoVisibleChange); // set OnChange value
107 | Item.StylesData['visible.OnChange']:=TValue.From(DoVisibleChange);//设置OnChange值
它添加了一个onChange事件,但具体如何添加?什么是TNotifyEvent,这就是我们告诉编译器创建新事件的方式吗


谢谢。

FireMonkey样式框架设计灵活,可扩展。它是在样式化控件层次结构的根处引入的。这将简要介绍和解释设计背后的理念

由于样式框架设计为支持许多不同类型的控件,因此显然需要灵活性和可扩展性。您可以看到这样的代码:

StylesData['visible.OnChange'] := ...
property StylesData[const Index: string]: TValue;
属性是一个,用字符串索引。声明如下:

StylesData['visible.OnChange'] := ...
property StylesData[const Index: string]: TValue;
TValue
类型是RTL中使用的现代变体类型。因此,我们通过使用变量类型,
TValue
,允许
StylesData
保存任何类型的对象,从而获得了灵活性。通过允许命名索引,我们具有可扩展性


因此,您所引用的控件允许您在其可见性发生变化时自定义其行为。它通过检查名为
visible.OnChange
的样式来实现,该样式应为类型。我们不能直接提供
TNotifyEvent
,我们必须将其包装在
TValue
中。因此调用
TValue.From()

您从哪个事件中提取第二个示例?您问了两个问题。假设我能回答其中一个,但不能回答另一个。我该怎么办?第二个代码段似乎在一个事件中,可能是在第一个代码段中的onchange事件集的主体中吗?@David:回答你能回答的那个,但不能回答另一个。;-)@鲁迪维尔图伊斯:这也是基于“问答”的概念,而不是“问答”。如果两个不同的人在同一篇文章中分别回答一个问题,你如何接受答案?不要在这里鼓励新用户做出不正确的行为,即使是开玩笑。他们可能不会注意到;-)。