Используйте функцию автозаполнения , встроенную во все элементы управления редактирования Windows.
Сначала заполните объект TStrings
, как хотите. Затем используйте GetOleStrings
, чтобы создать TStringsAdapter
, чтобы обернуть его. (Адаптер не претендует на владение объектом TStrings
, поэтому вы должны быть уверены, что не уничтожите его, пока адаптер еще работает.) Адаптер предоставляет вам интерфейс IStrings
, который вам понадобится, потому что Функция автозаполнения требует интерфейса IEnumString
для обеспечения совпадений завершения. Для этого позвоните _NewEnum
.
Затем вызовите CoCreateInstance
, чтобы создать объект IAutoComplete
. Вызовите метод Init
, чтобы связать его с дескриптором окна вашего элемента управления редактирования. Если вы используете поле со списком, отправьте ему сообщение cbem_GetEditControl
, чтобы найти основное окно редактирования.
В этот момент вы можете остановиться, и автозаполнение должно работать автоматически. Вы можете отключить автозаполнение, если хотите, или можете установить любое количество параметров автозаполнения .
Вы говорите, что не хотите автозаполнения, но в терминологии ОС, я думаю, что вы действительно не хотите, называется auto append , где оставшаяся часть строки вводится в поле ввода. автоматически по мере того, как пользователь печатает, но выбирается так, что дальнейшая печать будет перезаписывать его, и пользователь должен удалить лишний текст, если желаемое значение короче одного из совпадений.
Существует также автоматическое предложение , в котором отображается раскрывающийся список предложений.
Вы можете включить одну или обе опции. Вам не нужно самостоятельно фильтровать список предложений; объект автозаполнения самостоятельно фильтрует список IEnumString
.