Страница 1 из 1

Edit with Autocomplete

Добавлено: 25 янв 2009, 13:22
Decoder
Как бы мне добавить к полю Edit выпадающий список со строками, начинающимися на первые буквы, набранные в поле Edit? На подобие того, как в адресной строке веб-браузера.

Re: Edit with Autocomplete

Добавлено: 25 янв 2009, 13:59
Romeo
Правильно этот список называется Auto Complete.

Ключевые понятия, по которым нужно начинать поиск в MSDN это:

- Shell function SHAutoComplete
- Interface IAutoComplete
- Interface IAutoComplete2
- Interface IAutoCompleteDropDown
- Interface IEnumString

На RSDN даже примерчик есть:
http://www.rsdn.ru/Forum/Info/FAQ.winap ... plete.aspx

Если что-то не понятно, обращайся - помогу.

Re: Edit with Autocomplete

Добавлено: 25 янв 2009, 18:50
WinMain
Из всего перечисленного реально можно использовать лишь функцию SHAutoComplete из-за её простоты. Но её применение ограничено именами файлов и строками URL. От использования интерфейсов типа IAutoComplete лучше отказаться сразу, чтобы долго не мучиться с имплементацией интерфейсов. Одно дело, если у тебя всего один такой Edit в приложении, а другое дело, когда на форме может быть несколько таких Edit'ов и у каждого свой список строк.
К тому же могут возникнуть проблемы со скоростью работы данных интерфейсов. Если в списке всего несколько сотен строк, то это не так заметно будет, а если количество строк измеряется десятками тысяч (к примеру, справочник из базы данных), то замедление может оказаться весьма ощутимым. Для примера, попробуй в обычный ComboBox записать 100 тысяч строк и посмотри сколько времени это занимает. Когда в окне приложения несколько таких полей со списками, то их загрузка превращается в серьёзный тормоз...
Я когда-то уже сталкивался с подобной проблемой и в результате у меня появилось своё фирменное решение.
Мне пришлось отказаться от СОМ-интерфейсов, а использовать обычный субкласс на платформе MFC. В итоге у меня получился элемент с выпадающим списком, по виду как обычный ComboBox, но скорость загрузки данных в него на порядок выше, чем у стандартного ComboBox'a. При наборе строки в поле Edit, происходит поиск соответствующей строки в выпадающем списке и автоматическое добавление остальной части текста из подходящей строки. Добавление и удаление строк в список происходит как в обычном ComboBox'e (AddString, DeleteString).
Если выпадающий список статический (т.е он не изменяется в процессе работы приложения), то его легко можно загружать из ресурсов приложения.
В прилагаемом примере демонстрируется работа данного элемента...

http://winmain.epage.ru/QCombo/info.html

Re: Edit with Autocomplete

Добавлено: 26 янв 2009, 20:11
Decoder
Спасибо, что подсказали. А мне ведь и правда нужно из базы грузить список. Я пока не знаю, каков будет объем этого списка, но не хотелось бы из-за этого иметь проблемы с загрузкой, да и не хочется долго возиться с имплементацией методов. Что-нибудь по-проще бы найти.
WinMain, а как мне твой элемент попробовать? У тебя ведь в примере только бинарник, а исходников нет. С меня пиво, как обычно... ;)