2010-10-19 119 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