Этот метод можно перекрыть на части элементов интерфейса: 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 > Мне необходимо осуществить перехват ввода с клавиатуры в 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]]