Показване на модулна кутия за съобщения TopMost с Delphi

С настолни (Windows) приложения, a съобщение (диалогов прозорец) се използва, за да предупреди потребителя на приложението, че трябва да се предприемат някакви действия, че е извършена някаква операция или като цяло да се привлече вниманието на потребителите.

в Delphi, има няколко начина за показване на съобщение на потребителя. Можете или да използвате някое от готовите съобщения, показващи рутини, предоставени в RTL, като ShowMessage или InputBox; или можете да създадете свой собствен диалогов прозорец (за повторна употреба): CreateMessageDialog.

Често срещан проблем при всички горепосочени диалогови прозорци е, че те изискват приложението да бъде активно, за да бъде показано на потребителя. „Активно“ се отнася до това, когато приложението ви има „фокус за въвеждане“.

Ако наистина искате да привлечете вниманието на потребителя и да им попречите да правят каквото и да било друго, трябва да можете покажете най-горната система за съобщения в системата, дори когато приложението ви не е активно.

instagram viewer

Системно-модално най-високо поле за съобщения

Въпреки че това може да звучи сложно, в действителност всъщност не е така.

Тъй като Delphi може лесно да получи достъп до повечето обаждания в API на Windows, изпълняването на функцията "MessageBox" за API на Windows ще свърши работа.

Определен в единицата "windows.pas" - тази, включена по подразбиране в клаузата за използване на всеки формуляр на Delphi, MessageBox функция създава, показва и управлява поле за съобщения. Полето за съобщения съдържа определено от приложението съобщение и заглавие, заедно с всяка комбинация от предварително зададени икони и бутони.

Ето как се декларира MessageBox:

функция MessageBox (

hWnd: HWND;
lpText,
lpCaption: PAnsiChar;
uType: Cardinal): цяло число;

Първият параметър, hwnd, е дръжката на прозореца на собственика на полето за съобщения, което ще бъде създадено. ако създадете поле за съобщения, докато има диалогов прозорец, използвайте дръжка към диалоговия прозорец като hWnd параметър.

Най- lpText и lpCaption посочете надписа и текста на съобщението, който се показва в полето за съобщения.

Последно е uType параметър и е най-интересното. Този параметър определя съдържанието и поведението на диалоговия прозорец. Този параметър може да бъде комбинация от различни флагове.

Пример: Система за предупреждение за модал на системата, когато датата / часът на системата се промени

Нека да разгледаме пример за създаване на най-горната кутия за съобщения на системата. ти ще боравете със съобщението на Windows който се изпраща до всички работещи приложения, когато промени в датата / времето на системата- например за използване на аплета на контролния панел "Свойства на датата и часа".

Функцията MessageBox ще се нарича така:

 Windows. MessageBox (

 дръжка,

 „Това е системно модално съобщение“ # 13 # 10'от неактивно приложение “,

 „Съобщение от неактивно приложение!“,

 MB_SYSTEMMODAL или MB_SETFOREGROUND или MB_TOPMOST или MB_ICONHAND);

Най-важното парче е последният параметър. „MB_SYSTEMMODAL или MB_SETFOREGROUND или MB_TOPMOST“ гарантира, че полето за съобщения е системно модално, най-отгоре и става прозореца на преден план.

  • MB_SYSTEMMODAL флаг гарантира, че потребителят трябва да отговори на полето за съобщения, преди да продължи работата в прозореца, идентифициран от параметъра hWnd.
  • MB_TOPMOST flag посочва, че полето за съобщение трябва да бъде поставено над всички най-горните прозорци и да стои над тях, дори когато прозорецът е деактивиран.
  • MB_SETFOREGROUND флагът гарантира, че полето за съобщения става прозореца на преден план.

Ето пълния примерен код (TForm, наречен "Form1", дефиниран в единица "unit1"):

мерна единица Unit1;

интерфейс


употреби

 Windows, Съобщения, SysUtils, Варианти, Класове,

 Графика, контроли, форми, диалози, ExtCtrls;


Тип

 TForm1 = клас(TForm)

частен

процедура WMTimeChange (var Msg: TMessage); съобщение WM_TIMECHANGE;

обществен

{Публични декларации}

край;

Var

 Форма1: TForm1;


изпълнение{$ R * .dfm}


процедура TForm1.WMTimeChange (var Msg: TMessage);

започвам

 Windows. MessageBox (

 дръжка,

 „Това е системно модално съобщение“ # 13 # 10'от неактивно приложение “,

 „Съобщение от неактивно приложение!“,

 MB_SYSTEMMODAL или MB_SETFOREGROUND или MB_TOPMOST или MB_ICONHAND);

край;

край.

Опитайте да стартирате това просто приложение. Уверете се, че приложението е сведено до минимум или поне, че е активирано някое друго приложение. Пуснете аплета на контролния панел „Свойства на датата и часа“ и променете системното време. Веднага щом натиснете бутона „Ок“ (на аплет) ще се покаже най-горното поле за съобщения на системата от вашето неактивно приложение.

instagram story viewer