新建了好几个FORM,如何让这几个form在同一个WndProc里响应窗口类的消息,而不必在各自的WndProc里分别响应,求教 求教了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你新建一个form,然后其它从你建的form继承,应该就可以在父类里处理消息了 我用了一个办法就是在一个form 的createform 中application.OnMessage:=Form1.MyProcess;然后在Form1.MyProcess中截获消息,这儿的消息应该是所有窗口的消息,但好像有问题,我再试试 一种有一定限制的用法:首先, 你所有的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的WndProcend;用如下方法可以将各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; 有点小bug:设置时m.Code := @MyWndProc;m.Data := Pointer(Frm);请改为:TMethod(m).Code := @MyWndProc;TMethod(m).Data := Pointer(Frm); 帮忙:ADO数据库连接及读数据 有关Delphi6里搜索打印机的问题 如何得到Listbox里所选取项的文本!在线等! delphi DataBase.params 中的问题 请教关于无线控制的问题 请问大家一个关于视频压缩编码的问题 delphixe下socket API失效,该如何解决 外壳扩展和目录隐藏问题 有谁知道较好的网站,提供素材图片下载的? 如何得知SQL的查询结果? 如何把Access中的数据对应地放入Excel 如何确定project.exe执行了
就是在一个form 的createform 中application.OnMessage:=Form1.MyProcess;
然后在Form1.MyProcess中截获消息,这儿的消息应该是所有窗口的消息,但好像有问题,我再试试
首先, 你所有的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;
设置时
m.Code := @MyWndProc;
m.Data := Pointer(Frm);
请改为:
TMethod(m).Code := @MyWndProc;
TMethod(m).Data := Pointer(Frm);