gpt4 book ai didi

windows - 最小化应用程序时隐藏表单

转载 作者:可可西里 更新时间:2023-11-01 13:08:51 25 4
gpt4 key购买 nike

我有一个主窗体和一个状态窗体,在我的应用程序中进行工作时会显示它们。如果工作完成,我只需在状态表单上调用 Hide,状态表单就会消失。

当我最小化主窗体而等待窗体可见时,我的问题就出现了。然后隐藏这两种形式,这就是我想要的。但是,如果在主窗体最小化时工作完成,那么当我恢复它时,状态窗体也会恢复,即使在最小化时调用了 Hide

当应用程序最小化时,

Visible 似乎是 False,因此调用 Hide 似乎没有效果(帮助说它只是将 Visible 设置为 False

这些观察是否正确?当应用程序再次获得焦点时,表单可见性如何恢复?如何在应用程序最小化时隐藏我的表单?

最佳答案

显示表单的

Visible 确实是 false,当应用程序最小化时调用 Hide 什么也不做,因为它作为最小化机制的一部分被应用程序隐藏了。

代码调用 ShowOwnedPopups在应用程序最小化时首先使用“False”作为“bShow”,然后在应用程序恢复时使用“True”作为“bShow”。由于该函数显示了之前调用隐藏的所有窗口,因此改变了窗体的可见性两者之间没有任何影响。

现在,请参阅函数文档的备注部分中的引用,

if a pop-up window is hidden by using the ShowWindow function, subsequently calling ShowOwnedPopups with the fShow parameter set to TRUE does not cause the window to be shown

因此,一种解决方案是在应用程序隐藏表单之前隐藏它,这样它就不会在恢复时显示。但是接下来我们要知道在恢复的时候这个显示形式到底是隐藏还是显示。这可以通过在显示窗体上放置属性或使用全局变量来实现。在下面,'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;

关于windows - 最小化应用程序时隐藏表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6295317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com