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

2024-06-25

我有一个主表单和一个状态表单,当我的应用程序中的工作正在进行时,我会显示它们。如果工作完成我就打电话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(使用前将#替换为@)

当应用程序最小化时隐藏表单 的相关文章

  • 如何防止从快照恢复虚拟机时出现“本机与域之间的信任关系失败”错误?

    当您从 足够旧的 快照恢复虚拟机 属于 Windows 域 时 您将收到以下错误 本机与域之间的信任关系失败 发生这种情况是因为域控制器定期更新计算机帐户密码 可能还有其他一些事情 有什么方法可以配置域控制器 或其他任何东西 以防止这种情况
  • 如何获取文件或目录的标准化日期/时间戳。在纯批处理脚本中?

    Windows 命令行中有没有一种方法可以检索标准化文件或目录的日期 时间戳 修改 创建 访问 独立于语言环境格式 例如 ISO8601 http www iso org iso home standards iso8601 htm 我发现
  • 找出用户属于哪些组

    我有一个刚刚创建的 Windows 用户帐户 以 XYZ 为例 此 XYZ 属于我在计算机管理 gt 本地用户和组中创建的用户组和自定义组 因此 在属性中我看到该用户属于 2 个组 现在我想获取这些组并显示它们 有什么建议么 我已经这样做了
  • 批量-用特殊字符替换字符串

    我想使用批处理文件替换文件中的字符串 该字符串是 我想用以下方式替换它 我发现了几篇帖子 比如这个 如何替换 Windows 批处理文件中的子字符串 https stackoverflow com questions 5273937但该示例
  • 关于 Windows、原始鼠标数据的代码要 #include 哪些内容

    我发现下面的帖子对于做我自己的项目非常有用 那么新手问题是 我必须包含什么才能使其发挥作用 Link 如何准确测量具有已知 DPI 的鼠标的鼠标移动 以英寸或厘米为单位 https stackoverflow com questions 1
  • C++ 控制台键盘事件

    有什么方法可以获取 Windows 控制台中的关键事件吗 我需要一种无需 GUI 即可快速获取 keydown 和 keyup 事件的方法 我尝试过使用 getch 但它没有获取按键并等待按下某个键才返回 Use ReadConsoleIn
  • 如何使用 LiveBindings 在 TStringGrid 中显示超过 200 行?

    我有一个TDataSource这是由一个支持TClientDataset绑定到一个TStringGrid 我通过右键单击网格并选择 Link to DB Datasource 然后选择数据源 这为我设置了 LiveBindings 当我运行
  • 在用户提示“手动关闭”之前,WiX 在卸载时调用应用程序

    我有一个安装程序 它安装一个应用程序并在安装完成后立即启动该应用程序 这对我来说很有效 但现在我想在卸载应用程序时停止该应用程序 我不希望提示用户手动关闭应用程序 这将全自动工作 我需要使用自定义操作来执行此操作 WM CLOSE 消息在我
  • Delphi 2009中TBitmap绘制透明图像

    在 TBitmap 对象上绘制半透明 PNG 图像时出现问题 如果 TBitmap 的 HandleType 设置为 bmDDB 则画布将绘制为透明 但问题是它并不适用于所有类型的机器 例如 苹果计算机上的 Windows 当 TBitma
  • MySQL 在 Windows 上将数据库文件存储在哪里以及文件的名称是什么?

    我不小心格式化了硬盘并重新安装了 Windows 却忘记备份 MySQL 服务器中的重要数据库 我现在正在尝试使用某些软件来挽救文件 但我不知道要寻找什么 文件存储的路径是什么 文件的名称是什么 我应该查找什么命名约定或文件扩展名 我相信我
  • 为什么 mod_wsgi 在 Windows 上不支持守护进程模式?

    On http code google com p modwsgi http code google com p modwsgi 人们可以阅读这一声明 然而 mod wsgi 的守护进程模式将 仅适用于 Apache 2 0 或 2 2 运
  • 如何使用 Delphi 并行检查拼写?

    我有一种用 Delphi 编写的拼写检查器 它逐句分析文本 它在解析每个句子后根据一些规则对错误的项目进行着色 用户能够中断此过程 这一点很重要 我如何使用一些第 3 方 Delphi 库并行化这个过程 在当前状态下 我在检查后已经对句子进
  • 当c的控制台使用c或c++运行时禁用键盘按键

    我想在程序运行时禁用键盘 这意味着没有人可以使用 alt F4 等 我如何在 Windows 操作系统中使用 c 使其成为可能 Handle WM SYSKEYUP WM SYSKEYDOWN并返回0 这是处理这些消息的 WndProc L
  • .NET 4.0 是否与 Windows XP SP2 或更低版本兼容? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我读过这里http www microsoft com downloads en details aspx FamilyID 5765
  • 在 DLL 中使用 IXMLDocument 需要 CoInitialize?

    有没有理由使用CoInitialize使用时在我的 DLL 函数中IXMLDocument msxml 包装器 或与此相关的其他 com 对象 调用应用程序 线程是否负责调用CoInitialize CoUninitialize 如果我使用
  • Delphi应用程序中子菜单位置错误

    我的应用程序是用delphi 编写的 由于某种原因 主菜单的行为不再像昨天那样 我可能在不知情的情况下触及了某些属性 现在 当我单击带有子项的菜单项时 尽管箭头位于右侧 但子菜单始终向左打开 是什么原因以及如何恢复 正如问题评论中所揭示的那
  • 如何更改按钮上的光标?

    static HWND btn HCURSOR cursor LoadCursor 0 IDC CROSS case WM CREATE btn CreateWindow TEXT BUTTON TEXT Press Me WS CHILD
  • npm 在 Windows 中不被识别为内部或外部命令

    当我尝试跑步时npm install在 Windows 上 我收到以下错误 怎样才能摆脱它呢 D Xampp htdocs laravelchat gt npm install CALL C Program Files nodejs nod
  • 命令中带空格的 Windows C 系统调用

    我无法使用名称和参数中的空格进行系统调用 例如 system c program files something example exe c my files example txt 我尝试过各种我知道的方法来逃避 但没有任何效果 我努力了
  • 保留部分桌面

    如何使用 Delphi 保留桌面的一侧 像 Vista 侧边栏那样的东西 你想要的叫做应用程序桌面工具栏 http msdn microsoft com en us library bb776821 28VS 85 29 aspx 您必须使

随机推荐