百度輸入提示 Delphi 實現

咱們在百度時,輸入部份內容,便可得到輸入項選擇列表,從而大大減小錄入,用戶的體驗很好,下面是用delphi 模擬這種效果的設計spa

定義 設計

    DataLst: TStringList; orm

用於存放供選擇的數據。string


   Edt1:TEdit;it

用於接收用戶錄入百度


    lbSerach: TListBox;date

用於顯示提示列表List


procedure FillData(DataLst: TStringList );
數據

begindi

......

end;


// 在選擇列表中的按鍵處理

procedure TForm1.lbSerachKeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

var

  i: Integer;

begin

  if Key = 13 then // 回車鍵

  begin

    for i := 0 to lbSerach.Items.Count - 1 do // 查找用戶選取的數據項

    begin

      if lbSerach.Selected[i] then

      begin

        edt1.Text := lbSerach.Items[i];

        lbSerach.Visible := False;

        edt1.SetFocus;

        Exit;

      end;

    end;

  end else


  if Key = VK_UP then  // 回到編輯框

  begin

    if lbSerach.ItemIndex = 0 then

    begin

      lbSerach.ItemIndex := -1;          // 不起做用

      lbSerach.Selected[0] := False;    // 不起做用

      edt1.SetFocus;

    end;

  end;

end;


// 編輯框內容變化處理

procedure TForm1.edt1Change(Sender: TObject);

var

  i: Integer;

  str: string;

begin

  str := TEdit(Sender).Text;

  lbSerach.Items.BeginUpdate;

  lbSerach.Clear; // 清除之前的內容


  for i := 0 to DataLst.Count - 1 do  // 從可用數據中選出 匹配項 最多 15個

  begin

    if pos(str, DataLst[i]) > 0 then 

    begin

      lbSerach.Items.add(DataLst[i]);

      if lbSerach.Items.Count > 15 then

        Break;

    end;

  end;

  lbSerach.Items.EndUpdate;

  lbSerach.Visible := lbSerach.Items.Count>0;

end;


// 編輯框按鍵處理

procedure TForm1.edt1KeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

  if lbSerach.Visible then

  begin

    if Key = VK_DOWN then

      lbSerach.SetFocus;

    lbSerach.Selected[0] := True;

  end;

end;

相關文章
相關標籤/搜索