Карта сайтаСсылкиКонтакты

Автопоиск в TComboBox

PDF Печать
Статьи

Простое решение, которое Вы можете приспособить под Ваши требования.

Не забудьте установить свойство Sorted в True.

Добавьте переменную в секцию var Вашей формы:


var
  lastKey: Word;

Поместите следующие строки в событие OnChange Вашего TCombobox:


procedure TForm1.AutoCompleteChange(Sender: TObject);
var
  SearchStr: string;
  retVal: integer;
begin
  // копируем образец поиска
  SearchStr := (Sender as TCombobox).Text;
  // backspace: VK_BACK или $08
  if lastKey = VK_BACK then
  begin
    retVal := (Sender as TCombobox).Perform(
        CB_FINDSTRING, -1, LongInt(PChar(SearchStr)));
    if retVal > CB_Err then
    begin
      (Sender as TCombobox).ItemIndex := retVal;
      (Sender as TCombobox).SelStart := Length(SearchStr);
      (Sender as TCombobox).SelLength :=
      (Length((Sender as TCombobox).Text) - Length(SearchStr));
    end; // retVal > CB_Err
  end; // lastKey VK_BACK
  // сбросим lastKey
  lastKey := 0;
end;

Поместите следующие строки в событие OnKeyDown Вашего TCombobox:


procedure TForm1.AutoCompleteKeyDown(
    Sender: TObject; var Key: Word;
    Shift: TShiftState);
begin
  lastKey := Key;
end;

По материалам http://delphi.3000.com


 

Добавить комментарий


Защитный код
Обновить