在 TListView 里面有好多个项目,全是中文的标题,如何按一下字母键就快速定位到该项目,并且让该项目处于屏幕显示的中间。比如,TListView 里面有 张三、李四、王五等几十个项目,按一下 w 键就快速定位到“王五”,如果“王五”在 ListView 的第二页甚至第十页里面,要让ListView翻动到它所在的页面里面。我要代码。

解决方案 »

  1.   

    建议前面增加一个英文的前缀
    别如
    ZS张三
    LS李四
      

  2.   

    汉字转换英文字母我会,但是不会定位!
    就是说不知道如何准备地让 ListView 翻页到第n项
      

  3.   

    你的ITem是按字母顺序排列的话,就可以像字典一样在某个字母开始的页面加上一个标记阿(英文字典),那样就可以直接放到那一页了...
      

  4.   

    楼上的代码使用范围太窄了,只能使用在GB2312的一级字库 3005个汉字。对于GBK的2万来字存在盲区。
      

  5.   


    function TfrmMain.getHzPy(const AHzStr: 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: Integer;
    begin
      i := 1;
      while i <= Length(AHzStr) do
      begin
        if (AHzStr[i] >= #160) and (AHzStr[i + 1] >= #160) then
        begin
          HzOrd := (Ord(AHzStr[i]) - 160) * 100 + Ord(AHzStr[i + 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);
              Break;
            end;
          end;
          Inc(i);
        end else Result := Result + AHzStr[i];
        Inc(i);
      end;
    end;procedure TfrmMain.Button1Click(Sender: TObject);
    begin
      Edit1.Text := getHzPy(Edit2.Text);
    end;
      

  6.   

    g961681(PerryWang) 上面给的程序
     开始应当加上一句话
    result:='';
    否则对于连续调用,将会保留以前的数据。
      

  7.   

    g961681(PerryWang) 
    你第二段程序和第一段是等效的,
    他利用了GB2312的第一个区3005的汉字是采用拼音排序的。据统计这3005个汉字它能满足97%的需求。
    二级字库采用的部首排序,
    GBK更是利用了内码的各个部分。不采用汉字编码索引的方法是不可能实现的。
      

  8.   

    多谢pazee(耙子)(今年过年不收礼,收礼只收尿不湿!
    让我又多学到了点东西!那么GB2312的二级字库是不是说就是GB2312的第二个区呢!
      

  9.   

    你们答了半天,我看了一下,其实我想知道的就是这个
    ListView1.Selected.MakeVisible(true);呵呵~ 我不知道有这个方法可以这样定位,汉语拼音的我早就搞定了。
    所以,准确答案应该就是这个了。
    谢谢 pengxuan(网虫先生)