procedure Tfrmmain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); var rbuf:array of byte; i: integer; begin setLength(rbuf, BufferLength); move(Buffer^, PChar(rbuf)^, BufferLength); for i:=0 to bufferlength-1 do begin //rbuf[0],..rbuf end; end;
在界面上放一个Memo就可以看到接收到的数据了 还要注意流控的问题 function HexStrToStr(const S:string):string; var t:Integer; ts:string; M,Code:Integer; begin t:=1; Result:=''; while t<=Length(S) do begin while (t<=Length(S)) and (not (S[t] in ['0'..'9','A'..'F','a'..'f'])) do inc(t); if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then ts:='$'+S[t] else ts:='$'+S[t]+S[t+1]; Val(ts,M,Code); if Code=0 then Result:=Result+Chr(M); inc(t,2); end; end;procedure TFrmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); var i,k:integer; s, str1:string ; begin SetLength(Str1,BufferLength); move(buffer^,pchar(Str1)^,bufferlength); if length(trim(Str1)) <= 0 then Exit; for i := 1 to length(Str1) do s := s + inttohex(ord(Str1[i]), 2); ReturnStr:=HexStrToStr(s); Memo1.Lines.Add('收到'+HexStrToStr(s)); end;
procedure TFrmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); var i,k:integer; s, str1:string ; begin SetLength(Str1,BufferLength); move(buffer^,pchar(Str1)^,bufferlength); if length(trim(Str1)) <= 0 then Exit; for i := 1 to length(Str1) do s := s + inttohex(ord(Str1[i]), 2); Memo1.Lines.Add('收到'+HexStrToStr(s)); end;
procedure Tfrmmain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); var rbuf:array of byte; i: integer; str: string; begin setLength(rbuf, BufferLength); move(Buffer^, PChar(rbuf)^, BufferLength); str:=''; for i:=0 to bufferlength-1 do begin str:=str+inttostr(rbuf[i]); end; memo1.lines.add(str); end;
function HexStrToStr(const S:string):string; var t:Integer; ts:string; M,Code:Integer; begin t:=1; Result:=''; while t<=Length(S) do begin while (t<=Length(S)) and (not (S[t] in ['0'..'9','A'..'F','a'..'f'])) do inc(t); if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then ts:='$'+S[t] else ts:='$'+S[t]+S[t+1]; Val(ts,M,Code); if Code=0 then Result:=Result+Chr(M); inc(t,2); end; end; procedure TFrmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); var i,k:integer; s, str1:string ; begin SetLength(Str1,BufferLength); move(buffer^,pchar(Str1)^,bufferlength); if length(trim(Str1)) <= 0 then Exit; for i := 1 to length(Str1) do s := s + inttohex(ord(Str1[i]), 2); Memo1.Lines.Add('收到'+HexStrToStr(s)); end; 不加这个函数HexStrToStr 你可能看到的是乱码
procedure Tfrmmain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
rbuf:array of byte;
i: integer;
begin
setLength(rbuf, BufferLength);
move(Buffer^, PChar(rbuf)^, BufferLength);
for i:=0 to bufferlength-1 do
begin
//rbuf[0],..rbuf
end;
end;
那么begin ... end;中要写什么
还有就是除了要设置上面的参数外还需要设置什么参数吗??
还要注意流控的问题
function HexStrToStr(const S:string):string;
var
t:Integer;
ts:string;
M,Code:Integer;
begin
t:=1;
Result:='';
while t<=Length(S) do
begin
while (t<=Length(S)) and (not (S[t] in ['0'..'9','A'..'F','a'..'f'])) do
inc(t);
if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then
ts:='$'+S[t]
else
ts:='$'+S[t]+S[t+1];
Val(ts,M,Code);
if Code=0 then
Result:=Result+Chr(M);
inc(t,2);
end;
end;procedure TFrmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i,k:integer;
s, str1:string ;
begin
SetLength(Str1,BufferLength);
move(buffer^,pchar(Str1)^,bufferlength);
if length(trim(Str1)) <= 0 then Exit;
for i := 1 to length(Str1) do
s := s + inttohex(ord(Str1[i]), 2);
ReturnStr:=HexStrToStr(s); Memo1.Lines.Add('收到'+HexStrToStr(s));
end;
BufferLength: Word);
var
i,k:integer;
s, str1:string ;
begin
SetLength(Str1,BufferLength);
move(buffer^,pchar(Str1)^,bufferlength);
if length(trim(Str1)) <= 0 then Exit;
for i := 1 to length(Str1) do
s := s + inttohex(ord(Str1[i]), 2);
Memo1.Lines.Add('收到'+HexStrToStr(s));
end;
BufferLength: Word);
var
rbuf:array of byte;
i: integer;
str: string;
begin
setLength(rbuf, BufferLength);
move(Buffer^, PChar(rbuf)^, BufferLength);
str:='';
for i:=0 to bufferlength-1 do
begin
str:=str+inttostr(rbuf[i]);
end;
memo1.lines.add(str);
end;
var
t:Integer;
ts:string;
M,Code:Integer;
begin
t:=1;
Result:='';
while t<=Length(S) do
begin
while (t<=Length(S)) and (not (S[t] in ['0'..'9','A'..'F','a'..'f'])) do
inc(t);
if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then
ts:='$'+S[t]
else
ts:='$'+S[t]+S[t+1];
Val(ts,M,Code);
if Code=0 then
Result:=Result+Chr(M);
inc(t,2);
end;
end;
procedure TFrmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i,k:integer;
s, str1:string ;
begin
SetLength(Str1,BufferLength);
move(buffer^,pchar(Str1)^,bufferlength);
if length(trim(Str1)) <= 0 then Exit;
for i := 1 to length(Str1) do
s := s + inttohex(ord(Str1[i]), 2);
Memo1.Lines.Add('收到'+HexStrToStr(s));
end;
不加这个函数HexStrToStr
你可能看到的是乱码
我没有设置接受格式
只是设置了comm的
波特率:1200
偶校验
停止位1
数据位数7
DtrControl = DtrDisable
DsrSensitivity = False
TxContinueOnXoff = False
Outx_XonXoffFlow = False
Inx_XonXoffFlow = False
RtsControl = RtsDisable