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