| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Выпадающий список в ComboBox |
| Автор: Albinos_x 23.4.2005, 11:24 |
| Тут возник у меня вопрос: Как сделать фильтрацию в выпадающем списке в ComboBox, в зависимости от набраемой строки. Т.е. сделать приблизительно то же, что и в Делфи по нажатью "Ctrl+Space" только в ComboBox-е |
| Автор: Garmahis 23.4.2005, 11:34 | ||
Пример помойму из DRKB
|
| Автор: Albinos_x 23.4.2005, 12:00 | ||
| Не... этот код не делает фильтрацию... Он просто выбирает по набронному из списка тоже самое можно сделать
|
| Автор: Pakshin A. S. 23.4.2005, 12:45 | ||
Где в спрятанном ListBox'е хранится полный список... Добавлено @ 12:46 Вот только большой список не очень красиво работать будет... Добавлено @ 12:47 С тысячей быстро справляется... |
| Автор: Albinos_x 23.4.2005, 12:56 |
| У меня был подобный вариант, но в нем как и в этом возникает проблема: курсор при каждом выполнении процедуры перемещяется в начало текста, что приводит к тому что текст набирается в обратном порядке |
| Автор: Pakshin A. S. 23.4.2005, 13:27 | ||
|
| Автор: Albinos_x 23.4.2005, 13:46 |
| Большое спасибо! А есть возможность считывать положение курсора и его устанавливать в назначенную позицию? // допустим пользователь совершил опечатку. Он нажмет Del или BackSpase курсор переместится в конец - это не есть хорошо... |
| Автор: Pakshin A. S. 23.4.2005, 13:48 | ||||
Теперь еще можно и выбирать из списка элемент... и не бояться за ItemIndex... Добавлено @ 13:49
На предпоследнюю позицию... P. S. Пояcни конкретнее задачу про DEL... ^) |
| Автор: Albinos_x 23.4.2005, 14:02 | ||||
допустим пользователь набрал вместо Albinos_x -> Alninos_x, ему надо пеменять букву 'n' на букву 'b'. Он устанавливает курсор перед буквой 'n' и нажимает Del, курсор перемещяется в конец текста. Он по невнимательности нажимает 'b' и получает Alinos_xb. Даже если он будет внимательным, то каждый раз перемещять курсор не очень удобно...
Этот вариант не покатит |
| Автор: Pakshin A. S. 23.4.2005, 18:13 |
| Ok... щас доработаю исключения на данные клавиши... |
| Автор: Pakshin A. S. 23.4.2005, 18:44 | ||||||
| Идея такова: 1) Добавляем новую глобальную переменную
2) Делаем еще один обработчик
3) Изменяем процедуру:
А вот по поводу кнопочки Del... пока не получается... P. S. То, что надо реализовал? Или надо что-то иное? |
| Автор: Albinos_x 23.4.2005, 20:10 | ||
| к сожалению, нет... почти что как надо работает первый предложенный тобой вавриант... второй делает выборку по первому символу, а третий - последний - при удалении символов не возвращяет ранее отфильтрованное...Знаю в чём проблема, но не заню как решить. Решение было бы проще если можно было считывать и также устанавливать позицию курсора... Добавлено @ 20:17
с этим не получается потому, что Key почему-то не возвращяет значение нажатие этой кнопки.. я пробовал делать #46 {VK_DELETE}, но не помогает |
| Автор: Pakshin A. S. 23.4.2005, 20:57 |
| М-дя... Так... Скажи четко, что тебе нужно и я попробую все это реальзовать... Опиши различные ситуации и выборки... |
| Автор: Albinos_x 24.4.2005, 00:11 |
| Нужна фильтрация, чтобы в списке отображалось только то, что совпадает по маске с набранным(имеющимся) в комбобоксе. И чтобы с этим было удобно работать (имею ввиду что поведение курсора не должно отличатся от стандартного поверения) |
| Автор: Pakshin A. S. 24.4.2005, 08:07 |
| Ну первое, думаю уже реализовано... причем работает нормально... Теперь второе... что подразумевается под "поведение курсора не должно отличатся от стандартного поверения"... Идеально - приведи пример типа такого: 1) Вводим ыва 2) Переходим в позицию и нажимаем что-то 3) У нас должно получиться то-то... 4) и т. д. и т. п. |
| Автор: Albinos_x 24.4.2005, 12:20 |
| Пример: 1. введено 'Alninos_x|' 2. переходим в позицию 'Al|ninos_x' или 'Aln|inos_x' 3. нажимием #Del или #BackSpace cooтветственно 4. получаем 'Al|inos_x' 5. нажимаем 'b' 6. получаем ' Alb|inos_x' где | - позиция курсора PS: в принципе, выше есть пример. Просто, в проге хочу учесть все возможные действия пользователя и совместить с удобством работы в ней |
| Автор: Pakshin A. S. 24.4.2005, 12:35 | ||
| Делаем упомянутый выше обработчик на нажатие клавиши... и изменяем процедуру:
|
| Автор: Albinos_x 24.4.2005, 13:05 | ||
| В этом случае курсор перемещяется в начало текста... что в принципе не отличается от других вариантов... Ладно сделаю пока так как есть... Вот что получилось:
|
| Автор: Pakshin A. S. 24.4.2005, 13:19 | ||
О! Вспомнил.... Вроде так получится
Да, так работает... курсор сохраняет позицию... Добавлено @ 13:20 Кстати, а почему ты не изменяешь ItemIndex? У меня без него нельзя было выбрать корректно элемент из списка... |
| Автор: Albinos_x 24.4.2005, 14:27 | ||||
| Ок!!! Всё работает!!! Внес изменения в
Не заметил косяк, увлёкся фильтрацией и курсором... Спасибо за замечание!... Спавибо за оказанную помощь!!! Добавлено @ 14:32 Pakshin A. S. +1 |
| Автор: Pakshin A. S. 24.4.2005, 14:32 |
| Не за что... рад немного подсобить... обращайся, если что не так пойдет... |