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

时间:2014-10-09 07:12:16

标签: delphi firemonkey delphi-xe6

当我遇到位于

的自定义列表框示例时,我正在查看RAD Studio xe6附带的所有示例

对象Pascal> FireMonkey桌面> CustomListBox

尝试使用它并看看我可以做什么修改,我决定创建一个for循环来获取每个对象的可见或不属性。但事情是,我无法理解以下行的实际含义。

107| Item.StylesData['visible.OnChange'] := TValue.From<TNotifyEvent>(DoVisibleChange); // set OnChange value

它添加了一个onChange事件,但究竟如何呢?什么是TNotifyEvent,我们如何告诉编译器创建一个新事件?

感谢。

1 个答案:

答案 0 :(得分:1)

FireMonkey样式框架设计灵活且可扩展。它是在样式化控件层次结构TStyledControl的根部引入的。这个article简要介绍和解释了设计背后的哲学。

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

StylesData['visible.OnChange'] := ...

StylesData属性是array property,用字符串索引。声明如下:

property StylesData[const Index: string]: TValue;

TValue类型是整个RTL中使用的现代变体类型。因此,我们通过允许StylesData使用变体类型TValue来保存任何类型的对象,从而获得灵活性。我们通过允许命名索引具有可扩展性。

因此,您引用的控件允许您在其可见性更改时自定义其行为。它通过检查预期为TNotifyEvent类型的名为visible.OnChange的样式来实现。我们无法直接提供TNotifyEvent,我们必须将其包装在TValue中。因此呼叫TValue<TNotifyEvent>.From()