在父窗口中自定义了一个消息。
怎样让它的所有子窗口接收到父窗口发出的这个消息?
非常感谢!!!
怎样让它的所有子窗口接收到父窗口发出的这个消息?
非常感谢!!!
解决方案 »
- ehlib5.6 xe3
- 对query控件的requestlive属性的疑惑
- 编译后的可执行程序为什么不能独立运行?
- 请问<<delphi控件及应用>>这本书在哪可以下载,请给出地址。
- 到底怎么做横着的报表啊?我做了QReport.Page.Orientation:=poLandscape,可是我预览时还是竖着的啊?为什么啊?
- DELPHI7开发的程序可以运行 xp 32 xp64 win7 32 WIN7 64 吗
- 为何有乱字符出现呢?
- delphi于sqlserver的问题,求助于各夜猫!
- c/s三层用interbase,服务器端需要安装interbase吗?
- 请问DELPHI中是否有类似Powerpoint效果预览的控件
- 这样的报表如何实现呀?
- ------sql语句问题------
当主窗体发送消息时候,可以遍历所有已经注册的窗体,调用窗体自己的MYNOTIFY方法,由他们去调用各个窗体的方法.注意你的各个子窗体必须由窗体摸板继承而来!
窗体摸板部分:
Constructor TFormModule.Create(AOwner:TComponent);
var Main:TMainForm;//TMainForm为你的主窗体
begin
Main:=MainUnit.MainForm;
Main.AddForms(self);
end;Destructor TFormModule.Destroy;
var Main:TMainForm;//TMainForm为你的主窗体
begin
Main:=MainUnit.MainForm;
Main.DelForms(self);
end;
//以下这个方法为消息方法,你可以在继承后的各个窗体重新实现它;
Procedure TFormModule.WMMyself(var message:TMessage);message WM_Myself;
begin
//you add some code here to do something;
end;
//这个方法是静态方法,只存在于摸板窗体中,子窗体不要改写
Procedure TFormModule.DoSometing(var message:TMessage);
begin
WMMyself(message);
end;主窗体部分:
var formlist:TList;
Constructor TMainForm.Create(AOwner:TComponet);
begin
formlsit:=List.Create;
end;procedure TMainForm.AddForms(param:TForm);
begin
formlist.add(param);
end;procedure TMainForm.DelForms(param:TForm);
begin
formlist.delete(param);
end;procedure TMainForm.WMAllNotidy(var message:TMessage);message WM_Myself;
var i:integer;
begin
for i:=0 to formlist.count-1 do
TFormModule(formlist.items[i]).DoSometing(message);
end;
最后记住在主窗体的卸载代码中删除formlist对象就可以了!注意单元的引用避免循环!
这样和下面的代码没有本质的区别。for i := 0 to MDIChildCount - 1 do
PostMessage(MDIChildren[i].Handle, WM_Myself, 0, 0); |--WM_Myself-->Form1
MainForm|--WM_Myself-->Form2
|--WM_Myself-->Form3而我的想法是只由主窗口发送一个WM_Myself消息,然后这个消息在所有的子窗口中遍历。MainForm --WM_Myself--> Form1 --WM_Myself--> Form2 --WM_Myself--> Form3这样的话如何实现?