用过comport的大虾,快来抢分啊!!! (100分)

  • 主题发起人 主题发起人 流浪星
  • 开始时间 开始时间

流浪星

Unregistered / Unconfirmed
GUEST, unregistred user!
我的一个程序中,用了comport控件,根据它的例子,编了如下代码,可无法激活事件,
请各位大虾指教。源码如下:

function card_oper(comport:tcomport;s_data:tsend_data):trec_data;
var
r_data:trec_data;
rdata:array [0..1023] of byte;
start_pos,r_count,i:integer;
myevents:tcomevents;
event:tevent;
begin
result.buff_len :=0;

event:=tevent.Create(nil,true,false,'');
start_pos:=0;
with comport do
begin
clearbuffer(true,true);
Write(s_data.send_buff,s_data.buff_len);
repeat
myevents:=[evrxchar];
waitforevent(myevents,event.handle,MAX_DELAY_RESPOND);
if evrxchar in myevents then //此时myevents为[],故下面语句未执行。But why?
begin

r_count:=read(rdata,buffer.InputSize);
for i:=0 to r_count-1 do
r_data.rec_buff[start_pos+i]:=rdata;
inc(start_pos);
end;
until myevents=[];

r_data.buff_len:=start_pos;
end;
result:=r_data;
end;
 
来自Comport2.63的帮助,原文如下:
Write OnRxChar event handler to get data that had arrived in input buffer,
but it has already been read from it by other linked component such as
TComDataPacket or TCustomComTerminal. The application can not read the data
from input buffer,because it has already been read from it and placed in
Buffer parameter.
解决办法:
1.Install Component添加-〉Comport的安装目录下的/Examples/CPortMonitor.pas
然后,你就可以得到串口发送和接收的数据。
2.或者干脆用ComDataPacket。
 
请教,ComDataPacket怎么个用法?
 
先告诉我是不是我说的原因?
 
添加了CPortMonitor后,可以看到其中有数据返回。应该是你说的原因。我想用
comdatapacket来实现,可否给个具体的例子?100分送上:)
 
ComDataPacket很简单,自己看看他的属性,
一般只能用于简单的数据包处理,如果复杂的话,还是自己写。
你改写一下CPortMonitor的代码,可以象处理Memo中的数据一样处理CportMonitor的内容
 
后退
顶部