С настольными (Windows) приложениями, окно сообщения (диалоговое окно) используется для предупреждения пользователя приложения о том, что необходимо предпринять какое-то действие, что какая-то операция была завершена или, вообще, привлечь внимание пользователей.
В DelphiСуществует несколько способов отображения сообщения для пользователя. Вы можете использовать любое из готовых процедур отображения сообщений, представленных в RTL, например ShowMessage или InputBox; или вы можете создать свое собственное диалоговое окно (для повторного использования): CreateMessageDialog.
Общая проблема со всеми вышеупомянутыми диалоговыми окнами состоит в том, что они требует, чтобы приложение было активным, чтобы отображаться пользователю. «Активный» относится к тому, когда ваше приложение имеет «фокус ввода».
Если вы действительно хотите привлечь внимание пользователя и помешать ему делать что-либо еще, вы должны быть в состоянии отображать системное модальное верхнее окно сообщения, даже если ваше приложение не активно.
Системно-модальная вершина большинства сообщений
Хотя это может показаться сложным, на самом деле это не так.
Поскольку Delphi может легко получить доступ к большинству вызовов API Windows, выполнение функции Windows MessageBox сделает свое дело.
Определяется в модуле «windows.pas» - тот, который включен по умолчанию в предложение использования каждой формы Delphi, Окно сообщения Функция создает, отображает и управляет окном сообщения. Окно сообщения содержит определенное приложением сообщение и заголовок, а также любую комбинацию предварительно определенных значков и кнопок.
Вот как объявляется MessageBox:
функция Окно сообщения(
hWnd: HWND;
lpText,
lpCaption: PAnsiChar;
uType: Cardinal): целое число;
Первый параметр, HWND, является дескриптором окна владельца окна сообщения, которое будет создано. если вы создаете окно сообщения при наличии диалогового окна, используйте дескриптор для диалогового окна в качестве HWND параметр.
lpText и lpCaption укажите заголовок и текст сообщения, отображаемый в окне сообщения.
Последний является uType Параметр и самый интересный. Этот параметр указывает содержимое и поведение диалогового окна. Этот параметр может быть комбинацией различных флагов.
Пример: системное модальное окно предупреждения при изменении системной даты / времени
Давайте рассмотрим пример создания системного модального верхнего окна сообщения. Вы будете обрабатывать сообщение Windows который отправляется всем работающим приложениям, когда системные изменения даты / времени- например, с помощью апплета панели управления «Свойства даты и времени».
Функция MessageBox будет вызываться как:
Окна. Окно сообщения(
ручка,
«Это системное модальное сообщение» # 13 # 10 «из неактивного приложения»,
«Сообщение из неактивного приложения!»,
MB_SYSTEMMODAL или MB_SETFOREGROUND или MB_TOPMOST или MB_ICONHAND);
Самым важным элементом является последний параметр. «MB_SYSTEMMODAL или MB_SETFOREGROUND или MB_TOPMOST» гарантирует, что окно сообщения будет модальным, самым верхним и станет главным окном.
- MB_SYSTEMMODAL флажок гарантирует, что пользователь должен ответить на окно сообщения, прежде чем продолжить работу в окне, определенном параметром hWnd.
- MB_TOPMOST Флаг указывает, что окно сообщения должно быть расположено над всеми не верхними окнами и должно оставаться над ними, даже когда окно деактивировано.
- MB_SETFOREGROUND флаг гарантирует, что окно сообщения становится окном переднего плана.
Вот полный пример кода (TForm с именем «Form1» определен в модуле «unit1»):
единица измерения Раздел 1;
интерфейс
использования
Windows, сообщения, SysUtils, варианты, классы,
Графика, элементы управления, формы, диалоги, ExtCtrls;
тип
TForm1 = учебный класс(ТГогт)
частный
процедура WMTimeChange (var Msg: TMessage); сообщение WM_TIMECHANGE;
общественности
{Публичные декларации}
конец;
вар
Форма 1: TForm1;
реализация{$ R * .dfm}
процедура TForm1.WMTimeChange (var Msg: TMessage);
начать
Окна. Окно сообщения(
ручка,
«Это системное модальное сообщение» # 13 # 10 «из неактивного приложения»,
«Сообщение из неактивного приложения!»,
MB_SYSTEMMODAL или MB_SETFOREGROUND или MB_TOPMOST или MB_ICONHAND);
конец;
конец.
Попробуйте запустить это простое приложение. Убедитесь, что приложение свернуто или, по крайней мере, какое-то другое приложение активно. Запустите апплет панели управления «Свойства даты и времени» и измените системное время. Как только вы нажмете кнопку «ОК» (на апплет) будет отображено модальное верхнее окно сообщения из неактивного приложения.