我有一个主表单和一个状态表单,当我的应用程序中的工作正在进行时,我会显示它们。如果工作完成我就打电话Hide
状态表上出现,状态表消失。
当我最小化主窗体而等待窗体可见时,就会出现问题。然后两种形式都被隐藏,这就是我想要的。但是,如果工作完成时主窗体最小化,那么当我恢复它时,状态窗体也会恢复,即使Hide
已在最小化时调用它。
Visible
似乎是False
当应用程序最小化并因此调用时的状态表单Hide
似乎没有效果(帮助说它只是设置Visible
to False
).
这些观察是否正确?当应用程序再次获得焦点时,表单可见性如何恢复?如何在应用程序最小化时隐藏我的表单?
Visible
显示形式确实是错误的并且调用Hide
当应用程序最小化时不执行任何操作,因为它作为最小化机制的一部分被应用程序隐藏。
代码调用ShowOwnedPopups http://msdn.microsoft.com/en-us/library/ms633547%28v=vs.85%29.aspx当应用程序最小化时,首先将“False”设置为“bShow”,然后在应用程序恢复时将“True”设置为“bShow”。由于该函数显示了先前调用隐藏的所有窗口,因此更改了表单的可见性
之间没有影响。
现在,请参阅该函数文档的备注部分中的引用,
如果使用隐藏弹出窗口
随后的 ShowWindow 函数
使用 fShow 调用 ShowOwnedPopups
参数设置为 TRUE 不会导致
要显示的窗口
因此,一种解决方案是在应用程序隐藏表单之前隐藏表单,这样在恢复时就不会显示它。但是接下来我们必须知道当我们恢复时,显示表单实际上是隐藏还是显示。这可以通过在显示表单上放置属性或使用全局变量来实现。在下面,“ShouldBeVisible”是一个假设属性,如果我们要显示信息,它将返回 true:
type
TForm1 = class(TForm)
..
private
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
...
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
if (Msg.CmdType = SC_MINIMIZE) and Assigned(Form2) and Form2.Visible then
Form2.Hide;
inherited;
if (Msg.CmdType = SC_RESTORE) and Assigned(Form2) and Form2.ShouldBeVisible then
Form2.Show;
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)