delphi 升级到xe7后的一些个人经验(一)...慢慢更新中

来源:互联网 发布:三星s5230c软件 编辑:程序博客网 时间:2024/05/21 17:39

一: 关于string;

   xe7中string默认的是unicodestring,所以计算一些中英文的字符串长度会出现不同,

unicodestring中每个字符已2个字节存储,长度为2,即使是英文也会填充空格弥补.

ansistring中汉子长度为2,英文为1.

比如如下代码:

var

s: string;
i: integer;
begin
  s:= edit1.Text;
 //s:= '啊是的1a';{啊和是中间有空格}
  label1.Caption:= s +'(sizeof)' + ':' + inttostr(sizeof(s));{4} 
  label2.Caption:= s +'(length)' + ':' + inttostr(length(s));{8}

end;

但如果现在是想得到他们长度为9怎么办?可以使用如下方法;

1:  引用AnsiStrings单元.

    a: 引用AnsiStrings单元, 如果不引用该单元,即便编译不报错,实际上是用的还是Unicode版本的函数,会有隐式的转化。不信打开参数自动完成,看看IDE提示的类型是什么?天啊AnsiLowerCase参数竟然还是String,而不是AnsiString。看来Delphi2010太迫切的要抛弃Ansi字符串了,以至于你不引用AnsiStrings单元,所有Ansixxxx函数实际上还是Unicode版本。

    b: 把s改为ansistring; 


2:自己写了一个函数

function GetLen(str:string): integer;
var
i,k: integer;
begin
  k:= 0;
  for i := 1 to length(str) do
  begin
    if (ord(str[i])>128) then
    begin
      k := k+2;
    end else
      k:= k+1;
  end;
result := k;
end;


二 Timage控件,现在已经支持GIF和PNG了,但JPEG还是需要引用JPEG单元.

0 0
原创粉丝点击