27.02.2012, 16:37 | #1 |
Участник
|
StringEdit == Динамическая строка поиска
Здравствуйте коллеги.
Вопрос в следующем, загорелось мне сделать в аксапте всплывающее окошко для выбора пользователя системы. Стандартное показалось жутко неудобным, решил его доработать. Пожелания:
С первым и последним пунктом сложностей не возникло. А вот во втором все сделал с фильтрацией по modify() на StringEdit. Но не очень удобно, надо набирать текст и нажимать кнопку отфильтровать, или куда то переключиться, но окно лукап, поэтому вроде как не совсем удобно. Решил обновлять перечень записей при изменении значения в StringEdti. Попробовал завязаться на метод changeText(), но после того как он отрабатывает делаю executeQuery по источнику и фокус возвращается обратно на StringEdit c выделением всего текста. Выходит набрал букву, записи отфильтровались, текст в StringEdit выделился целиком, набираешь следующую все что было до этого стирается и имеем новый фильтр из последней буквы. Как можно победить сие? Ну и вопрос в догоночку, никто не знает лукап для ввода времени)?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
27.02.2012, 17:01 | #2 |
Ищущий знания...
|
а чем неподходит стандартный поиск в текстовом поле в звездочках?
(а*, или *а, или *а*)
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
27.02.2012, 17:50 | #3 |
Участник
|
Ну собственно я так и делаю, введенный текст накладываю как фильтр *а*. Хотелось сделать имитацию быстрого поиска.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
27.02.2012, 19:06 | #4 |
Британский учённый
|
У меня не получилось победить эту проблему, никак выделение не хотело убираться из кода, только руками. Даже винапи не помог.
Пришлось оставить эту идею...
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
28.02.2012, 03:15 | #5 |
Участник
|
Для того чтобы избежать выделения всего текста фильтра после changeText() нужно перекрыть метод enter на контроле:
public void enter() {; super(); this.setSelection( strlen(this.text()), strlen(this.text())); } |
|
|
За это сообщение автора поблагодарили: Link (2). |
28.02.2012, 06:20 | #6 |
Участник
|
Все получилось) Спасибо за советы. Перекрыл два метода и все заработало.
X++: public void textChange() { ; super(); [lastPosFrom, lastPosTo] = this.getSelection(); userInfo_ds.executeQuery(); } X++: public void enter() { super(); this.setSelection(lastPosFrom, lastPosTo); }
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
28.02.2012, 08:08 | #7 |
Участник
|
А механизм SearchMode = "Search On Typing" вам не подходит?
|
|
|
За это сообщение автора поблагодарили: KingPeas (1). |
28.02.2012, 08:16 | #8 |
Участник
|
Натыкался при поиске, но так и не понял как работает данная настройка.
Поэкспериментировал, ищется запись если контрол связан с источником данных и ищет по начальному значению с переходом к данной записи без удаления из списка других записей. Добавил к себе на форму, может кому тоже так будет удобней). Я себе ставил задачу поиск по части текста с фильтрацией количества записей, поэтому это несколько другое Приложил результат, может кому пригодиться. В верху кнопка очистка фильтра, два фильтра по коду и по имени, список пользователей и внизу две кнопки выбрать себя и отмена. Выбор из списка по двойному клику.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. Последний раз редактировалось KingPeas; 28.02.2012 в 09:08. |
|
28.02.2012, 14:46 | #9 |
Британский учённый
|
К сожалению эта функция не работает так, как хотелось бы. Даже казалось бы в таком простом случае, как поиск по ключу, который не редактируется, этот вариант уже не будет работать.
К тому же очень удобно иметь возможность поиска по любому участку искомой строки и самому определять логику поиска.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
28.02.2012, 22:24 | #10 |
Участник
|
По моему для поиска по фамилии в карточке вполне подходит) Я использовал оба метода)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
28.02.2012, 22:58 | #11 |
Боец
|
Добавлю полезную фичу )
Для своего поискового поля отлавливайте нажатия клавиш ArrowUp\Down. Набрав часть имени в фильтре и получив по маске несколько строк результата, у вас дополнительно появится возможность клавишами вверх\вниз спозиционироваться на нужную строку. Это очень очень удобно для привыкших работать с клавиатурой. для этого вам понадобится ф-я element.installMessageProc(): метод init() формы: X++: public void init() { super(); this.installMessageProc(#WM_KEYDOWN, editfilterControlName.hWnd(), identifierstr(onEventKeyDown)); } X++: void onEventKeyDown(anyType _a = '', anyType _b = '', anyType _vkKey = '', anyType _d = '', anyType _e = '', anyType _f = '') { ; switch (_vkKey) { case #arrowUp: table_ds.prev(); break; case #arrowDown: table_ds.next(); break; default: break; } } http://earlionakru.blogspot.com/2009_02_01_archive.html Где же это поле?! (Form digger) |
|
|
За это сообщение автора поблагодарили: KingPeas (2), S.Kuskov (5). |
29.02.2012, 03:29 | #12 |
Британский учённый
|
Цитата:
А вот быстрый поиск по части строки это то что нужно, теперь можно снабдить пользователей нормальными фильтрами!
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
29.02.2012, 03:33 | #13 |
Британский учённый
|
Цитата:
Сообщение от DSPIC
Пример можно посмотреть:
http://earlionakru.blogspot.com/2009_02_01_archive.html Где же это поле?! (Form digger) Есть желание прикрутить ее функционал к поисковой строке табакса, и сделать её умной, что бы искала по активной форме и по части строки Как только появится время займусь. Буду делать плагином.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
29.02.2012, 22:35 | #14 |
Участник
|
Цитата:
Сообщение от DSPIC
Добавлю полезную фичу )
Для своего поискового поля отлавливайте нажатия клавиш ArrowUp\Down. Набрав часть имени в фильтре и получив по маске несколько строк результата, у вас дополнительно появится возможность клавишами вверх\вниз спозиционироваться на нужную строку. Это очень очень удобно для привыкших работать с клавиатурой. для этого вам понадобится ф-я element.installMessageProc(): метод init() формы: X++: public void init() { super(); this.installMessageProc(#WM_KEYDOWN, editfilterControlName.hWnd(), identifierstr(onEventKeyDown)); } X++: void onEventKeyDown(anyType _a = '', anyType _b = '', anyType _vkKey = '', anyType _d = '', anyType _e = '', anyType _f = '') { ; switch (_vkKey) { case #arrowUp: table_ds.prev(); break; case #arrowDown: table_ds.next(); break; default: break; } } http://earlionakru.blogspot.com/2009_02_01_archive.html Где же это поле?! (Form digger)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
29.02.2012, 22:36 | #15 |
Участник
|
Поля сохраняются и восстанавливаются через xSysLastValue)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. Последний раз редактировалось KingPeas; 29.02.2012 в 22:40. |
|
02.03.2012, 05:28 | #16 |
Участник
|
Добавил на форму галочку для отлючения автоматического сохранения настроек.
В первом поле можно набирать для быстрого поиска код пользователя, во втором наименование. При этом внизу автоматически идет сортировка по набранному тексту *текст*. При помощи стрелок вверх и вниз перемещаться по списку оставаясь в поле поиска и выбирать текущую запись для передачи по Enter. Для сброса фильтра используется кнопка рядом с полями. Выбор из списка может быть выполнен мышкой, двойным кликом по записи в таблице. Также внизу присутствует три кнопки для выбора себя (как сегодня в выборе даты), текущей записи и отказаться от выбора. Если отмечен признак Помнить то текущие настройки сохраняются для формы при закрытии и при повторном вызове будут восстановлены.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
|
За это сообщение автора поблагодарили: Dino (0). |
Теги |
поиск, фильтр |
|
|