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

ComboBox с поиском по возрастанию

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

Нужно сделать так, чтобы в ComboBox при вводе символов работал поиск по возрастанию? В настоящее время в ComboBox используется только первый символ, но что делать, если несколько элементов списка начинаются с одной буквы? ComboBox ведет себя не так, как хотелось бы.

Чтобы это реализовать, создайте новый ComboBox, унаследованный от TCustomComboBox и измените его событие Change всего в нескольких строках:


{...}
protected
  procedure Change; override;
{...}

procedure TExtComboBox.Change;
var
  str: String;
  Index: Integer;
begin
  inherited Change;
  str := Text;
  if (FLastKey = VK_DELETE) or (FLastKey = VK_BACK) then
  begin
    SelStart := Length(str);
    SelLength := 0;
    Exit;
  end;
  { попытаемся найти самый близкий соответствующий элемент }
  Index := Perform(CB_FINDSTRING, -1, LPARAM(str));
  if Index <> CB_ERR then
  begin
    ItemIndex := Index;
    SelStart := Length(str);
    SelLength := Length(Items[Index]) - SelStart;
  end
  else
    Text := str;
  { вызываем стандартное событие }
  if Assigned(FOnChange) then
    FOnChange(Self);
end;

Вот и все! Почувствуй разницу!


 

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


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