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

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


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 (внешнее изменение)