在一个窗口中的TreeView中双击一个TreeNode后,向ActiveMDIChild发送一个消息?(30分)

O

okzjq

Unregistered / Unconfirmed
GUEST, unregistred user!
在我的MDI程序中,有一个窗体,它的FormStyle为fsStayOnTop,该窗体中有
一个TreeView,怎样在双击一个TreeNode后,怎样让ActiveMDIChild(不能确定具体是
哪个窗体)根据treeView中的treeNode的数据显示不同数据呢?

我的想法是:在treeView中双击一个TreeNode后,向ActiveMDIChild发送一个消息,
ActiveMDIChild在接收到消息后读TreeView窗体中的数据,然后执行显示不同数据
的函数。但怎样写消息这样的消息呢?treeView发送消息后怎样让ActiveMDIChild
窗体自动显示数据呢?
万分感谢!!!

 

大家都睡了嘛? 如果还没入睡,帮帮我好嘛?
 
具体点就是:TreeView中系,专业,班级树,当在TreeView中双击一个班级后,
ActiveMDIChild窗口就显示该班的成绩,或者学生情况等。activeMDIChild有可能
是成绩窗口,也有可能是学生简况窗口。
 
直接在双击中对 ActiveMDIChild 进行处理,
不过要判断一下有没有 ActiveMDIChild
 
在TreeView的ItemChange事件里做好了,直接调用你的成绩窗口、学生简况窗口进行
处理,不要通过ActiveMDICHILD来处理。
 
回复人: zeroxing(光头) ( ) 信誉:100 2002-12-02 00:19:00 得分:0

你的所有MDIChild都可以继承于一个父类(当然这个父类是继承TForm)的,然后
这个父类里面提供一个函数或者过程(Public或者Protected的),在这个过程里面
实现你的显示数据功能,当然所有Child都可以Override以实现自己不同的显示功
能.这样,你就可以直接从TreeView所在的窗体里面调用这个父类的过程,不管你
当前的Active MDI Child是那个,都可以这样调用,而不必采用SendMessage这样
麻烦的方法.

回复: zeroxing(光头)
谢谢你的指点,我是这样写的
procedure TClassTreeForm.TreeViewDblClick(Sender: TObject);
begin
if appMainForm.ActiveMDIChild is TMyDockForm then
appMainform.ActiveMDIChild.ChangeData( SeleLevel,CurrXSH,CurrZYH,CurrBJH);
end;
//TMYDockForm是MDI Child的父类。

在TMYDockForm中定义
Procedure ChangeData(Level:integer;XSH,ZYH,BJH:String);Virtual;

在MDI child中定义
Procedure ChangeData(Level:integer;XSH,ZYH,BJH:String);overLoad;
 
但是在treeView中双击时,还是没办法执行MDI child中的重载procedure.
问题可能是出现在如下的语句中
if appMainForm.ActiveMDIChild is TMyDockForm then
appMainform.ActiveMDIChild.ChangeData( SeleLevel,CurrXSH,CurrZYH,CurrBJH);

我怎么改才能正常运行呢?谢谢。



 
应该没问题,你先在你的ChangeData里加个showmessage看看,能不能执行进去???
 
想来你的主窗口是MDI的了
双击后可以
if Application.MainForm.MDIChildCount >0 then
SendMessage(Application.MainForm.ActiveMDIChild.Handle,
YourMsg,wParam,lParam);
有消息处理函数就可以了
 
谢谢LGXing,我要的就是这东西。
 
顶部