Автор | Сообщение |
|
| |
Пост N: 25
Зарегистрирован: 23.07.09
|
|
Отправлено: 06.07.14 16:08. Заголовок: Динамический поиск в базе при вводе символов предполагаемого значения поля
Всем - "ЗдрасЬте"! Прошу дайте идею как реализовать в Clipper/Harbour следующую ситуацию: при вводе значения поля, тебе выскакивает подсказка из возможных вариантов. Ну примерно как в Google при задании строки поиска! Пример: поиск работника (его реквизиты, ну типа даты рождения, табельный/налоговый номер и т.д.), ввожу первые буквы имени/фамилии, а мне сразу похожих - список вываливается!, и, если среди них есть тот, который нужен, то достаточно просто передвинуться на "него". А далее ... . Может подобное кто-то реализовывал? Get, Inkey - не могу представить, как этим воспользоваться!
|
|
|
Новых ответов нет
[см. все]
|
|
|
| постоянный участник
|
Пост N: 3477
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.07.14 21:12. Заголовок: Gray пишет: ввожу п..
Gray пишет: цитата: | ввожу первые буквы имени/фамилии |
| Нужно проиндексировать базу по Фамилии. Потом при показе базы делать ввод по буквам и показ найденного. Можно через INKEY(), но тогда нужно делать свой обработчик по вводу букв.
|
|
|
|
| постоянный участник
|
Пост N: 365
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.07.14 08:51. Заголовок: Gray для dbEdit (Ac..
Gray для dbEdit (Achoice) можно что то такое (с индексом на нужном поле): Скрытый текст
STATIC cBuf := '', lBuf := .F. ... FUNCTION User_Func( nMode, nColPos ) // User function in dbEdit LOCAL RetVal := DE_CONT,nKey := LastKey(),nCol,nRow IF nMode == DE_IDLE // 0 cMode := "DE_IDLE" ... ELSEIF nMode == DE_HITTOP // 1 cMode := "DE_HITTOP" ... ELSEIF nMode == DE_HITBOTTOM // 2 cMode := "DE_HITBOTTOM" ... ELSEIF nMode == DE_EMPTY // 3 cMode := "DE_EMPTY" ... ELSEIF nMode == DE_EXCEPT // 4 cMode := "DE_EXCEPT" ... ELSE // 5 cMode := "OTHERWISE" IF nKey == K_F6 // вкл.\выкл. режим подвода lBuf := ! lBuf IF ! lBuf cBuf := '' ENDIF ELSEIF lBuf // в режиме подвода IF nKey == 8 .and. len(cBuf) > 0 // BACKSPACE cBuf := left(cBuf, len(cBuf) ELSEIF nKey >= 32 .and. nKey < 255 cBuf += chr(nKey) ENDIF IF len(cBuf) > 0 ordScope( 0, cBuf ) // или SET SCOPE TO cBuf, cBuf ordScope( 1, cBuf ) // ELSE ordScope( 0, NIL ) // SET SCOPE TO ordScope( 1, NIL ) // ENDIF dbGotop() // можно просто подвод, не Scope использовать ELSE // OTHERWISE ... ENDIF ENDIF ... RETURN RetVal
|
|
|
|
|
| постоянный участник
|
Пост N: 366
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.07.14 09:17. Заголовок: вдогонку не забыть п..
вдогонку не забыть поставить в конце "режима подвода": nRetVal := DE_REFRESH я забыл.
|
|
|
|