请问如何重载TServerSocket的OnGetThread事件? (39分)

  • 主题发起人 主题发起人 xoenice
  • 开始时间 开始时间
X

xoenice

Unregistered / Unconfirmed
GUEST, unregistred user!
如题。各位可以给我一个例子吗?谢谢!
 
只能看到OnGetThread的参数列表
找不到其构造函数,如何重载??

找了半天也没有找到OnGetThread的构造函数,是不是没有公开啊。
而且,OnGetThread是个事件,不是方法,不知道怎么重载。

期待。。。
 
事件无法覆盖,但可以屏掉父类的事件,声明一个新的同名事件
TXXXServer = class(TServerSocket)
private
FOnGetThread:TGetThreadEvent;
procedure iGetThread(Sender: TObject; ClientSocket: TServerClientWinSocket; var SocketThread: TServerClientThread);
published
property OnGetThread:TGetThreadEvent read FOnGetThread write FOnGetThread;
...
end;

constructor TXXXServer.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
inherited OnGetThread = iGetThread;
end;

procedure TXXXServer.iGetThread(Sender: TObject; ClientSocket: TServerClientWinSocket; var SocketThread: TServerClientThread);
begin
....//你的代码
if Assigned(FOnGetThread) then
FOnGetThread(Sender,ClientSocket,SocketThread);
end;

其实编写合理的组件一般会写一个DoXXXX的虚方法,这样就不需要这么麻烦的屏蔽父类的事件.只需要覆盖DoXXXX方法就行了,你可以多看看源码,从中看看是否是这样,

DoXXXX(....);
if Assigned(FOnXXXX) then
FOnXXX(,...)



 
拜读大作,虽然不完全明白,但受益匪浅。
感激。
 
后退
顶部