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