当前位置:主页>仓库管理软件> 列表

SPCOMM问题 请高手帮忙!!!在线等!!! 找药品进销存表格

财务软件版1楼: 我用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;