Delphi XE2下如何获取汉字拼音简码,以前的代码不能用了!

解决方案 »

  1.   

    利用sql server的排序规则,也可以取出简码。百度一下就可以了,比以前的代码要好。
      

  2.   

    DELPHI 2010下可以用,XE2应该也可以,没测试过,你试下:function CnPYIndex(const CnString: string): string;
    {
      返回中文的拼音首字母
    }
    const
      ChinaCode: array[0..25, 0..1] of Integer = ((1601, 1636), (1637, 1832), (1833, 2077),
        (2078, 2273), (2274, 2301), (2302, 2432), (2433, 2593), (2594, 2786), (9999, 0000),
        (2787, 3105), (3106, 3211), (3212, 3471), (3472, 3634), (3635, 3722), (3723, 3729),
        (3730, 3857), (3858, 4026), (4027, 4085), (4086, 4389), (4390, 4557), (9999, 0000),
        (9999, 0000), (4558, 4683), (4684, 4924), (4925, 5248), (5249, 5589));
    var
      i, j, HzOrd, l_iHz: Integer;
      Hz: AnsiString;
    begin
      i :=  1;
      l_iHz := 1;
      while i <= Length(CnString) do
      begin
        Hz := CnString[i];
        if (Hz[l_iHz] >= #160) and (Hz[l_iHz + 1] >= #160) then
        begin
          HzOrd := (Ord(Hz[l_iHz]) - 160) * 100 + Ord(Hz[l_iHz + 1]) - 160;
          for j := 0 to 25 do
          begin
            if (HzOrd >= ChinaCode[j][0]) and (HzOrd <= ChinaCode[j][1]) then
            begin
              Result := Result + Char(Byte('A') + j);//改A为a就全部是小写
              Break;
            end;
          end;
        end
        else
          Result := Result + CnString[i];
        Inc(i);
      end;
    end;