combobox组件的问题 ( 积分: 20 )

  • 主题发起人 主题发起人 mawei0913_green
  • 开始时间 开始时间
M

mawei0913_green

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个combobox组件,它的下拉菜单包括许多城市名,例如:北京,北京西,天津,台湾,上海,上蔡,商丘等等;我想实现如下功能,当在combobox下拉菜单中输入一个B时,在combobox下拉菜单中优先显示带B的北京和北京西;当我在combobox组件中输入T时,下拉菜单中立即显示天津和台湾。
请各位大侠帮忙!
 
哈哈 就是拼音缩写模糊查询啦。
看我的
不过不是在一个COMBOBX中,要设计成楼主希望的也是很简单。自己试试。

http://www.skycn.com/soft/32971.html
 
对Combobox的Items进行动态排序?
在OnKeyPress事件里面写就可以,关键是拼音转换。
 
combox1.DroppedDown:=true;
combox1.SetFocus;
 
这个应该对你有帮助!

//取汉字声母
function GetPYIndexChar( hzchar:string):char;
begin
case WORD(hzchar[1]) shl 8 + WORD(hzchar[2]) of
$B0A1..$B0C4 : result := 'A';
$B0C5..$B2C0 : result := 'B';
$B2C1..$B4ED : result := 'C';
$B4EE..$B6E9 : result := 'D';
$B6EA..$B7A1 : result := 'E';
$B7A2..$B8C0 : result := 'F';
$B8C1..$B9FD : result := 'G';
$B9FE..$BBF6 : result := 'H';
$BBF7..$BFA5 : result := 'J';
$BFA6..$C0AB : result := 'K';
$C0AC..$C2E7 : result := 'L';
$C2E8..$C4C2 : result := 'M';
$C4C3..$C5B5 : result := 'N';
$C5B6..$C5BD : result := 'O';
$C5BE..$C6D9 : result := 'P';
$C6DA..$C8BA : result := 'Q';
$C8BB..$C8F5 : result := 'R';
$C8F6..$CBF9 : result := 'S';
$CBFA..$CDD9 : result := 'T';
$CDDA..$CEF3 : result := 'W';
$CEF4..$D188 : result := 'X';
$D1B9..$D4D0 : result := 'Y';
$D4D1..$D7F9 : result := 'Z';
else
result := char(0);
end;
end;
 
现在不是有很多汉字拼音的组件嘛,下一个很简单的,汉字转拼音,或只要拼音的首字母的。在数据库里面加一个字段,就是城市的拼音,在你新增数据时就用这个控件的函数来把拼单加进去。以后查询不用我说了!
 
TO:Dong_HC,多谢了,但是感觉还是有点难,各位大侠还有简单的代码吗
请各位大侠指教!
 
To:nicai_wgl,我很赞同这位大侠的说法,能给我更详细的说明和代码吗
请大侠指教!
 
其实如Dong_HC所说的就可以了,那就是源码,试问楼主你还想要什么。你要资料我给你
---- 1.进入Delphi创建一个新工程:Project1

---- 2.在Form1上创建以下控件并填写属性:

控件类型 属性名称 属性值
Edit Name Search
ListBox Name SourceList
Items 输入一些字符串,如姓名等,用于提供检索数据
ListBox Name ResultList


---- 3.键入以下两个函数

// 获取指定汉字的拼音索引字母,如:“汉”的索引字母是“H”
function GetPYIndexChar( hzchar:string):char;
begin
case WORD(hzchar[1]) shl 8 + WORD(hzchar[2]) of
$B0A1..$B0C4 : result := 'A';
$B0C5..$B2C0 : result := 'B';
$B2C1..$B4ED : result := 'C';
$B4EE..$B6E9 : result := 'D';
$B6EA..$B7A1 : result := 'E';
$B7A2..$B8C0 : result := 'F';
$B8C1..$B9FD : result := 'G';
$B9FE..$BBF6 : result := 'H';
$BBF7..$BFA5 : result := 'J';
$BFA6..$C0AB : result := 'K';
$C0AC..$C2E7 : result := 'L';
$C2E8..$C4C2 : result := 'M';
$C4C3..$C5B5 : result := 'N';
$C5B6..$C5BD : result := 'O';
$C5BE..$C6D9 : result := 'P';
$C6DA..$C8BA : result := 'Q';
$C8BB..$C8F5 : result := 'R';
$C8F6..$CBF9 : result := 'S';
$CBFA..$CDD9 : result := 'T';
$CDDA..$CEF3 : result := 'W';
$CEF4..$D188 : result := 'X';
$D1B9..$D4D0 : result := 'Y';
$D4D1..$D7F9 : result := 'Z';
else
result := char(0);
end;
end;

// 在指定的字符串列表SourceStrs中检索符合拼音索引字符串
PYIndexStr的所有字符串,并返回。
function SearchByPYIndexStr
( SourceStrs:TStrings;
PYIndexStr:string):string;
label NotFound;
var
i, j :integer;
hzchar :string;
begin
for i:=0 to SourceStrs.Count-1 do
begin
for j:=1 to Length(PYIndexStr) do
begin
hzchar:=SourceStrs[2*j-1]
+ SourceStrs[2*j];
if (PYIndexStr[j]<>'?') and
(UpperCase(PYIndexStr[j]) <>
GetPYIndexChar(hzchar)) then goto NotFound;
end;
if result='' then result := SourceStrs
else result := result + Char
(13) + SourceStrs;
NotFound:
end;
end;

4.增加编辑框Search的OnChange事件:
procedure TForm1.SearchChange(Sender: TObject);
var ResultStr:string;
begin
ResultStr:='';
ResultList.Items.Text := SearchByPYIndexStr
(Sourcelist.Items, Search.Text);
end;


---- 5.编译运行后,在编辑框Search中输入要查询字符串的拼音首字符序列,检索结果列表ResultList就会列出检索到的信息,检索中还支持“?”通配符,对于难以确定的的文字使用“?”替代位置,可以实现更复杂的检索。
 
TO:xuguohai,多谢这位大侠,其实我时一名delphi初学者,有很多东西不太懂,所以要多问几下,需求简单一点,不是有句吗,简简单单才时真吗,呵呵
还是谢谢各位大侠了,有你们的帮助我想我会学的更好!!
 
多人接受答案了。
 

Similar threads

回复
0
查看
825
不得闲
D
回复
0
查看
822
DelphiTeacher的专栏
D
D
回复
0
查看
765
DelphiTeacher的专栏
D
后退
顶部