delphi 升级到xe7后的一些个人经验

Posted 我的学习笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 升级到xe7后的一些个人经验相关的知识,希望对你有一定的参考价值。

http://blog.csdn.net/span12/article/details/42522091

你只要记住 字符串使用变了。
VCL 下面所有的 char 改 ansichar string 改 ansistring。
wide 版本的不用变。
移动开发下,请使用 tencdong 和 tbytes 处理所有字符串问题。

 

delphi 升级到xe7后的一些个人经验(一)...慢慢更新中
原创 2015年01月08日 11:16:43 标签:delphi 629
一: 关于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单元.

以上是关于delphi 升级到xe7后的一些个人经验的主要内容,如果未能解决你的问题,请参考以下文章

Delphi XE7 开发ActiveX 及在IntraWeb下调试

我个人的Java学习经验(一家之言)

做个人网站的一些经验

记录一次小型项目管理的经验

个人在AS的一些安卓适配经验

如何成为一名好的程序员的一些个人经验