baidu google里输入一个关键词 会出现好多关键字组合下拉出来。
我想问下,这个下拉效果是怎么弄出来的?
再有那些与关键字相关的组合字是怎么查询出来的,如果已经有了关键字组合库?

解决方案 »

  1.   

    try this...
    procedure TForm1.CodeEditEnter(Sender: TObject); 
      begin 
        if CodeEdit.text<>'' then 
        begin 
          CodeEdit.SelStart:=length(CodeEdit.text); 
          Table1.locate('code', CodeEdit.text,[lopartialkey]); 
        End; 
      end; 
     
      CodeEdit的OnExit事件如下: 
      procedure TForm1.CodeEditExit(Sender: TObject); 
      begin 
      if activecontrol<>dbgrid1 then 
      begin 
        dbgrid1.Visible:=false; 
        Table1.Locate('code',codeedit.text,[lopartialkey]); 
        if Table1.Eof then 
        begin 
          dbgrid1.Visible:=true; 
          exit; 
        end; 
        if not Table1.Eof then 
        begin 
          codeedit.Text:=Table1.fieldbyname('code').asstring; 
          NameEdit.Text := Table1.fieldbyname('name').asstring; 
        end; 
      end; 
      end; 
     
    CodeEdit的OnKeyDown事件如下: 
    Procedure Tform1.CodeEditKeyDown(Sender: TObject;var Key: Word;Shift: TShiftState); 
    var 
      i:integer; 
    begin 
      if (Table1.RecordCount>0) then 
      begin 
        case key of 48..57: 
        begin 
          dbgrid1.Visible:=true; 
          Table1.Locate('code',CodeEdit.text,[lopartialkey]); 
        end; 
        vk_next: 
        if dbgrid1.Visible then 
        begin 
          i:=0; 
          while (not Table1.Eof) and (i<11) do 
          begin 
            Table1.Next; 
            i:=i+1; 
          end; 
          CodeEdit.Text:=Table1.fieldbyname('code').asstring; 
        End; 
        vk_prior: 
        if dbgrid1.Visible then 
        begin 
          i:=0; 
          while (not Table1.Bof) and (i<11) do 
          begin 
            Table1.prior; 
            i:=i+1; 
          end; 
          CodeEdit.Text:=Table1.fieldbyname('code').asstring; 
        end; 
        vk_down: 
        if dbgrid1.Visible then 
        begin 
          if not Table1.Eof then 
          begin 
            Table1.Next; 
            CodeEdit.Text:=Table1.fieldbyname('code').asstring; 
          end; 
        end; 
        vk_up: 
        if dbgrid1.Visible then 
        begin 
          if not Table1.Bof then 
          begin 
            Table1.Prior; 
            CodeEdit.Text:=Table1.fieldbyname('code').asstring; 
          end; 
        end; 
      end; 
      end 
      else 
        dbgrid1.Visible:=false; 
      CodeEdit.SelStart:=length(CodeEdit.text); 
    end; 
     
    CodeEdit的OnKeyUp事件如下: 
    procedure Tform1.CodeEditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); 
    begin 
      if (Table1.RecordCount>0) then 
      begin 
        if ((key>=48) and (key<=57)) then 
          Table1.Locate('code',codeedit.text,[lopartialkey]); 
        if (key=VK_back) and (codeedit.text<>'') then 
          Table1.Locate('code',codeedit.text,[lopartialkey]); 
        if (key=VK_BACK) and (codeedit.text='') then 
          Table1.First; 
        if (key=vk_down) or (key=vk_up) or (key=vk_prior) or (key=vk_next) then 
          if dbgrid1.Visible then 
            codeedit.Text:=Table1.fieldbyname('code').asstring; 
      end 
      else 
        dbgrid1.Visible:=false; 
        codeedit.SelStart:=length(codeedit.text);  
    end;