|  23.09.2008, 20:54 | #1 | 
| Модератор |  Как убрать автопоиск по "*" для Lookup? 
			
			На форме есть StringEdit по полю DS для него перекрыт метод lookup. Хочу напечатать Р1.10.1* но не получается.. сразу выпадает данный lookup. Хотя когда я пишу Р1.10.10 все нормально. Как мне избавиться в контроле от слежки за "*"? Чтоб на нее не реагировал контрол? Какие свойства у контрола надо выставить? Надо чтоб выпадал список только, когда я мышкой нажал на кнопку выпадающего списка. код метода lookup аналогичен lookup не олучается | 
|  | 
|  24.09.2008, 00:46 | #2 | 
| Участник | 
			
			В голову приходит только проверка нажатия кнопки * в момент обработки вызова лукапа. X++: public void lookup() { DLL _winApiDLL = new DLL('USER32'); DLLFunction _getKeyState = new DLLFunction(_winApiDLL, 'GetKeyState'); #define.VK_MULTIPLY (0x6A) #define.VK_SHIFT (0x10) ; _getKeyState.returns(ExtTypes::Word); _getKeyState.arg(ExtTypes::DWord); if ((_getKeyState.call(#VK_MULTIPLY) & 0x8000 == 0) && !((_getKeyState.call(char2num("8", 1)) & 0x8000 != 0) && (_getKeyState.call(#VK_SHIFT) & 0x8000 != 0))) { // Вызываем super() или вставляем свой код для формирования лукапа } } 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | |
| За это сообщение автора поблагодарили: Lemming (1), Pustik (3), Poleax (1), Gustav (5), someOne (1). | |
|  24.09.2008, 10:23 | #3 | 
| Модератор | 
			
			Как все оказывается серьезно. Я думал решение какое нибудь простое. Хорошо AndyD, попробю | 
|  | 
|  24.09.2008, 11:27 | #4 | 
| MCTS | 
			
			Можно сделать немного проще... X++: // Методы формы public class FormRun extends ObjectRun { Boolean allowLookup; } public void run() { super(); allowLookup = true; } // Методы нужного контрола public void textChange() { super(); allowLookup = false; } public void lostFocus() { super(); allowLookup = true; } public void lookup() { if (allowLookup) super(); } | 
|  | 
|  24.09.2008, 11:38 | #5 | 
| Участник | 
			
			Если что-либо ввести в контрол руками, то до потери фокуса перестает работать ALT+DOWN
		 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  24.09.2008, 11:45 | #6 | 
| MCTS | Цитата: В принципе, если нужно еще и ALT+DOWN, то можно еще и в task формы вставить установку переменной в true по нажатию ALT. | 
|  | 
|  24.09.2008, 13:10 | #7 | 
| Moderator | 
			
			А можно спрятать эту "низкоуровневую высшую математику" в статический метод класса a-ля Global и тогда всё не так уж "серьезно".  Главное - ёмко обозвать (типа 31-символьным идентификатором  ) Ну, и слегка документировать. Спасибо, AndyD - я уже добавил в свой персональный "глобальный" класс следующий метод: X++: // позволяет не выпадать списку при добавление символа * в контрол с лукапом // пример использования: // public void lookup() // { // if (KKu::isNotAsteriskWhenTypingOnLookup()) // { // // Вызываем super() или вставляем свой код для формирования лукапа // } // } // Thanks to AndyD --> http: //www.axforum.info/forums/member.php?u=4803 // His X++ code from --> http: //www.axforum.info/forums/showthread.php?p=177771#post177771 static boolean isNotAsteriskWhenTypingOnLookup() { DLL _winApiDLL = new DLL('USER32'); DLLFunction _getKeyState = new DLLFunction(_winApiDLL, 'GetKeyState'); #define.VK_MULTIPLY (0x6A) #define.VK_SHIFT (0x10) ; _getKeyState.returns(ExtTypes::Word); _getKeyState.arg(ExtTypes::DWord); if ((_getKeyState.call(#VK_MULTIPLY) & 0x8000 == 0) && !((_getKeyState.call(char2num("8", 1)) & 0x8000 != 0) && (_getKeyState.call(#VK_SHIFT) & 0x8000 != 0))) { return true; // т.е. очередной символ - НЕ * } else { return false; // очередной символ - "звездочка" } } | 
|  | 
|  24.09.2008, 14:16 | #8 | 
| Участник | 
			
			Все конечно хорошо. Но все же спрошу: А зачем, собственно, нужно такое поведение, убирающее функциональность работы wildcard звездочки? | 
|  | 
|  24.09.2008, 14:56 | #9 | 
| Модератор | 
			
			kashperuk Собственно сие чудо используется в качестве параметра для фильтра в Query.  Лучше когда можно * написать, тогда все убодно отображается и фильтруется. А без нее совсем не интересно. Четко обозначенное значение не удобно использовать. Диапазон значение не подходит, лучше со * Да и вообще было просто интересно как обезвредить этот автоматический лукап по *. Ответ получил.. все счастливы. | 
|  | 
|  24.09.2008, 15:11 | #10 | 
| Участник | 
			
			Хм.  А кто мешает нажать escape при появлении лукапа и продолжить набор условия фильтрации? 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  24.09.2008, 15:40 | #11 | 
| Модератор | 
			
			1) не ну шустрые какие, уже из Программирования в другой раздел ушмыгнули темку. Иши-свищи потом. 2) Цитата: 
		
			А кто мешает нажать escape при появлении лукапа и продолжить набор условия фильтрации?
		
	 | 
|  | 
|  24.09.2008, 16:27 | #12 | 
| Moderator | Цитата:  Лично мне поднятый вопрос и получившаяся фишка нравятся. Иногда эта звездочка реально утомляет. Допустим хочу набрать критерий: C*,P*. Печатаю. Закончив, поднимаю глаза и вижу остановившуюся на C* строку и раскрытый список. Последние 3 символа потеряны. Подло! И не хочу я себя контролировать после каждой звездочки, чтобы нажимать Esc, и не хочу набирать критерий сначала в Ноутпаде, а потом копипастить его в бланк запроса. А с фишкой - наоборот, я могу заставить звездочку работать, когда мне (а не ей!) этого хочется, нажав Alt+Down. | 
|  | 
|  24.09.2008, 17:53 | #13 | 
| Гость | 
			
			печатать надо, глядя в монитор, а не на клавиатуру
		 | 
|  | 
|  27.02.2009, 16:43 | #14 | 
| Developer | 
			
			Вот и мне понадобилось отключить эту фичу когда прикручивал лукап к стандартной форме поиска в поле... Использую такой код (AX 3.0): X++: public void lookup() { if (substr(this.text(), this.charFromPos(conpeek(this.getCursorPos(), 1), conpeek(this.getCursorPos(), 2)), 1) != "*") { // Вызываем super() или вставляем свой код для формирования лукапа } } Последний раз редактировалось vallys; 27.02.2009 в 16:48. Причина: Добавил P.S. | 
|  | 
|  17.03.2009, 13:38 | #15 | 
| AX***** | 
			
			А не решит проблему на форме SysQueryForm для поля грида RangeValue установка SearchMode в значение Search After Input?
		 
				__________________ О, как беден, как груб наш русский язык! [c] А.С.Пушкин | 
|  |