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

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


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

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

axapta:перехватнажатийклавиш [2018/04/13 22:43] (текущий)
Строка 1: Строка 1:
 +Этот метод можно перекрыть на части элементов интерфейса:
 +<code XPP>
 +public boolean keyDown(int _vKey, boolean _ctrl, boolean _shift)
 +{
 +    boolean ret;
 +    if (_vKey == #F2)
 +    {
 +        info("Нажата F2");
 +    }
 +    ret = super(_vKey, _ctrl, _shift);
 +    return ret;
 +}
 +</code>
 +----
 +От: ALEK_www.ibdos.com <ALEK_www.ibdos.com@discussions.microsoft.com>
 + 
 +> Мне необходимо осуществить перехват ввода с клавиатуры в Axapta с целью подмены определенных клавиш. 
 +> К примеру, при нажатии пользователем клавиши '+' посылалась бы команда нажатия '*'. Как это реализовать?
 + 
 +Добавьте нижеприведенный статический метод в класс WinAPI:
 +<code XPP>
 +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);
 +}
 +</code> 
  
 +Код, приведенный ниже, вставьте в форму (tutorial_timer):
 +<code XPP>
 +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);
 +}
 +</code>
 + 
 + 
 + 
 + 
 +----
 +[[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 (внешнее изменение)