2010-10-19 115 views
3

我想在運行時創建一個TClientsocket但我不能分配事件。德爾福:動態創建TClientSocket

我用

var 
    cs:TCLIENTSOCKET; 

procedure OnReadx; 
begin 

end; 

procedure intsok; 
begin 
    cs:=Tclientsocket.create(nil); 
    cs.OnRead:=OnReadx; 
end; 

它不工作。什麼是正確的方式來做到這一點?

回答

4

,而該事件聲明如下

TSocketNotifyEvent = procedure (Sender: TObject; Socket: TCustomWinSocket) of object; 

所以你寫的這些參數的函數,例如

procedure OnReadx(Sender: TObject; Socket: TCustomWinSocket); 

,並分配它像在你的代碼:

cs.OnRead:=OnReadx; 

最好的問候,

+1

真的,我不明白爲什麼有人爲-1設置了一個很好的答案。如果我的所有問題都得到-1,並不重要,但它應該存在一個機制,在得到-1之前提供一個原因。 opc0de,希望答案幫助你;) – RBA 2010-10-19 15:33:00

+0

我已經解決了它radu dar mersi;) – opc0de 2010-10-19 18:26:50

+0

我投了這個下來,當我撰寫評論,解釋爲什麼我不喜歡這個答案,我更仔細地閱讀答案並意識到答案並不像我原先想象的那麼嚴重,所以我在限期內收回了我的選票,所以沒有明顯的投票記錄。你自己看。但我不會投票,因爲它沒有提到子程序需要成爲一種方法,而不是一個獨立的程序。 – 2010-10-19 20:31:59

3

問題是,TClientSocket類要求事件處理程序將其各種事件作爲方法指針(它們必須屬於某個對象),而不是常規過程。

解決了!

+1

你會fin d對於所有類的事件屬性都是如此,而不僅僅是TClientSocket的。 – 2010-10-19 20:33:37