Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2016, 15:10   #1
LISTAT
Пользователь
 
Регистрация: 27.10.2011
Сообщений: 50
Вопрос Фильтр списка ComboBox при вводе

Доброго времени суток.
Появилась задачка. Имеем ComboBox. В нем достаточно большой список (196 элементов), желание пользователя, чтобы при постановке курсора в поле ввода компонента и начала ввода, он в выпадающем списке оставлял только те данные, которые удовлетворяют вводимому значению (совпадают с начальной частью вводимого слова без учета регистра). Может кто сталкивался с таким. Буду благодарен любой полезной информации.
Заранее спасибо.
LISTAT вне форума Ответить с цитированием
Старый 01.04.2016, 15:45   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

я в исходниках GExperts for Delphi видел подобное. (см. например, http://www.gexperts.org/tour/procedure_list.html )
Можно оттуда забрать...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.04.2016, 22:46   #3
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Я конечно не эксперт и не знаю что там "в исходниках GExperts for Delphi", но по-моему можно сделать очень просто:
Код:
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
var tmp: string;
    i: integer;
begin
tmp:=AnsiUpperCase(ComboBox1.Text)+key;
for i:=0 to ComboBox1.Items.Count-1 do
begin
if PosEx(tmp,AnsiUpperCase(ComboBox1.Items[i]),1)>0 then
begin
ComboBox1.ItemIndex:=i;
break;
end;
end;
end;
У ComboBox1 установите свойство AutoDropDown в True...
kropotkina-alice вне форума Ответить с цитированием
Старый 01.04.2016, 23:15   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
но по-моему можно сделать очень просто:
можно. это будет позиционироваться на первую подходящую запись.

Цитата:
и не знаю что там "в исходниках GExperts for Delphi"
в своё время очень полезная штукенция была.
но я о другом.

там при наборе строки список сразу фильтровался, в списке оставались только строчки, которые содержат введённую подстроку. пользоваться этим очень удобно.

вот, типа jQuery autocomplete. поиграйтесь https://jqueryui.com/autocomplete/
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.04.2016, 00:21   #5
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
можно. это будет позиционироваться на первую подходящую запись.
Это при вводе только одной буквы.
А вы попробуйте...
При наборе каждой следующей буквы будет позиционироваться еще более подходящая запись.
kropotkina-alice вне форума Ответить с цитированием
Старый 02.04.2016, 10:19   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Это при вводе только одной буквы.
При наборе каждой следующей буквы будет позиционироваться еще более подходящая запись.
Да, это это вижу.
Но убирать "лишние" элементы иногда намного эффективней.
я могу набросать вам примеры про несортированный список, но, думаю, что Вы и сами понимаете отличие.

кстати, Вы с демкой autocomplete поигрались? Неужели неудобно?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.04.2016, 08:03   #7
LISTAT
Пользователь
 
Регистрация: 27.10.2011
Сообщений: 50
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Да, это это вижу.
Но убирать "лишние" элементы иногда намного эффективней.
я могу набросать вам примеры про несортированный список, но, думаю, что Вы и сами понимаете отличие.

кстати, Вы с демкой autocomplete поигрались? Неужели неудобно?
Автозавершение это не совсем то что нужно.
Пробовал такой вариант
Код:
procedure TForm1.ComboBox1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var s: string;
begin
if key <> 13
then
  begin
  s:=combobox1.Text;                   // текст в combobox'е в переменную

  if Combobox1.Text<>''
  then
    begin
      Query1.Close;
      Query1.SQL.Clear;
      Query1.SQL.Add('SELECT Name');
      Query1.SQL.Add('FROM "country.db" Country');
      Query1.SQL.Add('WHERE	Name LIKE '''+Combobox1.Text+'%''');
      Query1.Open;
    end
  else
    begin
      Query1.Close;
      Query1.SQL.Clear;
      Query1.SQL.Add('SELECT Name');
      Query1.SQL.Add('FROM "country.db" Country');
      Query1.Open;
    end;

  Query1.First;                          // Заносим значения в список
  ComboBox1.Items.Clear;
  While not Query1.Eof do
    begin
      ComboBox1.Items.Add(Query1.Fields[0].Value);
      Query1.Next;
    end;

  if SendMessage(ComboBox1.Handle, CB_GETDROPPEDSTATE, 0, 0)<>1    // Открываем ComboBox
  then SendMessage(ComboBox1.Handle, CB_SHOWDROPDOWN, 1, 0);

  combobox1.Text:=s;               // переменную в combobox
  combobox1.SelStart:=200;         // переход в конец поля ввода
end;
end;
не совсем так как нужно работает(
LISTAT вне форума Ответить с цитированием
Старый 04.04.2016, 08:13   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Чего не на OnChange?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.04.2016, 12:00   #9
LISTAT
Пользователь
 
Регистрация: 27.10.2011
Сообщений: 50
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Чего не на OnChange?

Чтобы не срабатывало просто при выборе элемента списка мышкой.

Проблему победил. Всем спасибо!
LISTAT вне форума Ответить с цитированием
Старый 30.04.2016, 17:25   #10
Vadimshabalin
Новичок
Джуниор
 
Регистрация: 31.10.2015
Сообщений: 1
По умолчанию

Цитата:
Сообщение от LISTAT Посмотреть сообщение
Чтобы не срабатывало просто при выборе элемента списка мышкой.

Проблему победил. Всем спасибо!
Как победил? Можно код, пж
Vadimshabalin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры Настя Белова Microsoft Office Excel 3 14.05.2014 17:35
Фильтр с combobox в excel VinDiz Помощь студентам 0 25.12.2012 20:59
фильтрация по мере того как вводишь в combobox текст, чтобы предлагались только те результаты, которые соответствуют вводу justas1507 Microsoft Office Access 1 29.04.2011 16:04
Фильтр в Combobox-e Even Microsoft Office Excel 2 13.01.2010 14:05
как сделать фильтр для списка combobox ? sergey113 Помощь студентам 2 13.08.2008 16:29