|  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). | |
| Теги | 
| поиск, фильтр | 
|  | 
| 
 |