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