关于MDIChild窗体的问题,很容易拿分的哦!想的分的快进啊!(50分)

  • 主题发起人 主题发起人 BmwHans1
  • 开始时间 开始时间
B

BmwHans1

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在做的一个小程序,主窗体(main1)是MDIFORM,该主窗体只是一个框架,其他的业务窗体全部<br>封装在DLL中。DLL中的主窗体(main2)为MDICHILD,主窗体打开的其他子窗体(ChildForm1)也是MDICHILD窗口。<br>问题是:此时在关闭main2时要求判断属于main2的子窗体是否全部关闭,否则提示。我用了<br>以下方法,均不成功:<br>&nbsp; 1 在main2的Close中增加以下判断。<br>&nbsp; var iChildHandle:integer; <br>&nbsp; iChildHandle:=FindWindow(pchar('TChildForm1'),pchar('ChildForm1'));<br>&nbsp; if iChildHandle&lt;&gt;0 then<br>&nbsp; &nbsp;&lt;提示&gt;<br>&nbsp; 但发现无论子窗体是否打开,都有提示。<br><br>&nbsp; 2 通过判断main2的 MDIChildrenCount属性来判断是否有子窗体,但后来查了<br>帮助发现,该属性只对MDIForm有效。<br><br>&nbsp; &nbsp;还请哪位大侠指点迷津!!!!
 
1 在main2的Close中增加以下判断。<br>&nbsp; var iChildHandle:integer; <br>&nbsp; iChildHandle:=FindWindow(pchar('TChildForm1'),pchar('ChildForm1'));<br>&nbsp; if iChildHandle&lt;&gt;0 then<br>&nbsp; &nbsp;&lt;提示&gt;<br><br>用findwindow的时候要把delphi关掉,确切地说是源程序
 
lotusleaf,兄(还不知是兄是姊,姑且如此称呼吧),现谢过,我还没有试。<br>还烦请各位指教:如何在不同窗口间通过消息来处理。比如:同时打开了两个Child Forms,<br>ChildForm1,ChildForm2,如何让主窗口知道当前激活的 是哪个子窗口(获得子窗口的名称)<br>分可以另加!!!!!
 
if main1.ActiveMDIChild is ChildForm1 Then<br>begin<br>...<br>end;
 
楼主的方法可能错了,用<br>iChildHandle:=FindWindow(pchar('TChildForm1'),pchar('ChildForm1'));<br>if iChildHandle&lt;&gt;0 then<br>你的iChildHandle永远不会为0的(如果方法没错的话),因为在Close事件中,<br>当前的Form还没有关掉,你在本身没有关掉之前查找其类的一个实例,<br>一定可以找到自己的,建议你在类里面实现一个计数器,<br>在建立时+1,关闭前检查计数器,看是否为1,为1则提示再关闭并-1<br>
 
application.MainForm.ActiveMDIChild 是当前激活的子窗体。<br><br>在main2的Close中 写<br>with application.MainForm do<br>for i:=0 to MDIChildCount-1 do<br>begin<br>&nbsp; &nbsp;if uppercase(MDIChildren.name)=uppercase('ChildForm1') then<br>&nbsp; &nbsp; close;<br>end;
 
接受答案了.
 
后退
顶部