в FormDigger эта задача элегантно решается вставкой всего одной строки кода в класс SysSetupFormRun. То есть стандартное приложение модифицируется минимально.
В методе task() просто не вызывается super(), если нажата сокровенная комбинация клавиш.
X++:
//EVO: 31.01.09 #DEV02 Find from control by name -->
if (!FormDigger::overloadButton(this, _taskId))
//EVO: 31.01.09 #DEV02 Find from control by name <--
ret = super(_taskId);
А метод, вызывающий свою форму такой (открывает свою форму по клавишам ALT+тильда):
X++:
static boolean overloadButton(FormRun _formRun, int _taskId)
{
#define.VK_OEM_3(0xC0)// ~
#define.VK_OEM_F12(123)
#Task
boolean ret = true;
Object obj;
int i;
;
if (_taskId != #taskAlt)
return false;
switch (true)
{
case FormDigger::getAsyncKeyState(#VK_OEM_3) > 1:
ret = FormDigger::newForm(_formRun);
break;
case FormDigger::getAsyncKeyState(#VK_OEM_F12) > 1:
if (formHasMethod(_formRun, identifierStr(altF12)))
{
obj = _formRun;
obj.altF12();
ret = true;
}
break;
default:
ret = false;
}
return ret;
}