如何用delphi显示最顶层的系统模式消息框(display a topmost system modal message box with delphi)

对于桌面(Windows)应用程序,一个消息(对话框)用于提醒应用程序的用户需要采取某些操作、某些操作已完成,或者通常是为了引起用户的注意。...

对于桌面(Windows)应用程序,一个消息(对话框)用于提醒应用程序的用户需要采取某些操作、某些操作已完成,或者通常是为了引起用户的注意。

Group of IT experts in their office

在Delphi中,有几种向用户显示消息的方法。您可以使用RTL中提供的任何现成的消息显示例程,如ShowMessage或InputBox;或者您可以创建自己的对话框(供重用):CreateMessageDialog。

上述所有对话框的一个常见问题是,它们要求应用程序处于活动状态才能向用户显示。“活动”指应用程序具有“输入焦点”的时间

如果你真的想吸引用户的注意力,阻止他们做任何其他事情,你需要能够显示一个系统模式的最上面的消息框,即使你的应用程序没有激活。

系统模式最上面的消息框

尽管这听起来可能很复杂,但事实并非如此。

由于Delphi可以轻松访问大多数windowsapi调用,因此执行“MessageBox”windowsapi函数就可以了。

在“windows.pas”单元中定义——默认情况下包含在每个Delphi表单的uses子句中,MessageBox函数创建、显示和操作一个消息框。消息框包含应用程序定义的消息和标题,以及预定义图标和按钮的任意组合。

下面是MessageBox的声明方式:

function MessageBox(   hWnd: HWND;   lpText,   lpCaption : PAnsiChar;   uType : Cardinal) : integer;

第一个参数hwnd是要创建的消息框的所有者窗口的句柄。如果在对话框存在时创建消息框,请使用对话框的句柄作为hWnd参数。

lpText和lpCaption指定标题和消息框中显示的消息文本。

最后一个是uType参数,它是最有趣的。此参数指定对话框的内容和行为。此参数可以是各种标志的组合。

示例:系统日期/时间更改时的系统模式警告框

让我们来看一个创建系统模式顶层消息框的例子。当系统日期/时间更改时,您将处理发送到所有正在运行的应用程序的Windows消息,例如使用“日期和时间属性”控制面板小程序。

MessageBox函数将被称为:

