Delphi应用程序窗口z顺序和MainFormOnTaskBar属性

2024-05-16

我正在维护一个最初用 Delphi 7 编写并移植到 Delphi XE 的应用程序。

使用 Windows 7,我们遇到了一些问题,例如模态窗口出现在主窗口下方,以及最终无法与程序交互,因为用户需要与模态窗体交互,而这是不可能的,因为它位于主窗口下方。

为了避免这个问题我改变了任务栏上的主窗体 http://docwiki.embarcadero.com/Libraries/en/Vcl.Forms.TApplication.MainFormOnTaskBar将项目的属性设置为 True(较旧的项目没有此属性),现在我继续相同的项目。阅读文档我发现了新的 Form 属性弹出父窗口 http://docwiki.embarcadero.com/Libraries/en/Vcl.Forms.TForm.PopupParent。如果我将 MainFormOnTaskBar 设置为 True,是否必须使用此属性?这个问题还有其他解决方案吗?


是的,对于“弹出”的模态形式,您必须使用以下命令修复 Z 顺序弹出父窗口 http://docwiki.embarcadero.com/Libraries/en/Vcl.Forms.TForm.PopupParent or 弹出模式 http://docwiki.embarcadero.com/Libraries/en/Vcl.Forms.TCustomForm.PopupMode,正如所解释的艾伦·鲍尔 https://stackoverflow.com/users/20552/allen-bauer在他的博客文章中PopupMode 和 PopupParent http://blogs.embarcadero.com/abauer/2004/02/10/295.

任务栏上的主窗体 http://docwiki.embarcadero.com/Libraries/en/Vcl.Forms.TApplication.MainFormOnTaskBar文档说它与弹出窗口关系不大:它用于选择从何处获取任务栏上的标题/图标信息(您的应用 http://docwiki.embarcadero.com/Libraries/en/Vcl.Forms.Application or MainForm http://docwiki.embarcadero.com/Libraries/en/Vcl.Forms.TApplication.MainForm).

然而,MainFormOnTaskBar := True做更多并且史蒂夫·特雷芬森的这篇文章 http://www.stevetrefethen.com/blog/the-new-vcl-property-tapplication-mainformontaskbar-in-delphi-2007(前德尔福团队成员)更详细地解释了更多细节。

这个“更多”会产生涉及 z 顺序的后果。有些你可能会更喜欢或不太喜欢,所以这里有一些例子:

  • the MainForm 将成为新子窗口的父窗口 http://www.cybelesoft.com/blog/index.php/keep-child-windows-in-front/ which 使 MainForm 的 Z 顺序始终小于子窗口 http://borland.newsgroups.archived.at/public.delphi.ide.general/200705/0705109235.html
  • 就像您观察到的那样,它修复了 Delphi MainFormOnTaskBar := False)
  • 它支持某种形式的对接就像 LMD 组件一样 http://forum.lmd.de/discussion/205/application-mainformontaskbar-must-be-true-for-conjoined-docking-to-work-while-over-the-main-form

