Инструменты пользователя

Инструменты сайта


axapta:перехватнажатийклавиш

Этот метод можно перекрыть на части элементов интерфейса:

public boolean keyDown(int _vKey, boolean _ctrl, boolean _shift)
{
    boolean ret;
    if (_vKey == #F2)
    {
        info("Нажата F2");
    }
    ret = super(_vKey, _ctrl, _shift);
    return ret;
}

От: ALEK_www.ibdos.com ALEK_www.ibdos.com@discussions.microsoft.com

> Мне необходимо осуществить перехват ввода с клавиатуры в Axapta с целью подмены определенных клавиш.

К примеру, при нажатии пользователем клавиши '+' посылалась бы команда нажатия '*'. Как это реализовать?

Добавьте нижеприведенный статический метод в класс WinAPI:

client static int getAsyncKeyState(int vk)
{
    //return values - возвращаемые значения
    //0, not pressed - клавиша не нажата
    //1, pressed before function call - клавиша нажата до вызова функции
    //>1, key is down - клавиша нажата в данный момент
 
    DLL         _winApiDLL      = new DLL('USER32');
    DLLFunction _getKeyState    = new DLLFunction(_winApiDLL, 
'GetAsyncKeyState');
 
    _getKeyState.returns(ExtTypes::WORD);
    _getKeyState.arg(ExtTypes::DWORD);
 
     return _getKeyState.call(vk);
}

Код, приведенный ниже, вставьте в форму (tutorial_timer):

void run()
{
    _idleTime = element.control(control::Idle);
    _realTime = element.control(control::RealTime);
 
    super();
 
    this.updateIdleTime();
    this.updateRealTime();
    this.updatekey();
}
 
void updatekey()
{
    //return values
    //0, not pressed
    //1, pressed before function call
    //>1, key is down
    int  i =0;
    int  ret;
    ;
    for (i = 20;  i < 130; i++)
    {
        ret = winapi::getAsyncKeyState(i);
 
        //if (ret != 1 && ret != 0)
        //{
          //info(strfmt('%1 %2', ret,this.int2key(i)));
        //}
 
        if (ret == 32769 )
        {
           texto = texto + this.int2key(i);
           cont ++;
 
           anterior = this.int2key(i);
 
           if (cont >= 25 )
           {
            info(texto);
            cont = 0;
            texto = '';
           }
 
 
        }
    }
    sleep(10);
    _realTimer = this.setTimeOut("updatekey",1,false);
}
 
str int2key(int _key)
{
 
      container tab_key =['VK_LBUTTON','VK_RBUTTON','VK_CANCEL' 
,'VK_MBUTTON','','','','VK_BACK','VK_TAB',''             ]+  //10
 
['','VK_CLEAR','VK_RETURN','','','VK_SHIFT','VK_CONTROL','VK_MENU','VK_PAUSE','VK_CAPITAL'      ]+  
//20
                         ['','','','','','','VK_ESCAPE','','',''
 
                                            ]+  //30
                         ['',' 
','VK_PRIOR','VK_NEXT','VK_END','VK_HOME','VK_LEFT','VK_UP','VK_RIGHT','VK_DOWN'   ]+  
//40
 
['VK_SELECT','','VK_EXECUTE','VK_SNAPSHOT','VK_INSERT','VK_DELETE','VK_HELP','0','1','2'        ]+  
//50
                         ['3','4','5','6','7','8','9','','',''
 
                                            ]+  //60
                         ['', '', '','','A','B','C','D','E','F'
 
                                            ]+  //70
                         ['G','H','I','J','K','L','M','N','O','P'
 
                                            ]+  //80
                         ['Q','R','S','T','U','V','W','X','Y','Z'
 
                                            ]+  //90
 
['','','','','','VK_NUMPAD0','VK_NUMPAD1','VK_NUMPAD2','VK_NUMPAD3','VK_NUMPAD4'                ]+  
//100
 
['VK_NUMPAD5','VK_NUMPAD6','VK_NUMPAD7','VK_NUMPAD8','VK_NUMPAD9','VK_MULTIPLY','VK_ADD','VK_SEPARATOR','VK_SUBTRACT','VK_DECIMAL']+ 
//110
 
['VK_DIVIDE','VK_F1','VK_F2','VK_F3','VK_F4','VK_F5','VK_F6','VK_F7','VK_F8','VK_F9'            ]+  
//120
 
['VK_F10','VK_F11','VK_F12','VK_F13','VK_F14','VK_F15','VK_F16','VK_F17','VK_F18','VK_F19'      ]+  
//130
 
['VK_F20','VK_F21','VK_F22','VK_F23','VK_F24'];
 
    ;
 
    return conpeek(tab_key,_key);
}

—- http://axapta-lessons-learned.blogspot.com/2005/03/trapping-keystrokes-in-form.html AxForum: http://www.axforum.info/forums/showthread.php?s=&postid=51381

axapta/перехватнажатийклавиш.txt · Последнее изменение: 2018/04/13 22:43 (внешнее изменение)