AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.09.2008, 20:54   #1  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
? Как убрать автопоиск по "*" для Lookup?
На форме есть StringEdit по полю DS для него перекрыт метод lookup.
Хочу напечатать Р1.10.1* но не получается.. сразу выпадает данный lookup.
Хотя когда я пишу Р1.10.10 все нормально.

Как мне избавиться в контроле от слежки за "*"? Чтоб на нее не реагировал контрол?
Какие свойства у контрола надо выставить?

Надо чтоб выпадал список только, когда я мышкой нажал на кнопку выпадающего списка.

код метода lookup аналогичен lookup не олучается
Старый 24.09.2008, 00:46   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
В голову приходит только проверка нажатия кнопки * в момент обработки вызова лукапа.
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  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Как все оказывается серьезно. Я думал решение какое нибудь простое.
Хорошо AndyD, попробю
Старый 24.09.2008, 11:27   #4  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Можно сделать немного проще...

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  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Если что-либо ввести в контрол руками, то до потери фокуса перестает работать ALT+DOWN
__________________
Axapta v.3.0 sp5 kr2
Старый 24.09.2008, 11:45   #6  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от AndyD Посмотреть сообщение
Если что-либо ввести в контрол руками, то до потери фокуса перестает работать ALT+DOWN
Ну вообщем-то да. Однако в исходном условии сказано, что необходима работа лукапа только по клику на кнопку лукапа.
В принципе, если нужно еще и ALT+DOWN, то можно еще и в task формы вставить установку переменной в true по нажатию ALT.
Старый 24.09.2008, 13:10   #7  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Poleax Посмотреть сообщение
Как все оказывается серьезно.
А можно спрятать эту "низкоуровневую высшую математику" в статический метод класса 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  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Все конечно хорошо. Но все же спрошу:
А зачем, собственно, нужно такое поведение, убирающее функциональность работы wildcard звездочки?
Старый 24.09.2008, 14:56   #9  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
kashperuk Собственно сие чудо используется в качестве параметра для фильтра в Query.
Лучше когда можно * написать, тогда все убодно отображается и фильтруется. А без нее совсем не интересно. Четко обозначенное значение не удобно использовать. Диапазон значение не подходит, лучше со *

Да и вообще было просто интересно как обезвредить этот автоматический лукап по *. Ответ получил.. все счастливы.
Старый 24.09.2008, 15:11   #10  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Хм.
А кто мешает нажать escape при появлении лукапа и продолжить набор условия фильтрации?
__________________
Axapta v.3.0 sp5 kr2
Старый 24.09.2008, 15:40   #11  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
1) не ну шустрые какие, уже из Программирования в другой раздел ушмыгнули темку. Иши-свищи потом.
2)
Цитата:
А кто мешает нажать escape при появлении лукапа и продолжить набор условия фильтрации?
Да вот собственного Кто и мешает то нажать Esc ? :-) вопрос без ответа.
Старый 24.09.2008, 16:27   #12  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Poleax Посмотреть сообщение
1) не ну шустрые какие, уже из Программирования в другой раздел ушмыгнули темку. Иши-свищи потом.
Не ну если вас попадание вашей темы в "Базу знаний" напрягает, а не радует, то даже и не знаю, что сказать

Лично мне поднятый вопрос и получившаяся фишка нравятся.

Иногда эта звездочка реально утомляет. Допустим хочу набрать критерий: C*,P*. Печатаю. Закончив, поднимаю глаза и вижу остановившуюся на C* строку и раскрытый список. Последние 3 символа потеряны. Подло! И не хочу я себя контролировать после каждой звездочки, чтобы нажимать Esc, и не хочу набирать критерий сначала в Ноутпаде, а потом копипастить его в бланк запроса.

А с фишкой - наоборот, я могу заставить звездочку работать, когда мне (а не ей!) этого хочется, нажав Alt+Down.
Старый 24.09.2008, 17:53   #13  
ahtoh
Гость
 
n/a
печатать надо, глядя в монитор, а не на клавиатуру
Старый 27.02.2009, 16:43   #14  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Вот и мне понадобилось отключить эту фичу когда прикручивал лукап к стандартной форме поиска в поле...

Использую такой код (AX 3.0):
X++:
public void lookup()
{
    if (substr(this.text(), this.charFromPos(conpeek(this.getCursorPos(), 1), conpeek(this.getCursorPos(), 2)), 1) != "*")
    {
        // Вызываем super() или вставляем свой код для формирования лукапа
    }
}
P.S. Правда ALT+DOWN не работает, если под курсором звездочка

Последний раз редактировалось vallys; 27.02.2009 в 16:48. Причина: Добавил P.S.
Старый 17.03.2009, 13:38   #15  
aidsua is offline
aidsua
AX*****
Аватар для aidsua
 
106 / 40 (2) +++
Регистрация: 28.09.2005
Адрес: 2:463/Kyiv
А не решит проблему на форме SysQueryForm для поля грида RangeValue установка SearchMode в значение Search After Input?
__________________
О, как беден, как груб наш русский язык! [c] А.С.Пушкин
Теги
lookup, запрос (query)

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
"Подсунуть" произвольное значение в lookup nebraska DAX: Программирование 1 19.01.2009 05:36
gatesasbait: How to define a custom lookup form for an extended datatype Blog bot DAX Blogs 0 09.07.2008 22:05
Убрать "полосатость" Grid-а Vladyslav DAX: Администрирование 2 14.05.2008 13:16
Создание Lookup формы Maxim Gorbunov DAX: База знаний и проекты 9 26.06.2007 16:44
Как подавить вызов LookUp формы при нажатии на "*" SergeyA DAX: Программирование 3 29.08.2003 13:10

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:31.