Jak wyświetlić modalne okno komunikatów systemu TopMost w Delphi?

Z nieaktywnej aplikacji Delphi

Grupa ekspertów IT w swoim biurze

gilaxia/Getty Images





W przypadku aplikacji komputerowych (Windows) a komunikat (okno dialogowe) służy do ostrzegania użytkownika aplikacji, że należy wykonać jakąś czynność, że jakaś operacja została zakończona lub ogólnie do zwrócenia uwagi 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 dostarczonych 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: wymagać, aby aplikacja była aktywna, aby była wyświetlana użytkownikowi . „Aktywny” odnosi się do sytuacji, w której aplikacja ma „koncentrację na wejściu”.

Jeśli naprawdę chcesz przyciągnąć uwagę użytkownika i powstrzymać go od robienia czegokolwiek innego, musisz być w stanie wyświetlaj systemowo modalne najwyższe okno komunikatu, nawet gdy Twoja aplikacja nie jest aktywna .



System-Modal Top Most Message Box

Choć może to brzmieć skomplikowanie, w rzeczywistości tak nie jest.

Ponieważ Delphi może łatwo uzyskać dostęp do większości wywołań Windows API, wykonanie funkcji Windows API 'MessageBox' załatwi sprawę.

Zdefiniowany w jednostce 'windows.pas' -- domyślnie zawartej w klauzuli uses 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 jest deklarowany MessageBox:



|_+_||_+_|
hWnd: HWND;
lpTekst,
lpPodpis : PANsiChar;
uType : Cardinal) : liczba całkowita;

Pierwszy parametr, hwnd , jest uchwytem okna właściciela tworzonego okna komunikatu. jeśli utworzysz okno komunikatu, gdy obecne jest okno dialogowe, użyj uchwytu okna dialogowego jako hWnd parametr.

The lpText oraz lpPodpis określ podpis i tekst komunikatu, który jest wyświetlany w oknie komunikatu.



Ostatni jest uTyp 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 okno ostrzeżenia modalnego, gdy systemowa data/godzina ulega zmianie

Rzućmy okiem na przykład tworzenia systemowego modalnego najwyższego okna komunikatu. będziesz obsłużyć wiadomość Windows który jest wysyłany do wszystkich uruchomionych aplikacji, gdy systemowe zmiany daty/czasu — na przykład za pomocą apletu Panelu sterowania „Właściwości daty i godziny”.



Funkcja MessageBox zostanie wywołana jako:

|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|

Najważniejszym elementem jest ostatni parametr. 'MB_SYSTEMMODAL lub MB_SETFOREGROUND lub MB_TOPMOST' zapewnia, że ​​okno komunikatu jest modalne systemowe, górne i staje się oknem pierwszego planu.



    MB_SYSTEMMODALflaga zapewnia, że ​​użytkownik musi odpowiedzieć na okno komunikatu przed kontynuowaniem pracy w oknie wskazanym przez parametr hWnd.MB_TOPMOSTflaga określa, że ​​okno komunikatu powinno być umieszczone nad wszystkimi oknami nie znajdującymi się na szczycie i powinno pozostać nad nimi, nawet gdy okno jest dezaktywowane.MB_SETFOREGROUNDflaga zapewnia, że ​​okno komunikatu stanie się oknem pierwszego planu.

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

|_+_||_+_|

|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|

|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|

|_+_|

Spróbuj uruchomić tę prostą aplikację. Upewnij się, że aplikacja jest zminimalizowana lub przynajmniej aktywna jest inna aplikacja. Uruchom aplet Panelu sterowania „Date and Time Properties” i zmień czas systemowy. Jak tylko naciśniesz przycisk „OK” (na aplet ) zostanie wyświetlone najwyższe okno komunikatu systemowego modalne z nieaktywnej aplikacji.