Показать сообщение отдельно
Старый 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; // очередной символ - "звездочка"
    }
}