确保ShowMessage窗口始终置顶

4

我有几个应用程序,在长时间操作结束时会调用ShowMessage('完成!')。

大多数情况下,这很好用,但偶尔消息对话框会出现在主窗体后面。

有没有办法确保ShowMessage总是在最上面?

谢谢!

1个回答

4
请调用Windows MessageBox() API,并传入活动窗体的句柄。实际上,我的代码一直使用Application.MainFormHandle,因此我确信这是一种合理而简单的方法。
这将具有系统本机对话框的优点,而不是自制的Delphi版本。它还支持剪贴板操作。
如果你想非常花哨,那么可以使用Vista 任务对话框,但那太复杂了,显然你不需要为这样一个简单的对话框使用它。

David,你能给我一个例子,说明你在应用程序中如何使用Application.MainForm.Handle吗? - Orionizer
@Orionizer ShowMessage 接受一个参数。它看起来不太容易调整。我不知道您使用的 Delphi 版本(可能相关),但我猜 Application.MessageBox 可以解决您的问题,并为您处理所有者窗口句柄问题。我仍然建议直接调用 Win32 MessageBox,通过包装器轻松进行未来的更改。 - David Heffernan
@Orionizer 这是 MessageBox() 的第一个参数。 - David Heffernan
哦,你的意思不是调用Application.MessageBox吗?我会认为这将执行相同的操作,只是自动为您传递MainForm.Handle。另外,我正在使用D7(不幸的是,我仍然有Win9x机器必须运行我的软件)。 - Orionizer
@Orionizer 我认为在 D7 中调用 Application.MessageBox 是可以的,而且基本上是等效的。它会费些周折来确保对话框出现在当前活动窗体所在的显示器上。 - David Heffernan
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接