Delphi World - Автозаполнение строки ввода TComboBox в момент набора текста
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Автозаполнение строки ввода TComboBox в момент набора текста

Автор: Lipskiy
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Автозаполнение строки ввода ComboBox в момент набора текста

Процедура выполняет операцию автозаполнения текста по аналогии с
вводом адреса в Internet Explorer - при наборе строки автоматически
вставляется первая совпадающая с набранной строка из списка ComboBox.
Легко переделать для TEdit и подобных.
Параметр LastLength должен быть объявлен глобальной переменной -
он исключает автозаполнение при удалении символов в строке.

Зависимости: StdCtrls, SysUtils
Автор:       lipskiy, lipskiy@mail.ru, ICQ:51219290, Санкт-Петербург
Copyright:   Собственное написание (Сергей Кириллов)
Дата:        10 мая 2002 г.
***************************************************** }

procedure AutoInsertComboBoxItem(ComboBox: TCombobox; var LastLength: integer);
var
  i, ln: integer;
begin
  // Сравниваем длину текста, если новая длина меньше старой -
  // значит было удаление символов и автоподбор не нужен
  if Length(ComboBox.Text) <= LastLength then
  begin
    LastLength := Length(ComboBox.Text);
    exit;
  end;
  // Запоминаем длину текста для следующего вызова процедуры
  LastLength := Length(ComboBox.Text);
  // Ищем в списке начала строк, совпадающие с введенным текстом
  for i := 0 to ComboBox.Items.Count - 1 do
  begin
    // Для поиска с учетом регистра:
    //if Copy(ComboBox.Items[i],1,Length(ComboBox.Text)) = ComboBox.Text then
    // Для поиска без учета регистра:
    if Copy(AnsiUpperCase(ComboBox.Items[i]), 1, Length(ComboBox.Text)) =
      AnsiUpperCase(ComboBox.Text) then
    begin
      ln := length(ComboBox.Text);
      // Вставляем текст
      ComboBox.Text := ComboBox.Items[i];
      // Выделяем добавленный блок текста
      ComboBox.SelStart := ln;
      ComboBox.SelLength := Length(ComboBox.Items[i]) - ln;
      break;
    end;
  end;
end;

// Пример использования:

var
  Form1: TForm1;
  EndL: integer;

implementation

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  AutoInsertComboBoxItem(ComboBox1, EndL);
end;
Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования