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

Тема в разделе "Delphi", создана пользователем WinHack, 24 ноя 2016.

  1. WinHack
    Нужно сделать так, чтобы в 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;
    Вот и все! Почувствуй разницу!