为 Windows 11 更新 Application.Messagebox 的外观

Posted

技术标签:

【中文标题】为 Windows 11 更新 Application.Messagebox 的外观【英文标题】:Modernizing the look of Application.Messagebox for Windows 11 【发布时间】:2021-11-11 13:26:58 【问题描述】:

有没有一种方法可以使Application.MessageBox() 对话框在 Win11 中的外观现代化?也许通过创建清单文件或其他东西来使经典桌面应用看起来更新?

【问题讨论】:

你不是已经在使用清单了吗?但是 IIRC Delphi 7 不使用Application.MessageBox 的系统对话框。您可以直接调用 Windows API MessageBox,确保您拥有 comctl v6 清单,您将获得本机系统对话框。 我只是想知道人们在坚持使用过时的开发工具的同时要求对其应用程序进行现代化改造吗? 这通常不是他们的决定。 该评论适用于责任链中的其他任何人。 @UweRaabe 直到几个月前,我还在使用 C++Builder 6 来编写我公司的软件,它拥有完美的现代化 UI。您并不总是需要更新的工具来使用更新的 API 【参考方案1】:

一句话,没有。

Application.MessageBox() 调用 Win32 MessageBox() API,这是一个旧对话框。

要获得更新的外观,您需要使用 Windows Vista 中引入的 Win32 Task Dialog API,而不是使用 MessageBox()

现代 Delphi 版本在 (Vcl.)Dialogs 单元中具有 TTaskDialog 组件和 TaskMessageDlg...() 包装函数。但这些在 Delphi 7 中不存在,因此您必须手动定义和导入任务对话框 API 类型和函数。

【讨论】:

您可能想要使用更方便的界面,例如specials.rejbrand.se/dev/classes/TDMessageBox/TDMessageBox.html(免责声明:我的网站)。 @AndreasRejbrand 我是否已经要求您实现CTRL+C 功能,以便所有对话框的内容作为文本进入剪贴板? @AmigoJack:我不记得了,但我的TDMessageBox.pas 只是TTaskDialog 的包装,所以它是一个原生的Win32 任务对话框。因此,它确实支持Ctrl+C。 @AndreasRejbrand 啊,是的,现在我也看到了。太好了! mORMot makes TTaskDialog available 到 D6 及更高版本,适用于那些不想手动实现它的人。

以上是关于为 Windows 11 更新 Application.Messagebox 的外观的主要内容,如果未能解决你的问题,请参考以下文章

Windows 11 的 2022 更新为每个人带来了新的东西

经典组件大更新,微软为Windows 11重新设计记事本

经典组件大更新,微软为Windows 11重新设计记事本

Windows 11 新版 25163 推送!任务栏全新菜单应用商店更新文件资源管理器大量修复...

window11有必要升级吗?

win11安装wondow+serve2008显示无法更新安装文件?