对indyTCPClient的简单VCL化,但是总发觉有点不对。求高手的修改。
服务器端开发已经通过了,运行的也非常的好,如果有需要的请提出。
现在就想写个客户端的ACTIVEX了,但是不知道怎么写,所以先用了VCL了,^_^,高手来帮帮忙吧,如果能告诉我怎么转成ACTIVEX就更好了,因为新建ACTIVEX的时候,在VCL列表中怎么都没有我自己的VCL类呢???
=============================================
unit CmdClient;
interface
uses
SysUtils, Classes, Controls, IdTCPClient,Messages;
const CM_HAVEMESSAGE=WM_USER+1;
type
TCommand = record
CommandID : smallint;
Msg: string[255];
end;
THaveMessageEvent=procedure (Sender: TObject; CommandID: smallint; Msg: string) of object;
TClientHandleThread = class(TThread)
private
Client:TIdTCPClient;
CB: TCommand;
CControl: pointer;
procedure HandleInput;
protected
procedure Execute; override;
public
end;
TCmdClient = class(TWinControl)
private
{ Private declarations }
FHost:string;
FPort:integer;
FClient:TIdTCPClient;
FClientHandleThread: TClientHandleThread;
FOnMessage:THaveMessageEvent;
procedure CMMessage(Var Msg:TMessage);message CM_HAVEMESSAGE;
procedure setFHost(const Value: string);
procedure setFPort(const Value: integer);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(Owner: TComponent);override;
destructor Destroy;override;
procedure Connect();
procedure Disconnect;
published
{ Published declarations }
property OnMessage: THaveMessageEvent read FOnMessage write FOnMessage;
property Host: string read FHost write setFHost;
property Port: integer read FPort write setFPort default 0;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('CmdMessage', [TCmdClient]);
end;
{ TClientHandleThread }
procedure TClientHandleThread.Execute;
begin
while not Terminated do
begin
if not Client.Connected then
Terminate
else
try
Client.ReadBuffer(CB, SizeOf (CB));
Synchronize(HandleInput);
except
end;
end;
end;
procedure TClientHandleThread.HandleInput;
begin
TCmdClient(CControl).Perform(CM_HAVEMESSAGE,0,0);
end;
{ TCmdClient }
procedure TCmdClient.CMMessage(var Msg: TMessage);
begin
inherited;
if Assigned(FOnMessage) then FOnMessage(self,FClientHandleThread.CB.CommandID,FClientHandleThread.CB.Msg);
end;
procedure TCmdClient.Connect;
begin
FClient.Host:=FHost;
FClient.Port:=FPort;
try
FClient.Connect(10000); // in Indy < 8.1 leave the parameter away
FClientHandleThread.Resume;
except
on E: Exception do ;
end;
end;
constructor TCmdClient.Create(Owner: TComponent);
begin
inherited;
FClient:=TIdTCPClient.Create(self);
FClientHandleThread.Create(true);
FClientHandleThread.Client:=FClient;
FClientHandleThread.CControl:=self;
FClientHandleThread.FreeOnTerminate:=false;
end;
destructor TCmdClient.Destroy;
begin
FClientHandleThread.Free;
FClient.Free;
inherited;
end;
procedure TCmdClient.Disconnect;
begin
FClientHandleThread.Terminate;
FClient.Disconnect;
end;
procedure TCmdClient.setFHost(const Value: string);
begin
FHost := Value;
end;
procedure TCmdClient.setFPort(const Value: integer);
begin
FPort := Value;
end;
end.
=================
最近为了这个东西提了300分的问题了,但是好像都没什么人回答,所以只有自己琢磨了。
相关推荐
完全复现虚拟同步发电机VSG自适应惯量阻尼控制仿真、根轨迹、调节系数对比(Simulink仿真、Matlab代码实现)
内容概要:本文详细介绍了名为《【完全复现】虚拟同步发电机VSG自适应惯量阻尼控制仿真、根轨迹、调节系数对比(Simulink仿真、Matlab代码实现)》的技术资源,重点围绕虚拟同步发电机(VSG)的自适应惯量与阻尼控制展开,涵盖系统建模、控制策略设计、根轨迹分析及调节系数对比等内容,通过Simulink仿真与Matlab代码实现,帮助读者深入理解VSG在电力系统中的动态响应特性与控制优化方法;文档还列举了大量相关科研资源,涉及电力系统、智能优化、信号处理、路径规划等多个领域,展示了丰富的仿真案例与算法应用。; 适合人群:具备电力系统、自动控制或相关专业背景,熟悉Matlab/Simulink仿真环境,有一定科研基础的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于学习和复现虚拟同步发电机的自适应控制策略,掌握其在微电网和新能源并网中的应用;②通过根轨迹与参数调节分析,优化控制系统动态性能;③结合提供的代码与模型,开展电力系统稳定性研究、课程设计或科研项目开发。; 阅读建议:建议读者结合文中提到的完整资源目录和网盘资料,下载配套的Matlab代码与Simulink模型进行实践操作,边仿真边理解理论原理,重点关注控制参数对系统稳定性的影响,并可拓展应用于其他电力电子变流器或构网型控制研究。
政府如何精准评估园区创新能力并制定有效产业政策?.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。
央企如何借助数据分析提升创新管理体系效能?.docx
央企如何借助数据分析提升创新管理体系效能?
政府园区如何通过数据分析提升区域科技决策效率?.docx
政府园区如何通过数据分析提升区域科技决策效率?
园区如何通过数据分析提升企业创新能力评估的精准度?.docx
园区如何通过数据分析提升企业创新能力评估的精准度?


网络通信/分布式开发
