我想在一个独立的单元中使用此控件,可是在没有Form的情况下它的create方法不能使用参数self,如何解决?
解决方案 »
- 有没有类似CSDN人气比较热的DELPHI论坛
- 小问题,DBGRID的.菜鸟请教了.
- dbgrided中的DrawcolumnCell事件。如何将组别中带组字的那一行字体变为红色?(下图)
- 关于通过DBComboBox向数据库里添加数据的问题?
- 跳不到断点
- 急!!HELP ME!HELP。-。。--。。-。-。(100分)
- 用过InfoPower的朋友请一定看看!
- “我要是一家公司经理,我一定要找一些非计算机专业的应届毕业生(沉迷于计算机编程的)做我的程序员";大家以为如何?(up有分)
- 很简单的问题:如何使窗体接受拖动过来的文本(就是有接受焦点)
- 关于最大化按钮的问题
- 郁闷,散分!
- 有谁知道borland公司 追究盗版的事宜!
方到uses的下面不行呀!
try
finally
Free;
end;
即自己对TClientSocket进行再封装
procedure myCltOnConnect(param1,...) ; 参数要和控件的参数一致cltSocket1:=TClientSocket.Create(nil)
cltSocket1.onConnect:=myCltOnConnect;
怎么回事?
直接用事件就可,然后,
cltSocket1.onConnect := CltOnConnect;
可设定对应事件!
你有两个create选择cltSocket1:=TClientSocket.Create(nil)
or
cltSocket1:=TClientSocket.Create(application)但一般用前一种比较好!我觉得!
这个方法可以使用.不过要注意这个过程的声明
首先声明一个类:
TMyClient = class(TClientSocket)
public
procedure onConnect(你的参数);
.
.
.
.
end;procedure myCltOnConnect(param1,...) ; 之后再调用:cltSocket1:=TMyClient .Create(nil)
TMyClient .onConnect:=myCltOnConnect;这样就可以了.
可他的提示是没有足够的实际参数:(
还有,还说什么onConnect不安全之类的:(
cltSocket1.onConnect:=myCltOnConnect; // 这一句不要带参数。只写方法名
我的程序如下:大家给看一下使那里的错:
ses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Sockets, StdCtrls,ScktComp, ExtCtrls,strUtils;
procedure ClientRead(Sender:TObject;Socket:TCustomWinSocket);
procedure ClientDisconnect(Sender:TObject;Socket:TCustomWinSocket);
procedure ClientConnect(Sender:TObject;Socket:TCustomWinSocket);
procedure ClientError(Sender:TObject;Socket:TCustomWinSocket;
ErrorEvent:TErrorEvent;var ErrorCode:Integer);
//////////////////////////////////////////////////////
Function connect(stAd:string;iPor:integer):Boolean;
procedure DisConnect();
Function SendText(stParm:string):Boolean;
procedure DoIt(stInfor:string);var
isConnecting,isConnected,isDisConnect:Boolean;
keyEnd:string; //保存最终密钥
Client_Encry:TClientSocket;implementation Function connect(stAd:string;iPor:integer):Boolean;
begin
Client_Encry:=TClientSocket.Create(nil);
Client_Encry.Host:=stAd;
Client_Encry.Port:=iPor;//声明事件 Client_Encry.OnDisconnect:=ClientDisconnect;
Client_Encry.OnRead:=ClientRead;
Client_Encry.OnError:=ClientError;
Client_Encry.OnConnect:=ClientConnect;
//设置连接
Client_Encry.Active:=True;
isConnecting:=True;
Result:=isConnecting;
end;
Client_Encry.OnRead:=ClientRead;//这儿的ClientRead类型因为是一个对象的成员函数..
..
你定义的
procedure ClientRead(Sender:TObject;Socket:TCustomWinSocket);
是独立的函数,而非成员函数.
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
ClientSocket:TClientSocket;
procedure OnConnect(Sendet:TObject);
end;constructor TMyClient.Create(AOwner:TComponent);
begin
inherited;
ClientSocket:=TClientSocket.Create(self);
ClientSocket.OnConnect:=OnConnect;
end;
destructor TMyClient.Destroy;
begin
ClientSocket.Free;
inherited;
end;
procedure TMyClient.OnConnect(Sender:TObject);
beginend;