关于Application.OnMessage 请问这个这个事件能不能控制只在主窗体里边接收消息 就是这个窗体为激活状态的时候再接收消息如果打开了其它窗体后就不接收消息了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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. 不过要对楼主声明:1、并不是不接收消息了,只是接收了不处理了2、只是对Form1这一个窗口(注意,不是窗体)阻止了消息,但窗体Form1(注意,是窗体)上的其他窗口(注意,是窗口)比如Button1,并未阻止。3、在Windows系统看来,Form1和Button1都是窗口 或许以下效果是楼主想要的:(没用App.OnMessage)//窗体1的Button,用于打开窗体2,并禁用窗体1procedure TForm1.Button1Click(Sender: TObject);begin Form2.Show; Windows.EnableWindow(Self.Handle, False);end;//窗体2的Button,用于恢复使用窗体1procedure TForm2.Button1Click(Sender: TObject);begin Windows.EnableWindow(Form1.Handle, True);end; procedure m(var msg: TMessage); message WM_RBUTTONDOWN;用这个能截取窗体上的控件消息吗? Delphi7,如何编写出能够实时监测机器故障 一个简单的问题? NMSMTP在哪有下载? 昨天申请了博克,发现csdn还是有不少人去呢。 我的源代码怎么这么大? 请问,那里有人事管理(简单的)系统源代码下载!(delphi的) 关于Delphi5中一个示例中的问题? 为什么打印的最后不能打出来 一个奇怪的问题 请问我的panel面板为何在设计时可见,运行后便看不到面板及上面的内容了? 有四路输入输出的单片机没有? 紧急求助:如何实现Table中某个字段的数值整体错位赋值?
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.
1、并不是不接收消息了,只是接收了不处理了
2、只是对Form1这一个窗口(注意,不是窗体)阻止了消息,但窗体Form1(注意,是窗体)上的其他窗口(注意,是窗口)比如Button1,并未阻止。
3、在Windows系统看来,Form1和Button1都是窗口
或许以下效果是楼主想要的:(没用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;
用这个能截取窗体上的控件消息吗?