Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Предугадывание в COMBOBOX / 4 сообщений из 4, страница 1 из 1
22.03.2007, 12:40
    #34408359
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадывание в COMBOBOX
Привет!

Много раз в разных прогах видал такой прикол - вводишь что-то в поле, а справа, выделенное синим, дописывается предполагаемое окончание набираемого, причем первое из найденных значений с набранным началом.
Нечто подобное наблюдается в COMBOBOX, если его STYLE = 2, но не 0, как по-умолчанию. Если в таком случае очень быстро набирать, то будет происходить поиск по списку ближаейшего подобного значения.
Но что делать в случае, когда STYLE = 0? Т.е. когда есть возможность и новое внести, и чтоб если существующее, то справа "добивалось" предполагаемым + еще чтобы из списка выпадало отфильтрованное по набранному началу? Это только собственными усилиями делается, или есть такая готовая фича?

спасибо
...
Рейтинг: 0 / 0
22.03.2007, 14:10
    #34408759
-=AlexiS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадывание в COMBOBOX
Стандартного нет , нужно писать самому.
Если склероз мне не изменяет на фоксклубе видел готовые решения
...
Рейтинг: 0 / 0
23.03.2007, 16:12
    #34412202
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадывание в COMBOBOX
не знаю насколько грамотно, но наваял тут сам такое вот
Init
Код: plaintext
PUBLIC gsCasesNumbersFilter
InteractiveChange
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
IF NOT EMPTY(this.DisplayValue)
   * запомнить в глобальной переменной набранную юзером часть и по ней потом фильтр
   gsCasesNumbersFilter = ALLTRIM(this.DisplayValue)
   * выбрать базу комбы
   SELECT (SUBSTR(this.RowSource, 1 ,AT('.',this.RowSource)))
   * установить фильтр по набранной юзером части (надо чтоб SET EXACT OFF)
   SET FILTER TO CaseNumber = m.gsCasesNumbersFilter
   * стать на первую запись что удовлетворяет фильтру
   GO TOP
   * преполагаемая часть вводимого значения справа, что будет выделена
   lcSelectedEnd = RTRIM(SUBSTR(CaseNumber,LEN(m.gsCasesNumbersFilter)+ 1 ))
   * если таковая есть
   IF NOT EMPTY(m.lcSelectedEnd)
      * в комбо внести полное предполагаемое значение
      this.DisplayValue = m.gsCasesNumbersFilter + m.lcSelectedEnd
      * стать в конец строки
      KEYBOARD '{END}'
      * и начать выделение справа налево до последнего введеного юзером символа
      FOR m.lnI = LEN(m.lcSelectedEnd) TO  1  STEP - 1 
         KEYBOARD '{SHIFT+LEFTARROW}'
      ENDFOR
   ELSE
      * если нечего предположить - снять фильтр
      SET FILTER TO 
   ENDIF   
ELSE
   * если в комбо пусто - снять фильтр
   SELECT (SUBSTR(this.RowSource, 1 ,AT('.',this.RowSource)))
   SET FILTER TO
ENDIF
Destroy
Код: plaintext
RELEASE gsCasesNumbersFilter
в комбо выбираеццо значение CaseNumber
...
Рейтинг: 0 / 0
23.03.2007, 16:17
    #34412218
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадывание в COMBOBOX
да, и еще пришлось написать первыми строчками в
Valid
Код: plaintext
1.
this.DisplayValue = ALLTRIM(this.DisplayValue)
this.InteractiveChange
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Предугадывание в COMBOBOX / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]