Wyświetl modalne systemowe okno komunikatu TopMost z Delphi

W przypadku aplikacji komputerowych (Windows): okno komunikatu (okno dialogowe) służy do ostrzegania użytkownika aplikacji, że należy podjąć pewne działania, że ​​niektóre operacje zostały zakończone lub, ogólnie rzecz biorąc, zwrócić uwagę użytkowników.

W Delfy, istnieje kilka sposobów wyświetlania wiadomości użytkownikowi. Możesz użyć dowolnej z gotowych procedur wyświetlania komunikatów dostępnych w RTL, takich jak ShowMessage lub InputBox; lub możesz utworzyć własne okno dialogowe (do ponownego użycia): CreateMessageDialog.

Częstym problemem we wszystkich powyższych oknach dialogowych jest to, że wymagają, aby aplikacja była aktywna, aby była wyświetlana użytkownikowi. „Aktywny” odnosi się do sytuacji, gdy aplikacja ma „fokus wejściowy”.

Jeśli naprawdę chcesz przyciągnąć uwagę użytkownika i powstrzymać go przed zrobieniem czegoś innego, musisz mieć taką możliwość wyświetlać modalne systemowe okno komunikatu, nawet gdy aplikacja nie jest aktywna.

System-Modal Top Większość komunikatów

Choć może się to wydawać skomplikowane, w rzeczywistości tak nie jest.

instagram viewer

Ponieważ Delphi ma łatwy dostęp do większości wywołań API Windows, wykonanie funkcji API Windows „MessageBox” załatwi sprawę.

Zdefiniowane w jednostce „windows.pas” - domyślnie zawartej w klauzuli use każdego formularza Delphi, Skrzynka pocztowa funkcja tworzy, wyświetla i obsługuje okno komunikatu. Okno komunikatu zawiera komunikat i tytuł zdefiniowany przez aplikację, a także dowolną kombinację predefiniowanych ikon i przycisków.

Oto jak deklarowany jest MessageBox:

funkcjonować Skrzynka pocztowa(

hWnd: HWND;
lpText,
lpCaption: PAnsiChar;
uType: Cardinal): liczba całkowita;

Pierwszy parametr, hwnd, jest uchwytem okna właściciela okna komunikatu, które ma zostać utworzone. jeśli utworzysz okno komunikatu, gdy okno dialogowe jest obecne, użyj uchwytu do okna dialogowego jako hWnd parametr.

The lpText i lpCaption podaj podpis i tekst wiadomości wyświetlany w polu wiadomości.

Ostatni jest uType parametr i jest najciekawszy. Ten parametr określa zawartość i zachowanie okna dialogowego. Ten parametr może być kombinacją różnych flag.

Przykład: Systemowe modalne okno ostrzegawcze, gdy zmienia się data / czas systemowy

Rzućmy okiem na przykład utworzenia górnego okna komunikatu modalnego systemu. Będziesz obsłużyć komunikat Windows wysyłany do wszystkich działających aplikacji, gdy zmiany daty / godziny systemowej- na przykład za pomocą apletu Panelu sterowania „Właściwości daty i godziny”.

Funkcja MessageBox zostanie wywołana jako:

 Windows Skrzynka pocztowa(

 uchwyt,

 „To jest komunikat modalny systemu” # 13 # 10 z nieaktywnej aplikacji ”,

 „Wiadomość z nieaktywnej aplikacji!”,

 MB_SYSTEMMODAL lub MB_SETFOREGROUND lub MB_TOPMOST lub MB_ICONHAND);

Najważniejszym elementem jest ostatni parametr. „MB_SYSTEMMODAL lub MB_SETFOREGROUND lub MB_TOPMOST” zapewnia, że ​​okno komunikatu jest modalne, najwyższe i staje się oknem pierwszego planu.

  • MB_SYSTEMMODAL Flaga zapewnia, że ​​użytkownik musi odpowiedzieć na okno komunikatu przed kontynuowaniem pracy w oknie określonym przez parametr hWnd.
  • MB_TOPMOST Flaga określa, że ​​okno komunikatu powinno znajdować się nad wszystkimi oknami, które nie znajdują się najwyżej i powinny pozostać nad nimi, nawet gdy okno jest wyłączone.
  • MB_SETFOREGROUND Flaga zapewnia, że ​​okno komunikatu stanie się oknem pierwszego planu.

Oto pełny przykładowy kod (TForm o nazwie „Form1” zdefiniowany w jednostce „unit1”):

jednostka Rozdział 1;

berło


wykorzystuje

 Windows, Wiadomości, SysUtils, Warianty, Klasy,

 Grafika, formanty, formularze, okna dialogowe, ExtCtrls;


rodzaj

 TForm1 = klasa(TForm)

prywatny

procedura WMTimeChange (var Msg: TMessage); wiadomość WM_TIMECHANGE;

publiczny

{Oświadczenia publiczne}

koniec;

var

 Form1: TForm1;


realizacja{$ R * .dfm}


procedura TForm1.WMTimeChange (var Msg: TMessage);

zaczynać

 Windows Skrzynka pocztowa(

 uchwyt,

 „To jest komunikat modalny systemu” # 13 # 10 z nieaktywnej aplikacji ”,

 „Wiadomość z nieaktywnej aplikacji!”,

 MB_SYSTEMMODAL lub MB_SETFOREGROUND lub MB_TOPMOST lub MB_ICONHAND);

koniec;

koniec.

Spróbuj uruchomić tę prostą aplikację. Upewnij się, że aplikacja jest zminimalizowana lub przynajmniej że jest aktywna inna aplikacja. Uruchom aplet Panelu sterowania „Właściwości daty i godziny” i zmień czas systemowy. Jak tylko naciśniesz przycisk „Ok” (na aplet) zostanie wyświetlone modalne systemowe okno komunikatu z nieaktywnej aplikacji.

instagram story viewer