如何在Delphi中隐藏MDI子表单?

如何隐藏Delphi中的MDIChild窗口?

我在我的MDI儿童FormClose()事件中使用此代码,但它似乎不工作:

procedure TfrmInstrument.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caNone; ShowWindow(Handle, SW_HIDE); frmMainForm.MDIChildClosed(Handle); end; 

我的孩子窗口被最小化,而不是被隐藏。

Solutions Collecting From Web of "如何在Delphi中隐藏MDI子表单?"

TCustomForm有一个受保护的过程定义如下:

 procedure TCustomForm.VisibleChanging; begin if (FormStyle = fsMDIChild) and Visible and (Parent = nil) then raise EInvalidOperation.Create(SMDIChildNotVisible); end; 

在你的MDI子窗口中覆盖它:

 procedure TMDIChildForm.VisibleChanging; begin // :-P end; 

这是一个简单的例子

在阅读了Jeroen的评论之后,我尝试了另一种解决方案,但也有一些闪烁:

 procedure TMDIChildForm.VisibleChanging; begin if Visible then FormStyle := fsNormal else FormStyle := fsMDIChild; end; 

也许这适用于所有的Windows版本。

PS:我没有发现Windows 2k3SP2 x86和Windows 7 Ultimate x86上的第一个解决方案的任何问题

您不能隐藏MDI子窗口。 这是一个Win32限制。