dll文件中如何处理动态创建控件的事件?(100分)

  • 主题发起人 主题发起人 simon.yeah
  • 开始时间 开始时间
S

simon.yeah

Unregistered / Unconfirmed
GUEST, unregistred user!
library Project2;

uses
SysUtils,
Classes,
scktcomp,
dialogs;

type
Tmysocket=class(Tobject)
client:Tclientsocket;
procedure c_connect(Sender: TObject; Socket: TCustomWinSocket);
end;

procedure Tmysocket.c_connect(Sender: TObject;Socket: TCustomWinSocket);
begin
showmessage('nihao');
end;

var
mysocket:Tmysocket;

{$R *.res}

begin
mysocket:=Tmysocket.Create();
mysocket.client:=Tclientsocket.Create(nil);
mysocket.client.ClientType:=ctnonblocking;
mysocket.client.Address:='127.0.0.1';
mysocket.client.Port:=80;
mysocket.client.Active:=true;
mysocket.client.OnConnect:=mysocket.c_connect;
end.
为什么连接上服务端时mysocket.client.OnConnect事件没有响应执行mysocket.c_connect过程,有哪位高手帮忙解决下!!
 
看看你的代码顺序:
mysocket.client.Active:=true;
mysocket.client.OnConnect:=mysocket.c_connect;

你是Active之后才给OnConnect事件设定处理过程,Active的时候OnConnect事件还是Nil
呢,当然不能处罚你的事件了,修改一下顺序看看:
mysocket.client.OnConnect:=mysocket.c_connect;
mysocket.client.Active:=true;
 
致lawler:你讲得有道理!不过我试了!还是不没响应!不知道你试了没有?
有没有别的解决办法?
 
写构造函数,在里面给client的事件处理过程指向。
 
TO kgm:我依你说的改了,还是没有响应,不知道在没FORM的DLL中消息是怎么传递和处理的,你还有别的办法解决这问题吗?
library Project2;

uses
SysUtils,
Classes,
scktcomp,
dialogs;

type
Tmysocket=class(Tobject)
private
client:Tclientsocket;
procedure c_connect(Sender: TObject; Socket: TCustomWinSocket);
public
constructor create;
end;

constructor Tmysocket.create;
begin
client:=Tclientsocket.create(nil);
client.onconnect:=c_connect;
end;

procedure Tmysocket.c_connect(Sender: TObject;Socket: TCustomWinSocket);
begin
showmessage('nihao');
end;

var
mysocket:Tmysocket;

{$R *.res}

begin
mysocket:=Tmysocket.Create();
mysocket.client.Address:='127.0.0.1';
mysocket.client.Port:=80;
mysocket.client.Active:=true;
end.
 
我也想知道动态组件的事件定义及触发问题.
 
后退
顶部