【发布时间】:2012-08-29 13:08:13
【问题描述】:
如何在 Delphi 中隐藏 MDIChild 窗口?
我在我的 MDI 孩子的 FormClose() 事件中使用此代码,但它似乎不起作用:
procedure TfrmInstrument.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
ShowWindow(Handle, SW_HIDE);
frmMainForm.MDIChildClosed(Handle);
end;
我的子窗口被最小化而不是被隐藏。
【问题讨论】:
-
@AndreasRejbrand 当我点击红十字时,默认行为是在 Delphi 中最小化一个 mdi 子窗口。我想隐藏窗口。
-
iMan:好点子。现在我明白你的意思了。你不想最小化,也不想破坏。您想暂时隐藏它,以便稍后再次显示它。我不知道这是否可能。 [嗯,显而易见的解决方案确实是销毁它,然后在需要时创建一个新的类似窗口。]
-
@AndreasRejbrand 我不想销毁并重新创建一个类似的窗口,因为每个子窗口都会加载一些库、打开一个串行端口以及其他一些需要几秒钟的初始化内容。因此,我在启动时创建了所有子表单,使用
ShowWindow隐藏它们,具有讽刺意味的是,它在那里工作,当用户选择它们时显示它们,并希望在用户关闭它们时再次隐藏它们 -
@iManBiglari: 如果你把你所有的组件和相应的代码移动到每个 MDI 子窗口的数据模块中,并将 MDI 子窗口视为一个简单的视图(可以随意打开和关闭),那么您无需与 MDI Windows 子系统作斗争。我敢说这样的改变也会改善程序设计。
-
@mghie 我不明白为什么需要数据模块来实现这种分离。我想它可以节省您编写样板代码来实例化组件,但我从未发现这特别引人注目。