SPCOMM问题 请高手帮忙!!!在线等!!! 找药品进销存表格
procedure TfrmComm.CommReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
strRecv : string;
begin
setLength(strRecv,BufferLength);
Move(Buffer^,pchar(strRecv)^,BufferLength);
memo1.Lines.Add(strRecv);
end;
请问如何能正确显示汉字???
2楼: 串口发送的格式是十进制还是十六进制 如财务软件破解版下载
3楼: 要是数字不乱的话,应该是你的发送端有问题,汉字是双字节的,顺序不能颠倒,你可以尝试把它颠倒过来看看。
4楼: 先看一下SPCOMM的参数设置对不对,数据位8,停止位1
再看看MEMO的字体设置是否正确
再看看数据串中是否汉字和英文混杂着,至少要确保汉字前的英文字符为偶数个,否则可能无法正确显示汉字
5楼: 你用一个串口线。自己给自己发。字符。看看能不能收到
6楼: 帮顶!
╭=========================================╮
80G海量源代码,控件,书籍全免费狂下不停!
http://www.source520.com
╰=========================================╯
财务软件版7楼: 以上大家说的我都试过了 可还是无法正确显示 数字和字母显示都没问题 就是不能正常显示汉字 急死了!!! 求高手帮忙!!!!
8楼: procedure TMainForm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
tmpArray: array[0..4096] of Byte;
ArraySize: DWord;
Count: DWord;
tmpStr, Str: String;
pStr: PChar;
I, K: Integer;
begin
begin
pStr := Buffer;
tmpStr := string(pStr);
Dec(PStr);
Str := '''';
for I := 0 to Length(tmpStr)-1 do
begin
Inc(PStr);
tmpArray[I]:=Byte(PSTR^);
Str := Str + IntToHEX(Ord(tmpArray[I]),2) + '' '';
end;
Memo1.Lines.Add(''接收: '' + Str);
end;
end;
9楼: 上述接收后得到的是十六进制的内容呀!!!
能不能显示汉字??
10楼: 接收到的都是汉字的机内码,需要把它转为汉字。两个字节和为一个汉字
11楼: 请问两个字节怎样合为一个汉字呀??
12楼: //读取点阵
if Length(strChinese) > 0 then
begin //Hzk16为16×16点阵
AssignFile(f, 文件所在路径'');
reset(f, 1);
n := Length(strChinese) div 2;
for i := 0 to n - 1 do
begin
strChar := Copy(strChinese, i*2+1, 2); //转化成字符
MakeChar(strChar, i);
for l:=0 to 31 do
begin
Memo1.Lines.Add(inttohex(getstr[l],2));
end;
end;
CloseFile(f);
end; 如药品进销存表格
13楼: 帮顶!
╭=========================================╮
80G海量源代码,控件,书籍全免费狂下不停!
http://www.source520.com
╰=========================================╯
财务软件版14楼: to king_213,我的程序和你的一样连数字都不能显示啊,看一下我的程序
为什么好像没有收到数据一样,我把.exe运行在两台机子和一台机子都一样的.不能收到发过去的攸信息 是什么问题.我机子的串口是没有问题的.
.//向端口发送数据
procedure TfrmComm.btnSendClick(Sender: TObject);
var
str: Pchar;
Count: integer;
begin
if edtSendText.Text='''' then
raise exception.create(''发送字符串为空,错误终止'');
COUNT:=edtSendText.GetTextLen;//获取文本框里字符长度
str := Pchar(edtSendText.Text);
//Count := Length(str);
if Comm.WriteCommData(str,Count) then//str参数为要发送的字符串,count参数设置发送字符串的长度。函数用于将一个字符串发送到写进程,发送成功返回TRUE反之返回FLASE
begin
mmoComm.lines.Add(''已发送字符串为:''+str );//''总共有''+ intTostr(Count) + ''个字符'')
mmoComm.lines.Add (''串长度''+ intTostr(Count) + ''个字符'');
end
else
raise exception.Create(''发送错误'');
end;
//从端口接收数据
procedure TfrmComm.CommReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
var
str1,strRecv : string;
begin
setLength(strRecv,BufferLength);
Move(Buffer^,pchar(strRecv)^,BufferLength);
mmoComm.Lines.Add(''已收到: ''+intTostr(BufferLength)+''字节的数据'');
mmoComm.Lines.Add(strRecv);
mmoComm.Invalidate ;
//******************
//出于无奈只有使用以下方法来证实一下真的收到过数据没有.但还是无奈,没有
if StrRecv=''abcdefg'' then
showmessage('' 收取成功!'');
str1:=Copy(StrReCv,1,2);
if Str1=''ab'' then
showmessage(''判断成功!'');
end;