我想问一下mscomm控件的OnComm事件是在什么时候触发的?

darkie28 2005-12-01 03:33:07
procedure TMainForm.MSComm1Comm(Sender: TObject);
var
buffer :variant;
s1:string;
c :char;
begin
case Mscomm1.CommEvent of
ComEvSend:
begin
Memo_Show.Lines.Add('发送数据!');
end;
ComEvReceive:
begin
buffer:=Mscomm1.Input;
s1:=buffer;
c:=s1[1];
ss:=ss+c;
Memo_show.Lines.Add(ss);
ss:='';
inc(JSdate);
StatusBar.Panels.Items[2].Text:='接收:'+inttostr(JSdate);
Diff(datetostr(now)+' '+timetostr(now)+' 接收到:'+ss);
end;
end;
end;

procedure TMainForm.Btn_SysClick(Sender: TObject);
var
SendHex:array[0..8] of char;
s:string;
i:integer;
begin
try
s:='';
SendHex[0]:=chr($44);
SendHex[1]:=chr($30);
SendHex[2]:=Chr($31);
SendHex[3]:=chr(13);
SendHex[4]:=chr($50);
SendHex[5]:=chr($4f);
SendHex[6]:=chr($4c);
SendHex[7]:=chr(13);
SendHex[8]:=chr(4);
for i:= 0 to 8 do
s:=s + SendHex[i];
Mscomm1.Output:=s;
FSdate:=FSdate+length(s);
diff(datetostr(now)+' '+timetostr(now)+' 发送:'+s);
StatusBar.Panels.Items[1].Text:='发送:'+inttostr(FSdate);
except
Memo_show.Lines.Add('发送查询系统指令出错!')
end;
end;

我在case Mscomm1.CommEvent of处设置断点,运行procedure TMainForm.Btn_SysClick(Sender: TObject);可是没有触发OnComm事件,why?
...全文
222 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
darkie28 2005-12-02
  • 打赏
  • 举报
回复
原来是我自己把控件的rthreshold设置为0了,这样即使有数据接收过来也不会触发.
tianwater 2005-12-01
  • 打赏
  • 举报
回复
OnComm 常数

常数 值 描述
comEvSend 1 发送事件。
comEvReceive 2 接收事件。
comEvCTS 3 clear-to-send 线变化。
comEvDSR 4 data-set ready 线变化。
comEvCD 5 carrier detect 线变化。
comEvRing 6 振铃检测。
comEvEOF 7 文件结束。
tianwater 2005-12-01
  • 打赏
  • 举报
回复
在串口接收缓冲区中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅 CommEvent 属性。在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。每个MSComm 控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。

darkie28 2005-12-01
  • 打赏
  • 举报
回复
每人说明下吗?

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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