How to hide a MDI Child form in Delphi?

匿名 (未验证) 提交于 2019-12-03 00:56:02

问题:

How can I hide a MDIChild window in Delphi?

I'm using this code in FormClose() event of my MDI children, but it doesn't seem to work:

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

My child window is minimized instead of being hidden.

回答1:

There is a protected procedure in TCustomForm defined as:

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

Override it in your MDI child windows as:

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

Here's a simple example

After reading Jeroen's comment, I tried another solution which works as well, but with a little flickering:

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

Maybe this works on all Windows versions.

PS: I didn't find any problem with the first solution on Windows 2k3SP2 x86 and Windows 7 Ultimate x86



回答2:

You cannot hide an MDI child window. This is a Win32 limitation.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!