Canvas.TextOut为什么会显示乱码? ( 积分: 10 )

  • 主题发起人 主题发起人 szdnc
  • 开始时间 开始时间
S

szdnc

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么显示乱码?
procedure TForm1.Button2Click(Sender: TObject);
var
Px,Py:Integer;
i,j:Integer;
Text_Spacing:Integer;
Txt:String;
begin
px:=100;
py:=100;
j:=0;
Text_Spacing:=12;
Txt:='中华人民共和国';
for i:=1 to Length(Txt) do
begin
Canvas.TextOut(Px+j, Py, Txt);
j:=j+Text_Spacing;
end;
end;
 
因为你的
Txt:='中华人民共和国';
内有中文,而中文是占两个字节的,故使用Txt取出的只是半个汉字,自然就是乱码了

在截取前先判断下是否为中文(记得是说汉字的第一个字节>127,而字母与符号等都是小于127的),如是则取两个字节(如此的话,你的FOR就要改为WHILE来控制循环了)
 
for i:=1 to Length(Txt) do //???
汉字的长度为2,你TextOut出一个一个字节
 
procedure TForm1.Button2Click(Sender: TObject);
var
Px,Py:Integer;
i,j:Integer;
Text_Spacing:Integer;
Txt: WideString; //Txt:String; 改一下这里就OK了
begin
px:=100;
py:=100;
j:=0;
Text_Spacing:=12;
Txt:='中华人民共和国';
for i:=1 to Length(Txt) do
begin
Canvas.TextOut(Px+j, Py, Txt);
j:=j+Text_Spacing;
end;
end;
 
后退
顶部