2017-09-16 384 views
-3

如果我有一個指針集中到FormActivate(Sender: TObject); - MyPtr := @FormActivate; - 我如何與我選擇的發件人運行FormActivate。 我不明白如何添加發件人。德爾福正確使用指針

+0

如何在沒有發件人的情況下運行它? – melpomene

+2

這個問題還不清楚。 *發件人*是被激活的表單。你不選擇它;它是自動的。表單中已經存有一個指向事件的指針,所以你不需要一個。你究竟想要做什麼,以及你想要解決什麼具體問題?你爲什麼覺得你首先需要一個*指針專注於FormActivate *?似乎更像是一個XY問題,而不是一個真正的問題。你想要解決什麼問題,你認爲需要獲取指向事件處理程序的指針? –

回答

-1

在這種情況下,您不應該使用指針。我不認爲你甚至可以這樣做,因爲你需要表單實例和方法。 FormActivate插入到定義爲TNotifyEvent的OnActivate事件處理程序中:

TNotifyEvent = procedure(Sender:TObject)of object;

注:編譯器解釋爲需要實例的「對象」(mechnanism,因爲它應該是隱藏的)。

正確的做你想做的事(不確定你應該這樣做,但是嘿..)是用MyForm:TMyForm替換你的指針,然後調用: MyForm。 FormActivate(mySender);或者,您可以用MyEvent代替指針:TNotifyEvent,因此: MyEvent:= MyForm.OnActivate; 然後致電 MyEvent(mySender);

用這兩個示例中的任何內容替換mySender。

我希望這能爲你解決問題。

+0

程序不需要是表單的一個程序(可能是壞例子)。它是我有一個程序,它是由一個指針和像「發件人」的詳細信息我需要控制放入作爲其運行程序。史蒂夫你是在說我必須把這個指針當作一個事件嗎? – user2522301

+0

史蒂夫我有一個指針,我怎麼把它變成一個事件?MyEvent(MyPtr ^)(MySender)? – user2522301

+0

肯懷特我知道它的自動,但我不寫標準代碼的程序可能在* .DLL和許多其他地方。 – user2522301