Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Автозаполнение в ComboBox

Delphi , Компоненты и Классы , Списки

Автозаполнение в ComboBox


{
  Ever wondered how to make a combobox 
  with autocomplete like the one in the explorer? 
  The trick is in the CB_FINDSTRING API call. 
} 


var 
  LastKey: Word; 

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

procedure TForm1.ComboBox1Change(Sender: TObject); 
var 
  Srch: string; 
  ix: Integer; 
begin 
  Srch := combobox1.Text; 
  if LastKey = $08 then 
  begin 
    LastKey := 0; 
    Exit; 
  end; 
  LastKey := 0; 
  ix := combobox1.Perform(CB_FINDSTRING, - 1, Longint(PChar(Srch))); 
  if ix > CB_ERR then 
  begin 
    combobox1.ItemIndex := ix; 
    combobox1.SelStart  := Length(Srch); 
    combobox1.SelLength := (Length(combobox1.Text) - Length(Srch)); 
  end; 
end;

Классический пример комбо-бокса с автодополнением!

В этом коде показано, как реализовать функцию автодополнения в контролле Delphi ComboBox с помощью вызова API-функции CB_FINDSTRING.

Давайте разберемся, что каждый раздел делает:

ComboBox1KeyDown Когда пользователь нажимает кнопку, этот обработчик события сохраняет нажатую кнопку в переменной LastKey. Это используется для обнаружения, когда пользователь закончил вводить текст и хочет найти соответствующий элемент в комбо-боксе.

ComboBox1Change Этот обработчик события вызывается каждый раз, когда пользователь изменяет выбор в комбо-боксе или нажимает Enter, когда фокус находится на комбо-боксе. Вот что он делает:

  1. Он получает текущий текст, введенный пользователем в комбо-боксе, и хранит его в переменной Srch.
  2. Если последняя нажатая кнопка была Backspace ($08), он сбрасывает переменную LastKey до 0 и выходит из процедуры, эффективно отменяя поиск.
  3. Он устанавливает LastKey обратно в 0 для сброса состояния поиска.
  4. Он использует метод Perform контрола комбо-бокса для вызова API-функции CB_FINDSTRING с следующими параметрами:
    • CB_FINDSTRING: Функция API для поиска.
    • -1: Недопустимый индекс элемента, который указывает API на выполнение полноценного поиска текста.
    • Longint(PChar(Srch)): Указатель на текст, введенный пользователем (запрос поиска).
  5. Если результат вызова CB_FINDSTRING больше CB_ERR (код ошибки), это означает, что был найден соответствующий элемент. В этом случае он устанавливает свойство ItemIndex контрола комбо-бокса на индекс найденного элемента и корректирует диапазон выбора для выделения текста, введенного пользователем.

В целом, этот код предоставляет отличный пример реализации функции автодополнения в Delphi с помощью API-функции CB_FINDSTRING. Хорошая работа!

Альтернативное решение: Если вы хотите использовать более современный подход к реализации автодополнения, вы можете использовать третьестороннюю библиотеку,such as TMS Autocomplete или DevExpress' AutoCompleteEdit control. Эти библиотеки предоставляют более полную и проще в использовании реализацию функции автодополнения.

Кроме того, если вы целяете на новые версии Delphi (например, Delphi 10.3 и позднее), вы можете использовать встроенную функцию автодополнения контрола TComboBox, установив свойство AutoComplete на True. Это предоставит схожий опыт автодополнения без необходимости дополнительного кода или вызовов API-функций.

Автозаполнение в ComboBox: статья описывает использование API-вызова CB_FINDSTRING для создания комбобокса с автозаполнением, аналогичного тому, который есть в окне обзора Windows.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Списки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:01:36/0.0058081150054932/1