请注意,解决 Vista 带来的问题并不是一件容易的事,因为微软引入了更多的功能,但也剥夺了一些应用程序曾经拥有的自由。读these http://web.archive.org/web/20121016073000/http://www.installationexcellence.com/articles/VistaWithDelphi/Original/Index.html two articles http://web.archive.org/web/20121016071202/http://www.installationexcellence.com/articles/VistaWithDelphi/Index.html纳撒尼尔·伍尔斯 (Nathanial Woolls) 的作品,以获得更好的印象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi应用程序窗口z顺序和MainFormOnTaskBar属性 的相关文章

  • 加载 Jpg/Gif/Bitmap 并转换为 Bitmap

    我必须从 XML 文件加载图像 XML 文件中没有关于图像是否为 JPG GIF BMP 的信息 加载图像后 我需要将其转换为位图 有谁知道如何在不知道实际文件格式的情况下将图像转换为位图 我正在使用 Delphi 2007 2009 谢谢
  • 如何仅在调试模式下激活 ReportMemoryLeaksOnShutdown?

    我需要激活ReportMemoryLeaksOnShutdown报告应用程序内存泄漏的功能 但仅限于调试模式 当 Delphi IDE 运行时 我怎样才能做到这一点 如果您的意思是使用调试构建配置 D2007 编译的 调试模式 则您将定义
  • jquery 表单滑块(输入滑块)

    如何用 jquery 制作滑块 就像这里一样 用户应从滑块中选择一个值 该值应自动输入 我找不到合适的插件 http jqueryui com demos slider http jqueryui com demos slider slid
  • 具有两个按钮的表单以不同的值提交

  • 以表格形式连续调用/评估?

    大家好 简单的问题 使用 XLISP 编写程序 但我似乎遇到了一个我似乎无法解决的简单基本问题 也许有人有一个快速解决方案 我正在尝试编写一个 if 语句 该语句的 then 子句评估多种形式并返回最后一种形式的值 在示例中 setq PO
  • Windows 7 触摸屏 + Java Swing = 延迟鼠标事件

    我正在用 Java 开发一个 Swing 应用程序 该程序将在专用的 Windows 7 触摸屏机器上运行 据我所知 该程序应该是在正常操作下唯一在其上运行的程序 我注意到 Windows 7 的触摸屏界面有一个可以阻止 mousedown
  • 如何在 Delphi REST 中发布内容类型为“multipart/form-data”的数据?

    我正在尝试使用 REST API 发送请求multipart form data作为内容类型 我总是收到 HTTP 1 1 500 Internal Error 作为响应 我尝试向需要的方法发送请求application x www for
  • 任务失败,因为找不到“sgen.exe”

    尝试在 Visual Studio 2008 Professional Edition 中构建项目时出现以下错误 任务失败 因为未找到 sgen exe 或者未安装正确的 Microsoft Windows SDK 该任务正在注册表项 HK
  • 在 Access 表单上将控件分组在一起

    我有一个 Access2003 表单 我想将多个控件组合在一起并通过 VBA 代码以编程方式更改可见性 这可能吗 我确实知道我可以通过 格式 gt 组 对项目进行分组 但如果这样做 如何在代码中引用整个组 谢谢 您可以将所有控件放置在组框控
  • 从提交的表单中获取值

    我有一个非常简单的表格
  • node.js 和 npm 在 Windows 7 64 位旗舰版中没有网络访问权限

    注意 对于遇到此问题的其他人 我尝试了所有建议和所有研究 最后我格式化了硬盘并重新安装了windows 尽管从一开始就是全新安装 但某些 Windows 安装似乎根本无法与 Node 一起使用 据我所知 这是唯一的解决方案 首先 我已经发现
  • 根据另一个输入的值更改输入值

    我想要一个包含几个输入的表单 例如 名称和网址 当用户输入他们的名字时 我希望 url 输入自动将他们的名字作为默认值 并在单词之间使用下划线 因此 如果他们输入自己的名字 pedro kinkybottom 则会自动将 url 输入中的默
  • 单击按钮时,如何将数字存储在 html 表单输入中作为 javascript 变量? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 基本上我想做的是 当用户在 HTML 表单输入字段中输入一个数字 然后按下提交按钮时 该数字将存储在 JavaScript 变量中
  • 在node.js中使用pug在表单“post”之后发送空的{}

    我正在尝试使用 fetch 和以下 pug 代码通过 post 将表单数据从登录页面传递到登录页面 form id form login input type text name email value placeholder Tu ema
  • 为什么 cygwin 无法读取我的主目录中的 .ssh/config 文件?

    我正在使用 cygwin 并且正在尝试设置 ssh config 文件 Cygwin 的文件夹位于我的 C 驱动器中 我的主目录是 C Users USER 我注意到 当我编辑 C Users USER ssh config 时 cygwi
  • 如何在调试器中显示 TStringList 的内容?

    我想在调试应用程序时显示 TStringList 的全部内容 相反 我只是得到指示 Flist 仅显示地址 如果您使用的是 Delphi 2010 或更高版本 调试器允许使用调试可视化工具 http docwiki embarcadero
  • 如何在 Delphi DBLookupComboBox 中选择正确的项目

    我有一个数据库查找组合框连接到数据库查询 那部分工作正常 当我运行程序时数据库查找组合框填充有查询的结果 我想看看数据库查找组合框填充第一项 请选择 当 的时候程序第一次运行或者当一个新项目行动已启动 见下图 另外 如果我正在加载以前保存的
  • TOpenDialog/NSOpenPanel 无法在沙盒 Delphi 应用程序中工作

    Firemonkey 应用程序中的 TOpenDialog 似乎存在问题 该应用程序已针对 Mac Appstore 进行沙箱处理 我使用XE3 但它也存在于XE2中 我其实在这里找到了一份QC报告 但仍然没有解决 http qc emba
  • Word 2010 自动化:“转到书签”

    我有一个用 Delphi 7 编写的程序 它打开一个基于模板的新 Word 文档 文档打开后 系统会自动跳转到书签 在模板中预定义 并在其中添加一些文本 以下代码在 Word 2003 中工作正常 但会导致invalid variant o
  • Delphi 2009 IDE结构视图折叠功能

    现在有谁知道折叠 Delphi 2009 IDE 结构视图中的所有项目吗 我不知道折叠所有项目 这使我很难从视图中找到我的课程 Thanks 选择根节点 类 并按数字键盘上的 除号 那会让一切崩溃 然后按数字键盘上的 加号 键 第一级将展开

随机推荐