一个关于MSComm控件的问题,我不知道如何解决,请高手赐教啊,急 ( 积分: 50 )

  • 主题发起人 主题发起人 rainstar
  • 开始时间 开始时间
R

rainstar

Unregistered / Unconfirmed
GUEST, unregistred user!
先看看这个OnComm事件的程序吧:
procedure TForm1.MSComm1Comm(Sender: TObject);
var
codesize : Integer;
MemoText : string;
begin
Send_Succ := true
//标志发送数据是否成功
case MSComm1.CommEvent of
comEvCD,comEvCTS,comEvDSR,comEvSend,comEvRing,comEvReceive:
begin
codesize := MSComm1.InBufferCount;
data := varArrayCreate([0,codesize-1],varByte);
buffer := null;
buffer := MSComm1.Input;
data := buffer;
MSComm1.InBufferCount := 0;
if codesize >4 then//此处我是加了判断的,如果不加这个判断的话,MemoShow会显示数据,但是会报"Variant array index of bounds."的错误,也就是接data这个数组的下标益出,不加判断又不行,加了判断却有另外的问题出现(下面有说到问题),为什么啊,郁闷啊。
begin
if (data[0] = $AA) and (data[1] = $3) and (data[2] = $A2) and (data[3] = $0) and (data[4] = $25) then
begin
Send_Succ := true;
if length(MemoShow.Text) = 7 then
begin
MemoShow.Text := '';
end;
if IntToStr(CommandCode) = '$A' then
begin
MemoShow.Text := '*';
end
else if IntToStr(CommandCode) = '$B' then
begin
MemoShow.Text := '#';
end
else
begin
MemoShowText := MemoShow.Text + IntToStr(CommandCode);
MemoShow.Text := MemoShowText;//问题就是在这里,为什么数据发送成功,而我的MemoShow上却不显示数据,如果不加前面那个判断,虽然会报那个错误,但却可以显示我所发送的数据。
end;
end
else if (data[0] = $AA) and (data[1] = $3) and (data[2] = $A1) then
begin
FCS := 0;
buf[0] := $AA;
buf[1] := $3;
buf[2] := $A2;
buf[3] := $0;
buf[4] := $25;
MSComm1.InBufferCount := 0;
sBuf := buf;
MSComm1.Output := sBuf;

State := data[3];
case State of
0:
begin
lbShow.Caption := '住户呼叫中心机.....';
end;
1:
begin
lbShow.Caption := '住户通话中.....';
end;
2:
begin
lbShow.Caption := '网络呼叫中.....';
end;
3:
begin
lbShow.Caption := '网络通话中.....';
end;
4:
begin
lbShow.Caption := '网络监视中....按*键退出!';
end;
5:
begin
lbShow.Caption := '无此住户';
end;
6:
begin
lbShow.Caption := '网络忙';
end;
7:
begin
lbShow.Caption := '网络空闲';
end;
end;
end
else
begin
Send_Succ := False;
end ;
end ;
end;
end;
end;

在程序的中间我已经说明了问题的所在,为什么MemoShow控件不显示数据啊,急啊,分数不够可以加的啊,我是新手,请多赐教
 
先看看这个OnComm事件的程序吧:
procedure TForm1.MSComm1Comm(Sender: TObject);
var
codesize : Integer;
MemoText : string;
begin
Send_Succ := true
//标志发送数据是否成功
case MSComm1.CommEvent of
comEvCD,comEvCTS,comEvDSR,comEvSend,comEvRing,comEvReceive:
begin
codesize := MSComm1.InBufferCount;
data := varArrayCreate([0,codesize-1],varByte);
buffer := null;
buffer := MSComm1.Input;
data := buffer;
MSComm1.InBufferCount := 0;
if codesize >4 then//此处我是加了判断的,如果不加这个判断的话,MemoShow会显示数据,但是会报"Variant array index of bounds."的错误,也就是接data这个数组的下标益出,不加判断又不行,加了判断却有另外的问题出现(下面有说到问题),为什么啊,郁闷啊。
begin
if (data[0] = $AA) and (data[1] = $3) and (data[2] = $A2) and (data[3] = $0) and (data[4] = $25) then
begin
Send_Succ := true;
if length(MemoShow.Text) = 7 then
begin
MemoShow.Text := '';
end;
if IntToStr(CommandCode) = '$A' then
begin
MemoShow.Text := '*';
end
else if IntToStr(CommandCode) = '$B' then
begin
MemoShow.Text := '#';
end
else
begin
MemoShowText := MemoShow.Text + IntToStr(CommandCode);
MemoShow.Text := MemoShowText;//问题就是在这里,为什么数据发送成功,而我的MemoShow上却不显示数据,如果不加前面那个判断,虽然会报那个错误,但却可以显示我所发送的数据。
end;
end
else if (data[0] = $AA) and (data[1] = $3) and (data[2] = $A1) then
begin
FCS := 0;
buf[0] := $AA;
buf[1] := $3;
buf[2] := $A2;
buf[3] := $0;
buf[4] := $25;
MSComm1.InBufferCount := 0;
sBuf := buf;
MSComm1.Output := sBuf;

State := data[3];
case State of
0:
begin
lbShow.Caption := '住户呼叫中心机.....';
end;
1:
begin
lbShow.Caption := '住户通话中.....';
end;
2:
begin
lbShow.Caption := '网络呼叫中.....';
end;
3:
begin
lbShow.Caption := '网络通话中.....';
end;
4:
begin
lbShow.Caption := '网络监视中....按*键退出!';
end;
5:
begin
lbShow.Caption := '无此住户';
end;
6:
begin
lbShow.Caption := '网络忙';
end;
7:
begin
lbShow.Caption := '网络空闲';
end;
end;
end
else
begin
Send_Succ := False;
end ;
end ;
end;
end;
end;

在程序的中间我已经说明了问题的所在,为什么MemoShow控件不显示数据啊,急啊,分数不够可以加的啊,我是新手,请多赐教
 
不用麻烦大家了,我自己已经解决了
 
呵呵,那领分了。[:D]
 
换个问题,还可以继续问。[:D][8D]
 
rainstar,能不能把你的mscomm控件给我发一份,我找了好久也没有找到,谢谢[:)]
我得邮箱:ji0218@163.com
 
yssy(饮水思源):你只要装上VB就可以找到这个控件了
 
后退
顶部