自定义一个类,继承自TComponent: TCustomComServer = class(TComponent)
private
fSvrSocket:TServerSocket;
...
public ...
constructor Create(AOwner: TComponent) ;overload;
destructor Destroy; override;
end;constructor TCustomComServer.Create(AOwner: TComponent;Port : integer);
begin
inherited Create(AOwner);
fSvrSocket := TServerSocket.Create(Aowner);
...
end;destructor TCustomComServer.Destroy;
begin
fSvrSocket.Close;
fSvrSocket.Free;
inherited;
end;
该类在单元中引入后,用代码创建,所有功能工作正常。封装为组件,安装后,放置到窗体上时,窗体打开正常,但在关闭是提示地址访问错误,跟踪后发现,释放方法中 fSvrSocket.Close; 时 fSvrSocket 为nil ,再跟踪发现,窗体创建时组件的create没有执行。
为什么组件的 create 在窗体创建时没有运行,而Destroy在窗体释放时运行??
高分求教!!!! 在线等待。
private
fSvrSocket:TServerSocket;
...
public ...
constructor Create(AOwner: TComponent) ;overload;
destructor Destroy; override;
end;constructor TCustomComServer.Create(AOwner: TComponent;Port : integer);
begin
inherited Create(AOwner);
fSvrSocket := TServerSocket.Create(Aowner);
...
end;destructor TCustomComServer.Destroy;
begin
fSvrSocket.Close;
fSvrSocket.Free;
inherited;
end;
该类在单元中引入后,用代码创建,所有功能工作正常。封装为组件,安装后,放置到窗体上时,窗体打开正常,但在关闭是提示地址访问错误,跟踪后发现,释放方法中 fSvrSocket.Close; 时 fSvrSocket 为nil ,再跟踪发现,窗体创建时组件的create没有执行。
为什么组件的 create 在窗体创建时没有运行,而Destroy在窗体释放时运行??
高分求教!!!! 在线等待。
解决方案 »
- 求助win7 64位装delphi
- 请教堆栈溢出的问题
- 关于delphi faq
- 请问:Tscrollbox类控件有没有滚动条滚动事件句柄
- ==请大侠帮我看看这个遍历树的方法问题在那里?==
- 请问在大富翁论坛中,在哪里可以输入激活码,进入论坛后,老说我没进,红灯一直亮
- 怎样使最大化,最小化按钮显灰色
- IdMappedPortTCP1 控件发送问题求助
- 主 题:自己编的电子邮件发送程序,发邮件正常,但是接收时邮件内容(body)是英文接收正常, body 是汉字出现乱码,请求高手指点迷津
- 有QQ2000的发送消息和接收消息的接口协议?400分
- delphi中年,月,日,时,分,秒的函数是什么?paradox表
- why???急
begin
fSvrSocket := TServerSocket.Create(Aowner);
//把这一行写到前面
inherited Create(AOwner);
//fSvrSocket := TServerSocket.Create(Aowner);
...
end;
constructor TCustomComServer.Create(AOwner: TComponent;Port : integer);
begin
inherited Create(AOwner);
//fSvrSocket := TServerSocket.Create(Aowner);
fSvrSocket := TServerSocket.Create(Self);
...
end;
destructor Destroy; override;constructor TCustomComServer.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
fSvrSocket := TServerSocket.Create(Aowner);
...
end;
fSvrSocket := TServerSocket.Create(Self);
有什么差别??
而且,跟踪发现,create 在窗体创建时,没有被执行。用代码创建该类,运行正常阿。可见,create 方法的代码本身没问题,可就是没有被运行。为什么会没有运行??在窗体释放时,Destroy 会被运行,为什么??
private
fSvrSocket:TServerSocket;
...
public ...
constructor Create(AOwner: TComponent) ;override;
destructor Destroy; override;
end;constructor TCustomComServer.Create(AOwner: TComponent;Port : integer);
begin
inherited Create(AOwner);
fSvrSocket := TServerSocket.Create(Self);
...
end;destructor TCustomComServer.Destroy;
begin
fSvrSocket.Close;
fSvrSocket.Free;
inherited;
end;
改为constructor Create(AOwner: TComponent);override;
2。在create中创建私有组件的方法参数应该为self。如果使用Awoner,会在其容器中生成该组件,而自定义的组件内却无法访问。尤其谢谢 largewang(老王) 。