16.09.2003, 11:17 | #1 |
Участник
|
Как отключить автозаполнение StringEdita
Добрый день (ночь/утро/вечер)
Наблюдаю уже который день неприятный эффект, и никак не могу его побороть. На форме есть StringEdit, перекрыта обработка TextChange, в котором анализируется что ввел пользователь и делается предположение что он может ввести (поиск по таблице по началу фразы). Затем, предположительно недостающий кусок текста пишется в stringEdit и выделяется. Проблема в том, что выделение исчезает, причем не всегда, а случайным образом. Предполагаю, что это происходит от того, что есть штатные средства автозаполнения, которые конфликтуют с моим. Т.е. завидив текст в окне (а они видать тоже на textChange привязаны), не принимая во внимание того, что часть текста выделена, ищут в своем кеше че бы подсосать еще, и не найдя ничего нового просто сбрасывают мое выделение самым гнусным образом. Потому и вопрос, может кто знает как отключить автозаполнение в конкретном элементе конкретной формы??? Гипотезу про автозаполнение подтверждает то, что после переименования формы неприятный зффект на время прекращается. и еще, super в textChange уже отключал, перекрывал все методы (по очереди) в форме, элементе и даже датасорсе ставя в них выделение текста по новой - все напрасно. |
|
16.09.2003, 11:32 | #2 |
Moderator
|
Если я правильно понял, то может это:
Сервис->Параметры->Разное->Автозавершение текста ? |
|
16.09.2003, 11:40 | #3 |
Banned
|
Автору в отдельно взятом поле нужно. По-моему, никак.
|
|
16.09.2003, 12:42 | #4 |
Участник
|
Отключил автозавершение и окончательно убедился, что дело именно в нем. Но вот нужно действиетльно отключить на конкретное поле (или форму). Ведь есть же способ глобально его отключить (может кто знает где посмотреть как это реализовано), наверное можно и локально. Может кеш для окна вычистить, или при входе в окно выключать автозавершение, а при выходе включать (програмно, конечно).
Спасибо всем откликнувшимся. |
|
16.09.2003, 13:48 | #5 |
Banned
|
Ок, программно отключать и включать глобально - это, может быть, выход. Тогда изучайте форму SysUserSetup. Особенно методы \Forms\SysUserSetup\Data Sources\UserInfo\Methods\autoComplete и \Forms\SysUserSetup\Methods\setSetup.
|
|
30.09.2003, 11:12 | #6 |
Участник
|
Включать и выключать автозаполнения глобально не стал, боязно как-то. Ведь может глюкануть че нить и не включиться потом, а пользователь мучаться будет без атозавершения... И они же запуганные, пользователи, никому ничего и не скажут, будут думать что все так и надо.
Зато нашел другой способ, лучше. Оказывается, можно отключать автозаполнение не только у конкретной формы, но и у конкретного контрола! Мало того, можно даже заставить работать штатный механизм автозавершения на себя! У класа ФормРан есть методы: delAutoCompleteString - очищает буфер автозавершения для контрола/формы maxNoOfAutoCompleteStrings - Задает размер буфера. Буфер заполняется при закрытии формы. Вызываю в Ините формы первый метод без параметра, второй с нулем, и автозавершение для формы чудесным образом перестает работать. Кроме того, ест еще методы setAutoCompleteString и getAutoCompleteString, с их помощью можно заставить работать автозавершение на себя. А на последок, хочу задать пару простых вопросов, которые пока еще не смог победить сам. 1. Как бы обработать изменение выделения или перемещение курсора в стринг контроле пользователем? Автозавершение текста работает, а вот подтверждение автозавершения я обработать по-нормальному не могу, а нада. 2. Пытался решать предыдущую проблему в методе task, так в нем строку автозавершения видно буквально через раз. Чушь какая-то, пришлось даже завести переменную, писать в нее автозавершение, а потом читать в Таске. Может кто какую мыслю интересную подскажет. |
|
|
За это сообщение автора поблагодарили: IvanS (1), Player1 (1). |