Class 两个单元,一个类,TSocket和第二个单元必须更改窗体上的对象颜色

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

我必须准备一个单独的单元通过TCP/IP与另一个系统通信

我创建了两个单元:使用TForm的单元1和使用communications的单元2

第一单元:

第二单元:

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中,以根据需要显示数据。