zoukankan      html  css  js  c++  java
  • delphi 升级到xe7后的一些个人经验

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

    你只要记住 字符串使用变了。
    VCL 下面所有的 char 改 ansichar

    string 改 ansistring。

    array of char改为

    array of ansichar


    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单元.

  • 相关阅读:
    CDialogConfigStringRecord+CDialogConfigManage 如何保存listbox中未显示的信息
    vs2010 打开 vs2005 工程报错
    优秀程序员的两大要素:懒 + 笨
    架构设计中的方法学(四)
    程序员应该具备的素质汇总(逐步总结)(转)
    架构设计中的方法学(三)
    成都中青旅欢迎你
    游洪崖洞有感
    架构设计中的方法学(七)
    架构设计中的方法学(二)
  • 原文地址:https://www.cnblogs.com/westsoft/p/8439615.html
Copyright © 2011-2022 走看看