var
Form1: TForm1;
viewstring:string;
rbuf,sbuf:array[0..100] of byte;
implementation{$R *.dfm}procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var i:integer;
begin
viewstring:='';
move(buffer^,(pchar(@rbuf))^,bufferlength);
new(buffer);
for i:=1 to bufferlength do
begin
if chr(rbuf[i])='cb' then comm1.StopComm;
viewstring:=viewstring+chr(rbuf[i]);
end;
memo1.Text:=viewstring;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
self.Comm1.StartComm;
if not comm1.WriteCommData('3a',1) then
begin
showmessage('');
comm1.StopComm;
end;
end;
Form1: TForm1;
viewstring:string;
rbuf,sbuf:array[0..100] of byte;
implementation{$R *.dfm}procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var i:integer;
begin
viewstring:='';
move(buffer^,(pchar(@rbuf))^,bufferlength);
new(buffer);
for i:=1 to bufferlength do
begin
if chr(rbuf[i])='cb' then comm1.StopComm;
viewstring:=viewstring+chr(rbuf[i]);
end;
memo1.Text:=viewstring;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
self.Comm1.StartComm;
if not comm1.WriteCommData('3a',1) then
begin
showmessage('');
comm1.StopComm;
end;
end;
修改如下:
if not comm1.WriteCommData('3a',SizeOf('3a')) then
new(buffer);好象沒有必要!rbuf,sbuf:array[0..100] of byte;好象太小, 但根據實際情況可能也不會有問題!!if chr(rbuf[i])='cb' then comm1.StopComm;這句永遠不能發生!
另外,把判断写成消息,放到ReceiveData外面,ReceiveData里面发送消息
传输结束
Form1: TForm1;
viewstring:string;
rbuf,sbuf:array[0..100] of byte;
implementation{$R *.dfm}procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var i:integer;
begin
viewstring:='';
move(buffer^,pchar((@rbuf)^),bufferlength)
for i:=1 to bufferlength do
begin
viewstring:=viewstring+ inttohex(rbuf[i],2);
end;
memo1.Text:=viewstring;
end;end;procedure TForm1.Button1Click(Sender: TObject);
begin
Comm1.StartComm;
comm1.WriteCommData('3a',2);
while (viewstring<>'cb' ) and (Now-dtTmp)<(10000 /(24*60*60*1000)) do
begin
Application.ProcessMessages;
end;
comm1.StopComm;
end;