表 tab1 的结构是:
字段    lxmc (类型名称)   pym (拼音码)
记录       身份证            sfz
           驾驶证            jsz
           生育证            syz我想在combox 下拉的时候 combox 里显示 tab1 的类型名称,然后当在combox 里输入拼音缩写的时候,每输入一个拼音字母combox的下拉栏自动弹出,将含有这些拼音字母的类型名称都列出来。例如我在combox框里输入‘s’,下拉栏就列出 ‘身份证’ 和 ‘生育证’,然后再输入‘f’时就直接列出‘身份证’。请问这样应该这么做?

解决方案 »

  1.   

    强烈建议楼主使用  InfoPower 控件,www.newhua.com.cn有下载
    我觉得,我们工作的重点不是在实现这个效果,而应该是你的系统工程
      

  2.   

    在combox的 change事件中写adoquery.close;
    adoquery.sql.clear;
    adoquery.sql.add('select lxmc from tab1 where pym like '''+Trim(combox.text)+''' ');
    adoquery.open;adoquery.first;
    combox.items.clear;
    while not adoquery.eof do
    begincombox.items.add(adoquery.fieldbyname('lxmc').Asstring);
    adoquery.next
    end;combox.itemindex:=0;
      

  3.   

    直接在onchange事件里面用  select .. like ..就可以了呀!
    注意做的时候要智能一些,例如只有一个选择的时候,就自动在文本框内赋值;要用上keypress事件来使用回车或空格获取选择的item;
    总之很简单。
      

  4.   

    不行啊,我用onchange事件   select .. like ..,虽然下拉框是根据拼音显示了出来,但不能用鼠标或键盘上下键挑选!
      

  5.   

    就是要你用keypress事件来控制啊!你不要用combox,就用文本框+list控件
      

  6.   

    function GetPyIndexChar(Hzchar:string):String;
    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..$D1B8 : Result :='X';
          $D1B9..$D4D0 : Result :='Y';
          $D4D1..$D7F9 : Result :='Z';
       else
          Result := char(0);
       end;
    end;procedure SearchByPyIndexStr(var listbox:TComboBox;PYIndexStr :string; TableName,PerName :string);
    label NotFound;
    var
       I, J :Integer;
       Hzchar :String;
       Qry:TQuery;
       sql:string;
    begin
        Qry := TQuery.Create(nil);
        Qry.databasename := 'DB';
        sql:='SELECT '+PerName+' FROM '+TableName+'';
        Qry.close;
        Qry.sql.clear;
        Qry.sql.add(sql);
        Qry.open;   //For I:=0 to Form1.ListBox1.Items.Count-1 do   while not Qry.eof do
       begin
          For J:=1 to Length(PYIndexStr) do
          begin
             Hzchar :=Qry.fieldbyname(''+PerName+'').asstring[2*J-1]+Qry.fieldbyname(''+PerName+'').asstring[2*J];
             //Hzchar :=Form1.ListBox1.Items[I][2*J-1]+Form1.ListBox1.Items[I][2*J];
             if (PYIndexStr[J] <>'?') and (UpperCase(PYIndexStr[J])<>GetPyIndexChar(Hzchar)) then
                goto NotFound;
          end;
          //Form1.ResultList1.Add(Form1.ListBox1.Items[I]);
          listbox.Items.Add(Qry.fieldbyname(''+PerName+'').asstring);
          NotFound:
          Qry.next;
       end;    listbox.ItemIndex:=0;
        Qry.free;
    end;叫我哥!