例如我想屏蔽修改控件Enabled属性的那个消息(WM_ENABLE),应该怎么弄呢?例如我想给TEdit指定一个新的窗口过程,通过在新的窗口过程中检测是否是这个消息然后屏蔽,但是如何给Edit指定一个新的窗口过程呢?

解决方案 »

  1.   


    //1.Override一下Form的WndProc 
    //2.对WndProc中的消息进行过滤 
    function WndProc(............); 
    begin 
    case msg of 
    WM_XXX:新处理过程; end; 
    Inherited; 
    end;
      

  2.   

    方法好多。1) 可以直接替换控件的消息过程函数。(适用于delphi所有控件。)
      Label1.WindowProc:= MyWindowProc;2) 利用子类化。(仅仅可处理从TWinControl继承下来的控件)
      SetWindowLong(Edit1.Handle, GWL_WNDPROC, @MyWindowProc);3) 特定消息可以使用SetMethodProp/GetMethodProp来替换。(所有控件,特殊消息)
      ....在MyWindowProc中处理。想了解其他的,参照我总结过的delphi消息截获:
    http://etomahawk.popo.blog.163.com/blog/static/919644820071012111931592/
      

  3.   

    //这样不行?继承TEdit,Override其窗口函数type   
      TmyEdit=class(TEdit)   
      protected   
        procedure   wndProc(var   msg:TMessage);override;   
      end;   
          
      procedure   TmyEdit.wndProc(var   msg:   TMessage);   
      begin   
          if   msg.Msg=WM_ENABLE   then exit;           
          inherited;
      end;