Windows.MessageBox( handle, 'This is a system modal message'#13#10'from an inactive application', 'A message from an inactive application!', MB_SYSTEMMODAL or MB_SETFOREGROUND or MB_TOPMOST or MB_ICONHAND) ;

最重要的是最后一个参数。“MB_SYSTEMMODAL或MB_SETFOREGROUND或MB_TOPMOST”确保消息框处于系统模式、最上方,并成为前景窗口。

  • MB_SYSTEMMODAL标志确保用户必须在hWnd参数标识的窗口中继续工作之前响应消息框。
  • MB_TOPMOST标志指定消息框应放置在所有非最上面的窗口之上,并应保持在这些窗口之上,即使该窗口已停用。
  • MB_SETFOREGROUND标志确保消息框成为前台窗口。

下面是完整的示例代码(单元“unit1”中定义的名为“Form1”的TForm):

unit Unit1; interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm)    private procedure WMTimeChange(var Msg: TMessage) ; message WM_TIMECHANGE;    public { Public declarations } end; var Form1: TForm1; implementation{$R *.dfm} procedure TForm1.WMTimeChange(var Msg: TMessage) ; begin Windows.MessageBox( handle, 'This is a system modal message'#13#10'from an inactive application', 'A message from an inactive application!', MB_SYSTEMMODAL or MB_SETFOREGROUND or MB_TOPMOST or MB_ICONHAND) ; end; end.

尝试运行这个简单的应用程序。确保应用程序最小化,或者至少其他应用程序处于活动状态。运行“日期和时间属性”控制面板小程序并更改系统时间。当您点击“Ok”(确定)按钮(小程序上)时,将显示来自非活动应用程序的系统模式最顶部消息框。

  • 发表于 2021-09-15 03:45
  • 阅读 ( 230 )
  • 分类:编程

你可能感兴趣的文章

程序退出时delphi中的内存泄漏通知

自Delphi 2006以来的所有Delphi版本都有一个更新的内存管理器,该管理器速度更快,功能更丰富。 “新”内存管理器最出色的功能之一是允许应用程序注册(和注销)预期内存泄漏,并在程序关闭时报告意外内存泄漏。 使用De...

  • 发布于 2021-09-06 15:15
  • 阅读 ( 168 )

在delphi的tdbgrid中显示和编辑备注字段

...德 备注字段用于表示长文本或文本与数字的组合。使用Delphi构建数据库应用程序时,TMemoField对象用于表示数据集中的备注字段。TMemoField封装了包含文本数据或任意长度的字段的基本行为。在大多数数据库中,备注字段的大小受...

  • 发布于 2021-09-10 20:47
  • 阅读 ( 169 )

如何构建没有gui的控制台应用程序(build console applications with no gui)

...提供。 对于学生来说,控制台应用程序将简化Pascal和Delphi的学习——毕竟,所有Pascal入门示例都只是控制台应用程序。 新:控制台应用程序 下面介绍如何快速构建在没有图形界面的情况下运行的控制台应用程序。 如果...

  • 发布于 2021-09-10 22:34
  • 阅读 ( 251 )

在系统托盘中放置delphi应用程序

...还有其他图标吗?这个地方叫做Windows系统托盘。您想将Delphi应用程序的图标放在那里吗?您希望该图标设置动画还是反映应用程序的状态? 这对于长时间运行而没有用户交互的程序(通常整天都在电脑上运行的后台任务)非...

  • 发布于 2021-09-11 00:20
  • 阅读 ( 181 )

构建输入对话框

... showInputDialog 方法多次重载,以提供有关输入对话框显示方式的一些选项。它可以有文本字段、组合框或列表。每个组件都可以选择一个默认值。 带有文本字段的输入对话框 最常见的输入对话框只有一条消息、一个供用...

  • 发布于 2021-09-12 23:48
  • 阅读 ( 159 )

优化delphi程序的内存使用

...活动,最终降低计算机的速度。 02 2006年 何时在delphi应用程序中创建表单 假设您要设计一个包含主窗体和两个附加(模态)窗体的程序。通常,根据您的Delphi版本,Delphi将把表单插入到项目单元(DPR文件)中,并包...

  • 发布于 2021-09-15 03:43
  • 阅读 ( 200 )

用delphi截取键盘输入

...动我们的战舰。德尔福帮助! 截取键盘输入 大多数Delphi应用程序通常通过特定的事件处理程序处理用户输入,这些事件处理程序使我们能够捕获用户击键并处理鼠标移动。 我们知道焦点是通过鼠标或键盘接收用户输入的...

  • 发布于 2021-09-15 03:46
  • 阅读 ( 158 )

从delphi代码执行并运行应用程序和文件

Delphi编程语言提供了一种跨平台编写、编译、打包和部署应用程序的快速方法。尽管Delphi创建了一个图形用户界面,但您肯定会有很多次希望从Delphi代码中执行程序。假设您有一个使用外部备份实用程序的数据库应用程序。备...

  • 发布于 2021-09-15 03:48
  • 阅读 ( 144 )

拖动不带标题栏的delphi表单

...拖动窗口。继续阅读,了解如何在没有标题栏的情况下为Delphi表单提供拖动功能,以便用户可以通过单击客户端区域的任意位置来移动表单。 例如,考虑一个没有标题栏的Windows应用程序的情况,我们怎样才能移动这样的窗口...

  • 发布于 2021-09-15 03:49
  • 阅读 ( 149 )

如何用delphi搜索文件和文件夹(search for files and folders with delphi)

在查找文件时,在子文件夹中搜索通常是有用且必要的。在这里,您将看到如何使用Delphi的强大功能创建一个简单但功能强大的查找所有匹配文件项目。 文件/文件夹掩码搜索项目 下面的项目不仅允许您通过子文件夹搜索文...

  • 发布于 2021-09-15 03:52
  • 阅读 ( 214 )
nanya07600364268
nanya07600364268

0 篇文章

相关推荐