ListItem 的标题是中文的,如何快速定位? 在 TListView 里面有好多个项目,全是中文的标题,如何按一下字母键就快速定位到该项目,并且让该项目处于屏幕显示的中间。比如,TListView 里面有 张三、李四、王五等几十个项目,按一下 w 键就快速定位到“王五”,如果“王五”在 ListView 的第二页甚至第十页里面,要让ListView翻动到它所在的页面里面。我要代码。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 建议前面增加一个英文的前缀别如ZS张三LS李四 汉字转换英文字母我会,但是不会定位!就是说不知道如何准备地让 ListView 翻页到第n项 你的ITem是按字母顺序排列的话,就可以像字典一样在某个字母开始的页面加上一个标记阿(英文字典),那样就可以直接放到那一页了... 楼上的代码使用范围太窄了,只能使用在GB2312的一级字库 3005个汉字。对于GBK的2万来字存在盲区。 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; g961681(PerryWang) 上面给的程序 开始应当加上一句话result:='';否则对于连续调用,将会保留以前的数据。 g961681(PerryWang) 你第二段程序和第一段是等效的,他利用了GB2312的第一个区3005的汉字是采用拼音排序的。据统计这3005个汉字它能满足97%的需求。二级字库采用的部首排序,GBK更是利用了内码的各个部分。不采用汉字编码索引的方法是不可能实现的。 多谢pazee(耙子)(今年过年不收礼,收礼只收尿不湿!让我又多学到了点东西!那么GB2312的二级字库是不是说就是GB2312的第二个区呢! 你们答了半天,我看了一下,其实我想知道的就是这个ListView1.Selected.MakeVisible(true);呵呵~ 我不知道有这个方法可以这样定位,汉语拼音的我早就搞定了。所以,准确答案应该就是这个了。谢谢 pengxuan(网虫先生) delphi使用fastreport如何打印指定的一条记录 如何实现这样的查询结果? 关于数据库更新问题 急~~ ===关于'Kernel32.DLL'问题,=== Help~! 大家帮个忙,怎样得到ShellListView中选择的文件或文件夹的名称或。。。。。 ===我准备功读DELPHI,请大家推荐一些书籍\指点一些入门的经验??=== 如何把一个窗口缩小到右下角的任务栏? 超级弱智问题 关于sql UDP连续发送丢包的问题请教!! 如何让 ListView 的 SubItems 可以编辑? (再问)奇怪:ADO连接Access数据库,事务提交成功,界面上可以查询,但数据库里没有记录?
别如
ZS张三
LS李四
就是说不知道如何准备地让 ListView 翻页到第n项
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;
开始应当加上一句话
result:='';
否则对于连续调用,将会保留以前的数据。
你第二段程序和第一段是等效的,
他利用了GB2312的第一个区3005的汉字是采用拼音排序的。据统计这3005个汉字它能满足97%的需求。
二级字库采用的部首排序,
GBK更是利用了内码的各个部分。不采用汉字编码索引的方法是不可能实现的。
让我又多学到了点东西!那么GB2312的二级字库是不是说就是GB2312的第二个区呢!
ListView1.Selected.MakeVisible(true);呵呵~ 我不知道有这个方法可以这样定位,汉语拼音的我早就搞定了。
所以,准确答案应该就是这个了。
谢谢 pengxuan(网虫先生)