类中如何引用控件的事件

ztgbasil 2003-10-20 09:43:17
如:
type
TTest=class(TThread)
comm1:TMSComm;
procedure Comm1Comm(Sender:TObject); // ---@
private
{private declare}
public
{public declare}
end;

procedure TTest.Comm1Comm(Sender:TObject); //--@@@
begin
//执行一系列的操作
if mscomm1.CommEvent =2 then
begin
// ..............
end;
end;

注:MSCOMM是个控件,它有一个OnComm事件,一旦串口接收到数据,便会触发这个事件,所以在客户端就可以直接在这个事件中接收数据。(先不考虑,MSCOMM是否支持多线程问题,假定是支持多线程的)
现在我的要求是不用form(别用Form1.enabled:=false),需要在后台运行的。做一个DLL文件,利用接口调用线程,通过线程启动串口,并从串口接收数据。请问该如何实现这个事件????实际上问题要解决的是:如何让@ 与@@@关联起来?

如果将其放在窗体上,那么它的形态为:
------------------------------
type
TForm1 = class(TForm)
MSComm1: TMSComm;
procedure MSComm1Comm(Sender: TObject); //控件接收事件
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
-----------------------------
procedure TForm1.MSComm1Comm(Sender: TObject);
var
Receive_Temp:Variant;
Receive_Byte :Byte;
Temp:String;
begin
if mscomm1.CommEvent =2 then
begin
repeat
Receive_Temp:=mscomm1.Input ;
Receive_Byte:=Receive_Temp;
if Receive_Byte<16 then
Temp:='0' & Hex(Receive_Byte)
else
Temp:=Hex(Receive_Byte);
PortReceData:=PortReceData & Temp; //计数器会自动查询该变量
until mscomm1.InBufferCount >0;
end;
------------------------------
我看了一下dfm文件,其中有一段是定义Form1与OnComm的关联的:
object MSComm1: TMSComm
Left = 208
Top = 8
Width = 32
Height = 32
OnComm = MSComm1Comm //就是这里
ControlData = {
2143341208000000ED030000ED03000001568A64000006000000010000040000
00040000802500000000080000000000000000003F00000011000000}
end
end;
...全文
87 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztgbasil 2003-10-20
  • 打赏
  • 举报
回复

谢谢楼上各位热心的兄弟,谢谢 zzh54zzh(我也要补钙!)
你们的解答让我茅塞顿开,深感功力太浅
再次谢谢各位
ztgbasil 2003-10-20
  • 打赏
  • 举报
回复
在上面的例子中:
procedure TForm1.MSComm1Comm(Sender: TObject);
已经是Mscomm的事件了,可以直接在里面处理了;
我需要的是:
procedure TTest.Comm1Comm(Sender:TObject);
begin
//处理接收数据
end;
这个过程,怎么样才能够与线程类中定义MSComm控件的OnComm事件连接在一起?
因为:MSCOMM中触发的OnComm()事件,他是控件自带的一个事件,我们在上面
写的是我们自己的一个过程。
IORILI 2003-10-20
  • 打赏
  • 举报
回复
楼上已经说得很明白了
zzh54zzh 2003-10-20
  • 打赏
  • 举报
回复
这是我在线程里调用控件的事件,你可以在你的类里调用控件的事件。
type
TDownLine = class(TThread)
private
{ Private declarations }
YNDel:Boolean;
YNInStringList:Boolean;
FNMFTP: TNMFTP;
protected
procedure MFTPPacketRecvd(Sender: TObject);
procedure MFTPConnect(Sender: TObject);
procedure MFTPDisconnect(Sender: TObject);
procedure FNMFTPError(Sender: TComponent; Errno: Word;
Errmsg: String);

procedure Execute; override;
destructor Destroy;override;
public
constructor Create;
end;
Var
DownThread:TDownLine;
YNDisConnect:Boolean;

implementation
uses
Main,DataM,UnitMusicNoSelect,UnitMusicLook,UnitVideoLook,ToolsUnit;

constructor TDownLine.Create;
begin
FNMFTP:=TNMFTP.Create(Application);
FNMFTP.OnPacketRecvd:=MFTPPacketRecvd;
FNMFTP.OnConnect:=MFTPConnect;
FNMFTP.OnDisconnect:=MFTPDisconnect;
FNMFTP.Onerror:=FNMFTPError;
Linux2001 2003-10-20
  • 打赏
  • 举报
回复
你直接在你的自定义过程中调用控件的事件不就OK了
procedure TForm1.MSComm1Comm(Sender: TObject);
begin
mscomm1.OnComm(参数我不知道,自己写);
end;
不过我写串口程序,一般不用MSComm控件,我用的是VCL库(第三方的)串口控件

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