delphi的什么类(非界面类)可以接收windows消息?

解决方案 »

  1.   

    如果不是服务类程序就可以,
    首先执行这句 ,把程序的所有消息交给这个过程处理。
    Application.OnMessage:=ApplicationMessage;
    //将程序的所有消息将给过程ApplicationMessage处理!定义过程
    procedure ApplicationMessage(var Msg: TMsg; var Handled: Boolean);
    begin
      if (Msg.message = WM_MOUSEWHEEL) and (Msg.hwnd = DBGrid1.Handle) then//当接收到消息WM_MOUSEWHEEL,并且由DBGrid1激发时
      begin
        //处理程序
      end
      else
        inherited;
    end;如果是服务程序的话,需要用到远程消息。
      

  2.   

    //////屏蔽窗口的wm_Size消息,在Application的OnMessage事件中写屏蔽代码,示例:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Application.OnMessage := AppMessage;
    end;
    procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
    begin
      if Msg.message = WM_Size then
      begin
        Msg:=0
        Handled := True;
      end;
    end;
      

  3.   

    好像只要从TWinControl继承而来的类都可以接受消息。
      

  4.   

    好像只要从TWinControl继承而来的类都可以接受消息。
      

  5.   

    从TCOMPOENT继承其实也可以接受消息,但是他没有一个句柄,要麻烦一些,要做一个虚窗口,ALLCATEHANDLE,然后通过这个虚窗口接受消息,这样的类比如TTIMER类,原代码你可以看VCL
      

  6.   

    VCL的Perform()方法适用于所有的TControl派生对象。
      

  7.   

    我觉得只要是从TControl派生来的都可以接收Windows消息,不过需要自己处理而已
      

  8.   

    注意好象TCONTROL类没有句丙把。他不能有窗口函数也就是说没有WNDPROC, 所以不能直接参与主线程的消息循环呀
      

  9.   

    实质上只要是TOBJECT的类的继承类都可以接受PERFORM,因为TOBJECT类有一个DISPATCH方法呀