Показать сообщение отдельно
Старый 30.05.2014, 16:18   #24  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
в 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;
}