请问这个这个事件能不能控制只在主窗体里边接收消息 就是这个窗体为激活状态的时候再接收消息
如果打开了其它窗体后就不接收消息了

解决方案 »

  1.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure test(var Msg: TMsg; var Handled: Boolean);
      private
        { Private declarations }
      public
        { Public declarations }
        Key : Boolean;
      end;var
      Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      Form2.Show;
      Self.Key := True;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Application.OnMessage := Self.test;
    end;procedure TForm1.test(var Msg: TMsg; var Handled: Boolean);
    begin
      Handled := (Msg.hwnd = Self.Handle) and Key;
    end;end.unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm2 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementationuses Unit1;{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);
    begin
      Form1.Key := False;
    end;end.
      

  2.   

    不过要对楼主声明:
    1、并不是不接收消息了,只是接收了不处理了
    2、只是对Form1这一个窗口(注意,不是窗体)阻止了消息,但窗体Form1(注意,是窗体)上的其他窗口(注意,是窗口)比如Button1,并未阻止。
    3、在Windows系统看来,Form1和Button1都是窗口
      

  3.   


    或许以下效果是楼主想要的:(没用App.OnMessage)
    //窗体1的Button,用于打开窗体2,并禁用窗体1
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Form2.Show;
      Windows.EnableWindow(Self.Handle, False);
    end;//窗体2的Button,用于恢复使用窗体1
    procedure TForm2.Button1Click(Sender: TObject);
    begin
      Windows.EnableWindow(Form1.Handle, True);
    end;
      

  4.   

    procedure m(var msg: TMessage); message WM_RBUTTONDOWN;
    用这个能截取窗体上的控件消息吗?