从TWinControl类继承创建自己的组件,但是的不到鼠标的焦点和键盘的输入。
TMyControl = class(TWinControl)  ....
  procedure WMKeyDown(var Message: TWMKeyDown);message WM_KEYDOWN;
  ....
end;procedure TMyControl.WMKeyDown(var Message: TWMKeyDown);
begin
  beep();
end;以上代码中的WMKeyDown过程总是得不到执行,为什么?

解决方案 »

  1.   

    增加一个消息处理函数。 procedure wmactive(var Message: tmessage);message WM_ACTIVATE;
    procedure TForm1.wmactive(var Message: tmessage);
    begin
      Windows.SetFocus(handle);
    end;
      

  2.   

    Windows.SetFocus(handle);
    感觉楼上的说的很有道理,不知道在keydown 里改变构件的位置是不是有效我去看看
      

  3.   

    重载它的wndproc自己实现对鼠标消息的处理,应该是可以的
      

  4.   

    谢谢各位,我自己解决了。在构造函数中将TabStop设为True即可收到键盘消息。如果在收到Tab或方向键时不想失去焦点,还需要处理WM_GETDLGCODE消息。