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] А.С.Пушкин |
|