如何重定向serverSocket的事件如onClientRead到自己的子过程中?(50分)

  • 主题发起人 主题发起人 winslow
  • 开始时间 开始时间
W

winslow

Unregistered / Unconfirmed
GUEST, unregistred user!
如何重定向serverSocket的事件如onClientRead到自己的子过程中?
 
serversocket.OnClientRead :=YourClientReadProc;


procedure YourClientReadProc(Sender: TObject;
Socket: TCustomWinSocket);
begin
//add your code here
end;
 
它提示:method pointer and regular procedure错误,这是什么原因?
 
你要在头里定义这个过程的,就在private的上面,然后下面的定义还要加formxx.Your...
我上面的只是点到为止,呵呵。。。


定义:
procedure YourClientReadProc(Sender: TObject;
Socket: TCustomWinSocket);

private //在这上面的地方定义

过程:
procedure TForm1.YourClientReadProc(Sender: TObject;
~~~~~~
Socket: TCustomWinSocket);
begin
//add your code here
end;
{ Private declarations }
 
好象没有这个必要[:D]
 
谢谢,现在编译没问题了,但运行时好象没有捕捉到事件,不知这又是为什么?
 
serversocket.OnClientRead :=YourClientReadProc;
上面这句话有没有在serversocket连接前执行??
我刚才试了一下,是可以的哦。
 
我在一个单元中动态创建,没有所属窗口,这有没有关系?
 
应该没关系啊,主要执行了就可以了。要不你贴一下你的代码看看。
 
我在另一个程序有所属窗口时试了确实可以
procedure MyReceiveData(Sender: TObject; Socket: TCustomWinSocket);

procedure TDbConnector.MyReceiveData(Sender: TObject; Socket: TCustomWinSocket);
var RecText:string;
begin
RecText:=Socket.ReceiveText;
showmessage('message:'+rectext);
Socket.Close;
end;

ServerSocket:=TServerSocket.Create(nil);
with ServerSocket do begin
Port:=10001;
ServerType:=stNonBlocking;
Socket.OnClientRead:=MyReceiveData;
open;
end;
 
不过声明只要是全局过程就可以,不一定要放在private之前
 
先把分加上,等一下我可能上不了网
 
>> Socket.OnClientRead:=MyReceiveData;
这句话有问题
把socket去掉:
OnClientRead:=MyReceiveData;
这样就可以了。
 
我试了一下,这样还是不行?
 
我也试了一下,没问题啊。
 
还是很感谢你
 
后退
顶部