上次我看到了一段代码如下
type  
      TForm1   =   class(TForm)  
          Panel1:   TPanel;  
          procedure   FormCreate(Sender:   TObject);  
      private  
          {   Private   declarations   }  
          OldWndProc:   TWndMethod;  
          procedure   MyMessage(var   Message:   TMessage);  
      public  
          {   Public   declarations   }  
      end;  
粗体部分是如何加到Form的private里的啊?直接写会提示没有对应的组件
 

解决方案 »

  1.   

     他的原型是:  procedure(var Message: TMessage) of object;
      

  2.   

    TWndMethod 是一种过程类型,它指向一个接收 TMessage 类型参数的过程,但它不是一般的静态过程,它是对象相关(object related)的。TWndMethod 在内存中存储为一个指向过程的指针和一个对象的指针,所以占用8个字节。TWndMethod类型的变量必须使用已实例化的对象来赋值。
      

  3.   

    var
        SomeMethod: TWndMethod;
    begin
        SomeMethod := Form1.MainWndProc; // 正确。这时 SomeMethod 包含 MainWndProc和 Form1 的指针,可以用 SomeMethod(Msg)来执行。
        SomeMethod := TForm.MainWndProc; // 错误!不能用类引用。
    end;
      

  4.   

     已解决
     我的方法是在formcreate里先将form.WndProc赋给OldWndProc
     再将自己写的窗口过程赋给form.WndProc
     然后在Form的private字段再加入粗体的那一句,就不报错了