VCL是不允许直接对MDIChild子窗体进行ShowModal()的,而且如果让MDIChild成为整个应用程序的模态窗口似乎也没什么意义。
我看见过一些程序(不是BCB或Delphi写的),在一个子窗体Form1中ShowModal另一个子窗体Form2,此时的Form1是不响应操作的(只能先关闭Form2),而另一个子窗体Form3和主窗体是可以响应的。
我想这在BCB下肯定也可以实现吧?

把Enabled设为false恐怕不合适,因为我不知道Form2什么时候关闭,如果在Form2的OnClose事件中写Form1->Enabled=true;有几点不妥:
1.将使程序变得复杂,不符合模块高内聚低耦合的原则.
2.而且Form2也不一定由Form1打开,也许被直接打开或第三者打开或者不是模态显示.
3.Form2被ShowModal后必须在Form1上层显示,但其他Form可以把它覆盖。
3.再者我希望它返回ModalResult。

我不一定要使用ShowModal这个函数,肯定应该有API可以实现的吧,有些软件更牛,当ShowModal了另一个子窗体后,虽然自己的界面不能响应,但窗口标题还是可以响应,可以最大化和移动等。

可以使用API函数:SetWindowPos()
设置置顶:SetWindowPos(form2->hwnd, -1, 0, 0, 0, 0, 3)
取消置顶:SetWindowPos(form2->hwnd, -2, 0, 0, 0, 0, 3)

我不是要它置顶,而是要它对于建立它的Owner窗体来说是模态显示的,即不关闭是不能响应Owner窗体的点击的,但其他窗体不受限制。

该回复于2008-07-10 02:43:22被版主删除

楼主说的是非MDI程序中 确实是可以的,

正如1楼的 所述。。showmodal的说明!

前面的人说的很多了

学习啦

楼主说的是非MDI程序中 确实是可以的,