100分求有关多键同按时的捕捉思路
一般情况下,用OnKeyDown就可以解决这些问题,但是现在是如果要处理多键同时按下情况,好像就有点不一样了。例如说,我一直按着“上”,然后又按着“左”,那么OnKeyDown就只能捕捉到“左”的消息,“上”的消息没了,当我松开“左”之后,“上”的消息也不会继续产生。
我现在有一种思路是,通过一个Timer,定时进行GetKeyboardState,然后判断哪些键按下了,然后发送一个自定义消息,通知WndProc逐个处理这些消息。这种做法的好处是如果“上”“左”都按下了,那么会顺序产生“上”“左”两个消息,而不会象上面那样变成“上左左左左左左...”(ps. 顺便想问问,为何我在线程里GetKeyboardState不行,要在Timer里才可以呢?)
不过我想知道在实际编程时是怎么处理的呢?尤其是游戏编程上,我想这个问题是要解决的一个基本问题。
thanks..
[解决办法]
判断是否有多个按键一直按着
Form1.Keypreview := TRUE
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If ((GetKeyState(VK_CONTROL) AND 128)=128) and
((GetKeyState(VK_F5) AND 128)=128) and
((GetKeyState(ord( '8 ')) AND 128)=128)
then
ShowMessage( 'CTRL+F5+8 Pressed ');
end;
[解决办法]
用api,里面有一个结构参数
具体是哪个记不清楚了
可以把单元use进去后自已看