ביישומי שולחן עבודה (Windows), א תיבת הודעה (דו-שיח) משמש כדי להתריע למשתמש ביישום שצריך לנקוט בפעולה כלשהי, שהפעולה הושלמה או באופן כללי כדי לקבל את תשומת הלב של המשתמשים.
בתוך דלפי, ישנן מספר דרכים להצגת הודעה למשתמש. אתה יכול להשתמש בכל אחת מההודעות המוכנות המציגות שגרות המוצעות ב- RTL, כמו ShowMessage או InputBox; או שתוכל ליצור תיבת דו-שיח משלך (לשימוש חוזר): CreateMessageDialog.
בעיה נפוצה עם כל תיבות הדו-שיח שלעיל היא שהן דורשים שהיישום יהיה פעיל כדי להציג בפני המשתמש. "פעיל" מתייחס כאשר לאפליקציה שלך יש "מיקוד קלט".
אם אתה באמת רוצה לתפוס את תשומת ליבו של המשתמש ולמנוע ממנו לעשות כל דבר אחר, אתה צריך להיות מסוגל להציג תיבת הודעות עליונה ביותר במערכת, גם כאשר היישום שלך אינו פעיל.
מערכת-מודאלית בראש תיבת ההודעות
למרות שזה נשמע מסובך, בפועל זה ממש לא.
מכיוון שדלפי יכולה לגשת בקלות למרבית השיחות של Windows API, הפעלת פונקציית "MessageBox" של Windows API תעשה את העבודה.
מוגדר ביחידת "windows.pas" - זו הכלולה כברירת מחדל בסעיף השימושים של כל טופס דלפי, תיבת הודעות הפונקציה יוצרת, מציגה ומפעילה תיבת הודעות. תיבת ההודעות מכילה הודעה וכותרת מוגדרת על ידי יישום, יחד עם כל שילוב של סמלים מוגדרים מראש וכפתורי לחיצה.
כך מוכרז ה- MessageBox:
פונקציה תיבת הודעות(
hWnd: HWND;
lpText,
lp הכיתוב: PAnsiChar;
סוג u: קרדינל): מספר שלם;
הפרמטר הראשון, hwnd, הוא הידית של חלון הבעלים של תיבת ההודעות שתיווצר. אם אתה יוצר תיבת הודעה כאשר קיימת תיבת דו-שיח, השתמש בידית לתיבת הדו-שיח בתור hWnd פרמטר.
ה lpText ו lp הכיתוב ציין את הכיתוב ואת טקסט ההודעה המוצג בתיבת ההודעות.
אחרון הוא 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 = מעמד(TForm)
פרטי
תהליך WMTimeChange (var Msg: TMessage); הודעה WM_TIMECHANGE;
ציבורי
{הצהרות פומביות}
סוף;
var
טופס 1: TForm1;
יישום{$ R * .dfm}
תהליך TForm1.WMTimeChange (var Msg: TMessage);
התחל
חלונות. תיבת הודעות(
ידית,
'זו הודעה מודאלית מערכתית' # 13 # 10 'מאפליקציה לא פעילה',
'הודעה מאפליקציה לא פעילה!',
MB_SYSTEMMODAL או MB_SETFOREGROUND או MB_TOPMOST או MB_ICONHAND);
סוף;
סוף.
נסה להריץ את היישום הפשוט הזה. ודא שהיישום ממוזער או לפחות שיישום אחר פעיל. הפעל את היישומון "מאפייני תאריך ושעה" של לוח הבקרה ושנה את זמן המערכת. ברגע שאתה לוחץ על כפתור "Ok" (על הכפתור יישומון) תוצג תיבת ההודעות העליונה ביותר של המערכת מיישום לא פעיל.