求教了

解决方案 »

  1.   

    你新建一个form,然后其它从你建的form继承,应该就可以在父类里处理消息了
      

  2.   

    我用了一个办法
    就是在一个form 的createform 中application.OnMessage:=Form1.MyProcess;
    然后在Form1.MyProcess中截获消息,这儿的消息应该是所有窗口的消息,但好像有问题,我再试试
      

  3.   

    一种有一定限制的用法:
    首先, 你所有的form中必须在相同位置增加一个TWndMethod类型变量(比如都加到private部分的第一个), 例如:  TForm1 = class(TForm)
        ....
      private
        OldWndProc: TWndMethod;
        ...
      end;第二步: 定义一个普通函数,
    procedure MyWndProc(objSelf: TForm; var Message: TMessage);
    begin
      case Message.Msg of    // 处理消息
         ...
      end;
      TForm1(objSelf).OldWndProc(Message);  // 调用原form的WndProc
    end;
    用如下方法可以将各form的wndproc设置成相同的值:procedure SetFormWndProc(Frm: TForm);
    var
      m: TWndMethod;
    begin
      TForm1(Frm).OldWndProc := Frm.WindowProc;
      m.Code := @MyWndProc;
      m.Data := Pointer(Frm);
      Frm.WindowProc := m;
    end;
      

  4.   

    有点小bug:
    设置时
    m.Code := @MyWndProc;
    m.Data := Pointer(Frm);
    请改为:
    TMethod(m).Code := @MyWndProc;
    TMethod(m).Data := Pointer(Frm);