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控件不显示数据啊,急啊,分数不够可以加的啊,我是新手,请多赐教
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控件不显示数据啊,急啊,分数不够可以加的啊,我是新手,请多赐教