2014-02-18 128 views
-1

我遇到了一個問題,我無法在Delphi中找到解決方法。如何在不創建對象的情況下收聽活動

我有一個彈出菜單,我有一個事件,當人選擇這個選項,我想要做的就是廣播這個事件的任何對象註冊表。

我面對的問題是,如果我有創建的彈出式菜單的實例,我可以註冊到事件,但如果我確實創建一個實例只是爲了聽,做這個事件仍然是不同的實例,我不會能聽到它。

如何將這個目標歸檔爲讓很多對象在Delphi中監聽一個對象的事件?

謝謝

+0

這是e發泄菜單項的選擇或菜單的彈出菜單? –

+0

你可以發佈一些代碼來顯示實例是不同的嗎? –

+0

我會創建一些示例代碼並在這裏發佈,但在Remy波紋管的重播中還有一些更多的解釋。多謝你們。 – Icaro

回答

3

Delphi本身不支持多播事件。你必須爲此創建自己的機制。最簡單的解決方案是將註冊對象/處理程序存儲在列表中,然後在觸發事件時遍歷該列表,並根據需要調用每個對象/處理程序。例如:

Simulating multicast events in Win32 Delphi

艾倫·鮑爾寫了一系列關於一個更先進的方式博客文章來實現在Delphi多播事件:

Multicast events using generics
Multicast Events - the cleanup
Multicast Events - the finale

Getting Allen Bauer's TMulticastEvent<T> working

+0

我的聲音該死,但我怎麼能從幾個不同的單位做到這一點。因此,例如我有由主創建的PopUp單元,並將boadcast發送到主窗體,然後在另一個對象內部有另一個對象,讓我們說rightPanel,並在comandGridPanel和Grid內部。如果我想讓我的事件一路走到網格,我需要將我的rightPanel註冊表添加到事件中,那麼它會爲comandGridPanel創建一個新事件,最後comandGridPanel會爲網格創建一個新事件?我認爲你的解決方案更加水平,我的問題更加垂直。 – Icaro

+0

感謝雷米優秀的迴應。我正在研究廣播(我們在Object-C中使用的名稱),而不是多播,所以我沒有得到其他東西,然後互聯網的東西。謝謝。 – Icaro

相關問題