Class 两个单元,一个类,TSocket和第二个单元必须更改窗体上的对象颜色
我必须准备一个单独的单元通过TCP/IP与另一个系统通信 我创建了两个单元:使用TForm的单元1和使用communications的单元2 第一单元: 第二单元:Class 两个单元,一个类,TSocket和第二个单元必须更改窗体上的对象颜色,class,sockets,delphi,events,Class,Sockets,Delphi,Events,我必须准备一个单独的单元通过TCP/IP与另一个系统通信 我创建了两个单元:使用TForm的单元1和使用communications的单元2 第一单元: 第二单元: uses SysUtils, ScktComp; type TCommunication = class(TObject) ClientSocket1 : TClientSocket; procedure ClientOnRead(Sender: TObject; Socket: TCustomWinSocke
uses SysUtils, ScktComp;
type
TCommunication = class(TObject)
ClientSocket1 : TClientSocket;
procedure ClientOnRead(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientOnConnect(Sender: TObject; Socket: TCustomWinSocket);
public
constructor Create;
destructor Destroy; override;
end;
procedure TCommunication.ClientOnConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
// Change circle to Green
end;
procedure TCommunication.ClientOnRead(Sender: TObject;
Socket: TCustomWinSocket);
var
s : String;
begin
s := ClientSocket1.Socket.ReceiveText;
end;
constructor TCommunication.Create;
begin
ClientSocket1 := TClientSocket.Create(nil);
with ClientSocket1 do
begin
Address := '127.0.0.1';
Port := 4545;
OnConnect := ClientOnConnect;
OnRead := ClientOnRead;
end;
end;
我不知道如何更改圆圈的颜色,也不知道如何在Unit1内部创建事件,让OnConnect和OnRead采取新的操作
OnRead对于在TForm上创建某些步骤非常重要。您应该让TCommunication公开它自己的事件,TForm可以将事件处理程序分配给这些事件。正如TCommunication为TClientSocket的事件分配处理程序一样。例如:
第一单元:
使用…,第2单元;
类型
TForm1=classTForm
按钮1:t按钮;
圆圈1:t圆圈;
程序按钮1点击发送者:对象;
过程FormCreateSender:TObject;
发送程序:TObject;
私有的
程序通信连接发送方:ToObject;
程序通讯;
...
终止
变量
表1:TForm1;
通信:t通信;
实施
程序TForm1.Button1单击发送者:对象;
开始
沟通。连接;
终止
过程TForm1.FormCreateSsender:ToObject;
开始
通讯:=t通讯。创建;
Communication.OnConnect:=通信连接;
Communication.OnRead:=communicationonnread;
终止
程序TForm1.FormDestroySender:ToObject;
开始
交流。免费;
终止
过程TForm1.CommunicationOnConnectSender:TObject;
开始
//把圆圈换成绿色
终止
程序TForm1.通信投标人:TObject;
常量数据:字符串;
开始
//用数据做点什么。。。
终止
终止
第二单元:
uses SysUtils, ScktComp;
type
TCommunication = class(TObject)
ClientSocket1 : TClientSocket;
procedure ClientOnRead(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientOnConnect(Sender: TObject; Socket: TCustomWinSocket);
public
constructor Create;
destructor Destroy; override;
end;
procedure TCommunication.ClientOnConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
// Change circle to Green
end;
procedure TCommunication.ClientOnRead(Sender: TObject;
Socket: TCustomWinSocket);
var
s : String;
begin
s := ClientSocket1.Socket.ReceiveText;
end;
constructor TCommunication.Create;
begin
ClientSocket1 := TClientSocket.Create(nil);
with ClientSocket1 do
begin
Address := '127.0.0.1';
Port := 4545;
OnConnect := ClientOnConnect;
OnRead := ClientOnRead;
end;
end;
使用类、SysUtils、ScktComp;
类型
TCommunicationReadEvent=proceduressender:TObject;常量数据:对象的字符串;
t通信=类对象
ClientSocket1:TClientSocket;
程序委托人:托宾;Socket:TCustomWinSocket;
过程ClientOnConnectSender:TObject;Socket:TCustomWinSocket;
平民的
构造函数创建;
毁灭者毁灭;推翻
程序连接;
程序断开;
OnConnect:TNotifyEvent;
OnRead:tCommunicationsReadEvent;
终止
实施
过程TCommunication.ClientOnConnectSender:TObject;
Socket:TCustomWinSocket;
开始
如果分配了onconnect,则为OnConnectSelf;
终止
过程TCommunication.clientonredsender:TObject;
Socket:TCustomWinSocket;
变量
s:字符串;
开始
s:=Socket.ReceiveText;
如果指定为不读取,则为自读取;
终止
构造函数TCommunication.Create;
开始
ClientSocket1:=TClientSocket.Createnil;
用ClientSocket1做什么
开始
地址:=“127.0.0.1”;
端口:=4545;
OnConnect:=客户端连接;
OnRead:=ClientOnRead;
终止
终止
程序t通信。连接;
开始
ClientSocket1.Active:=True;
终止
程序t通信。断开连接;
开始
ClientSocket1.Active:=False;
终止
终止
您应该让TCommunication公开它自己的事件,TForm可以将事件处理程序分配给这些事件。正如TCommunication为TClientSocket的事件分配处理程序一样。例如:
第一单元:
使用…,第2单元;
类型
TForm1=classTForm
按钮1:t按钮;
圆圈1:t圆圈;
程序按钮1点击发送者:对象;
过程FormCreateSender:TObject;
发送程序:TObject;
私有的
程序通信连接发送方:ToObject;
程序通讯;
...
终止
变量
表1:TForm1;
通信:t通信;
实施
程序TForm1.Button1单击发送者:对象;
开始
沟通。连接;
终止
过程TForm1.FormCreateSsender:ToObject;
开始
通讯:=t通讯。创建;
Communication.OnConnect:=通信连接;
Communication.OnRead:=communicationonnread;
终止
程序TForm1.FormDestroySender:ToObject;
开始
交流。免费;
终止
过程TForm1.CommunicationOnConnectSender:TObject;
开始
//把圆圈换成绿色
终止
程序TForm1.通信投标人:TObject;
常量数据:字符串;
开始
//用数据做点什么。。。
终止
终止
第二单元:
uses SysUtils, ScktComp;
type
TCommunication = class(TObject)
ClientSocket1 : TClientSocket;
procedure ClientOnRead(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientOnConnect(Sender: TObject; Socket: TCustomWinSocket);
public
constructor Create;
destructor Destroy; override;
end;
procedure TCommunication.ClientOnConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
// Change circle to Green
end;
procedure TCommunication.ClientOnRead(Sender: TObject;
Socket: TCustomWinSocket);
var
s : String;
begin
s := ClientSocket1.Socket.ReceiveText;
end;
constructor TCommunication.Create;
begin
ClientSocket1 := TClientSocket.Create(nil);
with ClientSocket1 do
begin
Address := '127.0.0.1';
Port := 4545;
OnConnect := ClientOnConnect;
OnRead := ClientOnRead;
end;
end;
使用类、SysUtils、ScktComp;
类型
TCommunicationReadEvent=proceduressender:TObject;常量数据:对象的字符串;
t通信=类对象
ClientSocket1:TClientSocket;
程序委托人:托宾;Socket:TCustomWinSocket;
过程ClientOnConnectSender:TObject;Socket:TCustomWinSocket;
平民的
构造函数创建;
毁灭者毁灭;推翻
程序连接;
程序断开;
OnConnect:TNotifyEvent;
OnRead:tCommunicationsReadEvent;
终止
实施
过程TCommunication.ClientOnConnectSender:TObject;
Socket:TCustomWinSocket;
开始
如果分配了onconnect,则为OnConnectSelf;
终止
过程TCommunication.clientonredsender:TObject;
Socket:TCustomWinSocket;
变量
s:字符串;
开始
s:=Socket.ReceiveText;
如果指定为不读取,则为自读取;
终止
构造
tor t通信。创建;
开始
ClientSocket1:=TClientSocket.Createnil;
用ClientSocket1做什么
开始
地址:=“127.0.0.1”;
端口:=4545;
OnConnect:=客户端连接;
OnRead:=ClientOnRead;
终止
终止
程序t通信。连接;
开始
ClientSocket1.Active:=True;
终止
程序t通信。断开连接;
开始
ClientSocket1.Active:=False;
终止
终止
它起作用了。但是有没有一种方法可以在单元2中处理OnRead并在单元1的备忘录中显示它呢?我将不得不重用这段代码。有没有办法在单元2中处理OnRead并在单元1的备忘录中显示它?我已经向您演示了如何做到这一点。TCommunication.ClientOnRead可以在调用OnReadSelf,s之前根据需要操纵s,然后您可以将所需的备忘录代码放入TForm1.communicationonnread中以根据需要显示数据。它正在工作。但是有没有一种方法可以在单元2中处理OnRead并在单元1的备忘录中显示它呢?我将不得不重用这段代码。有没有办法在单元2中处理OnRead并在单元1的备忘录中显示它?我已经向您演示了如何做到这一点。TCommunication.ClientOnRead可以在调用OnReadSelf,s之前根据需要操纵s,然后您可以将所需的备注代码放入TForm1.communicationonnread中,以根据需要显示数据。