2014-10-09 53 views
1

我看着隨RAD Studio的XE6的所有例子,當我遇到位於自定義列表框的例子來自於這個Delphi代碼是什麼意思? (從customlistbox例子)

在Object Pascal> FireMonkey桌面> CustomListBox

試圖播放用它看看我可以做些什麼修改,我決定創建一個for循環來獲取每個對象的可見屬性或不可見屬性。但事情是,我無法理解下面這一行的含義。

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

它增加了一個onChange事件,但究竟如何?什麼是TNotifyEvent,是我們如何告訴編譯器創建一個新的事件?

謝謝。

+0

你從第二個例子拉什麼事件? – 2014-10-09 07:52:49

+5

你問了兩個問題。假設我可以回答一個而不是另一個。我該怎麼辦? – 2014-10-09 07:57:24

+0

第二個代碼片段似乎在一個事件中,它是否位於第一個片段中設置的onchange事件的主體中? – overactor 2014-10-09 10:12:57

回答

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()