我是从Application.OnMessage中跟踪发现,如果产生WM_KEYDOWN消息,
Application其实不往窗口发送WM_KEYDOWN消息,而是发送CN_KEYDOWN消息,
在CNKeyDown中对消息中的状态进行处理,然后把Message.Result赋值,决定
是否向窗口发送WM_KEYDOWN消息。我们可以看到,如果是VK_LEFT, VK_RIGHT,
VK_UP, VK_DOWN这些按键,最后其Message.Result=1,也就是说告诉调用者,
不必往该窗口发送WM_KEYDOWN消息了。
OK,到这里就一切解决了,只需要定义一个CN_KEYDOWN消息响应函数,所有问
题解决。
procedure CNKeyDown(var Message: TWMKeyDown); message CN_KEYDOWN;
procedure TWinControl.CNKeyDown(var Message: TWMKeyDown);
begin
Message.Result := 0; //可要可不要,Message.Result缺省为0
end;
具体可以看
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=2176867