如何实现窗体间的事件传递? ( 积分: 200 )

  • 主题发起人 主题发起人 zhouyujie238
  • 开始时间 开始时间
Z

zhouyujie238

Unregistered / Unconfirmed
GUEST, unregistred user!
如果实现这样一个功能,系统里面有A,B,C,D……等很多窗体,他们之间可以相互调用,现在A里面分别打开了A,B,C窗体(A可以调用存在的任何一个窗体,包括自身),A里面有个按钮,现在我想在点击A的时候,被A打开的所有窗体,都能响应这个事件。

注:有个一个类似的功能,当数据感知控件里面设定了Datasource属性之后,就可以响应DataSource里面的事件了。看了很久,但是我没怎么看明白其中原理,没法重现出来。
 
将事件写成property
调用就行了
 
用 TActionList 组件实现;
=============================================
每个按钮(Btn.Action:= actNew);其中actNew是TActionList里的一个Btn;这样方便些;
 
re:thrhxm,
将事件写成property
调用就行了

不知如何调用?A窗体里面按下按钮,被A打开的窗体里面,要立即触发这个click事件。不知如何写呢?敬请指点指点,谢谢啊
 
首先要先引用這幾個窗體的單元,然後再在A的CLICK事件裏寫代碼就是了。
AFORM。。。。。
BFORM。。。。
 
是否可以不引用?我所有的窗体都写在Dll里面了,引用应该不方便。

系统的datasource控件与数据感知控件之间,就实现了这种事件广播,有没有哪位兄弟研究过?
 
用自定义消息啊。
首先在所有的窗体中定义自定义消息:
const WM_MyMsg = WM_User + 200;
public
hHandle : array of THandle;//放置生成的窗体句柄
//声明
procedure WM_MyMsg_1(var Msg: Tmessage); message WM_MYMSG;
//实现
procedure WM_MyMsg_1(var Msg: Tmessage);
begin
//写代码
end;
//在创建其他的窗体的时候这样做
hHandle:=新窗体.Handle;
然后可以这样调用:
for i:=0 to n do
postmessage(hHandle,WM_MyMsg参数,参数);
然后就OK了。
 
谢谢;创建消息的方法应该可以满足需求,只是Tmessage只能传递整形参数吧?。
我仔细研究过Datasource的代码,好象也是用Tlist来遍历的。后来采用的是一个间接的方法,把DataSet的指针传过去,接受窗体定义一个Fdatalink来接受,再把Fdatalink的datachange()方法赋值到一个函数,这样就好了。这样做的好处,不用去管理那个Tlist,还能直接读到Dateset的所有内容。
 
后退
顶部