高手们你们好:
我的问题是这样子的:“我用了一台我公司生产的9928未接触读卡机来读磁卡。我用WINDOWS操作系统自带的”超级终端“对这台读卡机进行设置。我把这台读卡机设置在了COM1接口上,它的波特率是9600,其他设置也正确,在每次读卡机读不同的卡时,”超级终端”程序都能自动的显示不同的磁卡数据。
我在Delphi中正确的安装了免费串口通信控件SPComm,我想把读卡机每次所读的数据都显示在Form1窗体的Memo1控件里。为此,我在SPComm控件的OnReceiveData
事件里写了如下代码:procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: pointer; BufferLength: Word);
var
strreceive:string;
begin
setlength(strreceive,bufferlength);
move(buffer^,pchar(strreceive)^,bufferlength);
memo1.lines.add(strreceive);
memo1.invalidate;
end;在程序运行时我打开了SPCOMM控件。 请问::??????程序运行时,Memo1中怎么不能显示缓存区里的数据???我的代码错了吗?
请你们指教一下我在线等待你们。
我的问题是这样子的:“我用了一台我公司生产的9928未接触读卡机来读磁卡。我用WINDOWS操作系统自带的”超级终端“对这台读卡机进行设置。我把这台读卡机设置在了COM1接口上,它的波特率是9600,其他设置也正确,在每次读卡机读不同的卡时,”超级终端”程序都能自动的显示不同的磁卡数据。
我在Delphi中正确的安装了免费串口通信控件SPComm,我想把读卡机每次所读的数据都显示在Form1窗体的Memo1控件里。为此,我在SPComm控件的OnReceiveData
事件里写了如下代码:procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: pointer; BufferLength: Word);
var
strreceive:string;
begin
setlength(strreceive,bufferlength);
move(buffer^,pchar(strreceive)^,bufferlength);
memo1.lines.add(strreceive);
memo1.invalidate;
end;在程序运行时我打开了SPCOMM控件。 请问::??????程序运行时,Memo1中怎么不能显示缓存区里的数据???我的代码错了吗?
请你们指教一下我在线等待你们。
可以转换为十六进制字符串显示:unit Routine;interfaceuses
SysUtils; //将十六进制字节转换为字符
function HexToChar(const HexStr: string): Char;
//将字符转换为十六进制字节
function CharToHex(const C: Char): string;
implementationfunction HexToChar(const HexStr: string): Char;
var
Num: Byte;
begin
Num := 0;
case Ord(HexStr[1]) of
Ord('0'): Num := 0 * 16;
Ord('1'): Num := 1 * 16;
Ord('2'): Num := 2 * 16;
Ord('3'): Num := 3 * 16;
Ord('4'): Num := 4 * 16;
Ord('5'): Num := 5 * 16;
Ord('6'): Num := 6 * 16;
Ord('7'): Num := 7 * 16;
Ord('8'): Num := 8 * 16;
Ord('9'): Num := 9 * 16;
Ord('A'): Num := 10 * 16;
Ord('B'): Num := 11 * 16;
Ord('C'): Num := 12 * 16;
Ord('D'): Num := 13 * 16;
Ord('E'): Num := 14 * 16;
Ord('F'): Num := 15 * 16;
end;
case Ord(HexStr[2]) of
Ord('0'): Num := Num + 0;
Ord('1'): Num := Num + 1;
Ord('2'): Num := Num + 2;
Ord('3'): Num := Num + 3;
Ord('4'): Num := Num + 4;
Ord('5'): Num := Num + 5;
Ord('6'): Num := Num + 6;
Ord('7'): Num := Num + 7;
Ord('8'): Num := Num + 8;
Ord('9'): Num := Num + 9;
Ord('A'): Num := Num + 10;
Ord('B'): Num := Num + 11;
Ord('C'): Num := Num + 12;
Ord('D'): Num := Num + 13;
Ord('E'): Num := Num + 14;
Ord('F'): Num := Num + 15;
end;
Result := Chr(Num);
end;function CharToHex(const C: Char): string;
var
High,Low: Integer;
CharCode: Integer;
begin
CharCode := Ord(C);
High := CharCode div 16;
Low := CharCode mod 16;
SetLength(Result,2);
case High of
10: Result[1] := 'A';
11: Result[1] := 'B';
12: Result[1] := 'C';
13: Result[1] := 'D';
14: Result[1] := 'E';
15: Result[1] := 'F';
else Result[1] := IntToStr(High)[1];
end;
case Low of
10: Result[2] := 'A';
11: Result[2] := 'B';
12: Result[2] := 'C';
13: Result[2] := 'D';
14: Result[2] := 'E';
15: Result[2] := 'F';
else Result[2] := IntToStr(Low)[1];
end;
end;end.
BufferLength: Word);
var
Rec:PChar;
begin
GetMem(Rec,BufferLength+2);
StrCopy(Rec,Buffer);
Memo1.Lines.Add(Rec);