这使我原来的问提:如果窗体被控件遮住,怎样使窗体的事件被响应???我有一个基类窗体,其中定义了一个事件,可是再子类中窗体被控件完全挡住了,如何让基类窗体中的事件被响应呢??如:TAframe = class(frame)
  procedure keyprss(var message: Tmessage);message WM_KEYPRSS;
end;TBframe = class(TAframe);
 memo1:Tmemo;
 end;
(上面只是例子,随手写的)
如果memo和窗体一样大就无法响应keyprss事件了,请问个位大虾有何高见,先谢谢了。
最好能再基类中实现,这样的话类的继承才有意义,先谢谢了
分不够再加。各位大虾都说KeyPreview=Ture;就可以,可是这个答案不够通用,
我希望更加通用一点,不是tform类也可使用。比如,tframe,tpanel等等。这些类没有keypreview属性。我开这个贴,希望大家可以讨论一下

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/1388/1388227.xml没有WM_KEYPRESS,更没有WM_KEYPRSS,应该是WM_CHAR!
      

  2.   

    直接override函数WndProc,它的优先级很高。
      

  3.   

    这样
    procedure Tform1.memo1keydown(……);
    begin
       sendmessage(form1.handle,WM_KEYDOWN,key,0);
    end;
      

  4.   

    以上诸位的方法都可行,如仅仅从vcl的角度,窗体的KeyPreview设置为True也许能轻易达到目的
      

  5.   

    注意:楼主的方法是通用,父控件不是TForm也能用,所以另两种可能都不太符合要求!procedure TForm1.ApplicationMessage(var Msg: tagMSG;var Handled: Boolean);
    begin
    if IsChild(Form1.Handle,Msg.hwnd) and (Msg.message=WM_CHAR) then
      Form1.Perform(Msg.message,Msg.wParam,Msg.lParam);
    end;