شرح تفصيلي لفئة Tapplication في دلفي TApplication هو نوع تطبيق دلفي. هذه الفئة ترث من TComponent ويتم الإعلان عنها في نماذج الوحدة. وهناك تطبيق كائن عام في النماذج. تتضمن أساليبها وخصائصها العمليات والخصائص الأساسية المثبتة مثل إنشاء التطبيقات وتشغيلها وتدميرها في نظام التشغيل Windows، وبالتالي تبسيط الواجهة بين المستخدم وبيئة Windows عند كتابة تطبيقات Windows في دلفي. يتضمن TApplication الوظائف الأربع التالية: 1. معالجة رسائل Windows. 2. تسريع القائمة ومعالجة لوحة المفاتيح. 3. معالجة الاستثناءات. 4. المساعدة السياقية عبر الإنترنت. سيقدم لك ما يلي الخصائص والأساليب والأحداث شائعة الاستخدام في TApplication. 1. السمة 1. 1 سمة نشطة تشير السمة النشطة إلى ما إذا كان التطبيق نشطًا وله تركيز. التعريف كما يلي: PRperty Active: Boolean Active خاصية للقراءة فقط. نشط صحيح عندما يكون التطبيق نشطا، خطأ خلاف ذلك. يقوم مُنشئ TApplica-tion بتعيين Active على True. إذا تم التركيز على نافذة أو تطبيق، فهذا يعني أن التطبيق نشط. يصبح التطبيق الحالي غير نشط عندما تصبح نافذة تطبيق آخر نشطة. عند إغلاق التطبيق، يقوم مدمر TApplication بتعيين Active إلى False. في التطبيق، يمكنك استخدام مؤقت (TTimer) للتحقق من قيمة السمة Active لتحديد ما إذا كان التطبيق الحالي نشطًا حتى يمكن إجراء المعالجة المناسبة. يمكن أيضًا تعريف العمليات المحددة في الحدث OnActive والحدث OnDeactive. 1.2 خاصية DialogHandle توفر خاصية DialogHandle آلية لتطبيقات دلفي لاستخدام مربعات حوار غير دلفي. التعريف كما يلي: الخاصية DialogHandle: HWnd؛ عند استخدام وظيفة API CreateDialog لإنشاء مربع حوار غير مشروط، تحتاج إلى استخدام DialogHandle، وتحتاج إلى عرض الرسائل في حلقة رسالة التطبيق لتنفيذ العمليات المقابلة. على سبيل المثال، عندما يتلقى مربع حوار غير مشروط رسالة تنشيط (WM_NCACTIVATE)، يمكن تعيين مقبضه إلى DialogHandle، وعندما يتلقى مربع الحوار رسالة إلغاء التنشيط، يتم تعيين DialogHandle إلى 0. 1.3 ExeName السمة تحتوي السمة ExeName على اسم ملف التطبيق القابل للتنفيذ ومعلومات المسار. يتم تعريفه على النحو التالي: الخاصية ExeName: string؛ ExeName هي خاصية للقراءة فقط. استخدم ExeName للحصول على اسم ملف التطبيق القابل للتنفيذ. هذه سمة مفيدة للغاية. على سبيل المثال، عند تشغيل التطبيق f:/media/myapp.exe على القرص المضغوط، قد تحتاج إلى الوصول إلى الملفات الموجودة في الدليل f:/media/data/ أو تحديد حرف محرك الأقراص حيث يوجد التطبيق. في هذا الوقت، يمكنك استخدام الوظائف ExtractFilePath وExtractFileName التي توفرها دلفي لتحليل السمة ExeName للحصول على المعلومات المطلوبة. 1.4 مقبض السمة يوفر مقبض السمة إمكانية الوصول إلى مقبض النافذة الرئيسية للتطبيق. يتم تعريفه على النحو التالي: الخاصية Handle: HWND يجب استخدامها عند استدعاء وظيفة Windows API التي تتطلب مقبض النافذة الأصلية. على سبيل المثال، قد تحتاج مكتبة الارتباط الديناميكي (DLL) الموجودة في أحد التطبيقات إلى مقبض النافذة الأصلية بحيث يمكن أن تظهر في المقدمة ويتم وضعها في المقدمة. استخدم Application.Handle لتكوين عدة نوافذ للتطبيق، بحيث يمكن تصغير هذه النوافذ أو استعادتها أو تمكينها أو تعطيلها في التطبيق. ملاحظة: عند كتابة مكتبة ارتباط ديناميكي تستخدم نماذج VCL، يجب تعيين مقبض النافذة الرئيسية في البرنامج الرئيسي قيد التشغيل إلى خاصية Application.Handle الخاصة بمكتبة الارتباط الديناميكي. وهذا يجعل شكل مكتبة الارتباط الديناميكي يصبح جزءًا من التطبيق الرئيسي. من المهم الإشارة إلى أنه لا يجب عليك أبدًا تعيين قيمة لـ Application.Handle في تطبيق EXE. 1.5 ملف تعليمات السمة يحدد ملف تعليمات السمة اسم الملف الذي يستخدمه التطبيق لعرض محتوى التعليمات. التعريف كما يلي: الخاصية HelpFile: string؛ استخدام HelpFile هو أن يكون لدى التطبيق ملف تعليمات باستخدام نظام تعليمات Windows القياسي. يعرض Windows ملف التعليمات المحدد بواسطة خاصية HelpFile. لكي يتمكن التطبيق الخاص بك من تحقيق ذلك، يجب عليك إعطاء الخاصية HelpFile قيمة اسم ملف في وقت التشغيل، أو تحديد ملف تعليمات في صفحة التطبيق الخاصة بمربع الحوار Project|Options في وقت التصميم. افتراضيًا، يعد ملف المساعدة عبارة عن سلسلة فارغة ('')، وتتجاهل أساليب المساعدة الخاصة بالتطبيق جميع محاولات عرض المساعدة. إذا كان ملف التعليمات يحتوي على أي محتوى، فسيقوم أسلوب موضوع التعليمات بإحضار نظام تعليمات Windows لتوفير المساعدة عبر الإنترنت بناءً على اسم الملف. ملاحظة: إذا تم تحديد ملف التعليمات الخاص بالنافذة النشطة، فسيتم عرض هذا الملف بدلاً من ملف التعليمات الخاص بالتطبيق. 1.6 تلميح السمة تحدد تلميح السمة السلسلة النصية التي تظهر في مربع "تلميح التعليمات". التعريف كما يلي: الخاصية Hint: string; الخاصية TApplication.Hint هي قيمة التلميح لعنصر التحكم أو عنصر القائمة الذي يتحرك خلاله الماوس. يمكن أيضًا تعيين قيمة سلسلة لهذه السمة توفر الإجراء أو الخطأ أو معلومات أخرى للمستخدم. لذلك، يمكن أن يؤدي استخدام خاصية Hint أيضًا إلى: نقل معلومات المطالبة من عنصر التحكم إلى منطقة عرض أخرى، على سبيل المثال، عرض المطالبة في شريط الحالة من خلال معالج الأحداث OnHint. في هذا الوقت، تتم قراءة سمة التلميح. قم بوصف حالة التطبيق بإيجاز عندما يقوم بتنفيذ إجراء ما. في هذا الوقت، يتم تعيين سمة التلميح. تظهر مطالبة التعليمات عند وقوع حدث OnHint. ولذلك، حتى إذا تم تعيين خاصية Hint الخاصة بـ TApplication لعنوان شريط الحالة، على سبيل المثال، يعرض عنوان عنصر تحكم شريط الحالة قيمة السلسلة الحالية لخاصية Hint، فيجب أن تنسب إلى حدث OnHint. تتكون سلسلة التلميح من جزأين: تلميح قصير وتلميح طويل. يتم استخدام المطالبات القصيرة للمطالبات المنبثقة الموجزة؛ ويتم فصل المطالبات الطويلة والمطالبات القصيرة بشريط عمودي "|" ويتم استخدامها لعرض معلومات مطالبة أكثر تفصيلاً في شريط الحالة. يمكنك استخدام وظائف السلسلة GetShortHint وGetLongHint المتوفرة في عناصر تحكم الوحدة للحصول على تلميحات قصيرة وطويلة من سمة التلميح. ملاحظة: عندما يوفر أحد التطبيقات معلومات للمستخدم حول حدوث حدث ما عن طريق تعيين خاصية تلميح، يجب أن نتذكر أنه بشكل افتراضي، عندما يتحرك الماوس فوق عنصر التحكم، تتم إعادة تعيين سلسلة التلميح إلى قيمة خاصية التلميح من السيطرة. 1.7 الخاصية HintHidePause تحدد الخاصية HintHidePause الفاصل الزمني قبل إخفاء موجه التعليمات قبل نقل الماوس بعيدًا عن عنصر التحكم أو عنصر القائمة. يتم تعريفه على النحو التالي: الخاصية HintHidePause: عدد صحيح؛ استخدم HintHidePause لتحديد وقت الانتظار بالمللي ثانية. يتم تعيين هذه الخاصية على 2500 مللي ثانية (2.5 ثانية) في مُنشئ TApplication. يتم تحديد تلميح التعليمات الخاص بعنصر تحكم أو عنصر قائمة في خاصية تلميح. ملاحظة: بشكل افتراضي، يجب أن تكون قيمة HintHidePause محددة مسبقًا لتكون 3 إلى 5 أضعاف قيمة سمة HintPause. 1.8 الخاصية MainForm تحدد الخاصية MainForm النموذج الرئيسي للتطبيق بشكل فريد. يتم تعريفه على النحو التالي: الخاصية MainForm: TForm النموذج المحدد بواسطة خاصية MainForm ليس بالضرورة نفس النافذة الرئيسية للتطبيق. يجب أن تكون قيمة الخاصية MainForm هي النموذج الأول بين كافة النماذج التي تم إنشاؤها بواسطة الأسلوب CreateForm، ولكن قد لا يكون النموذج هو النافذة الرئيسية للتطبيق. عند إنشاء مشروع جديد، يتم تعيين قيمة سمة MainForm تلقائيًا إلى Form1. في وقت التصميم، يمكنك تحديد أحد النماذج المتعددة كنموذج رئيسي من خلال صفحة النماذج في مربع الحوار Project|Options. لا يمكن تعديل خاصية MainForm في وقت التشغيل لأن الخاصية للقراءة فقط. النموذج الرئيسي هو النموذج الأول الذي تم إنشاؤه بواسطة سمة التطبيق. ينتهي التطبيق عند إغلاق النموذج الرئيسي. في أحد التطبيقات، يمكنك استدعاء الأسلوب Application.MainForm.Close لإنهاء التطبيق. يمكنك الحصول على قيم الخصائص مثل Application.MainForm.Top وApplication.MainForm.Left لتحديد موضع وحجم الملف الحالي. نافذة نشطة. 1.9 الخاصية ShowMainForm تحدد الخاصية ShowMainForm ما إذا كان سيتم عرض النموذج الرئيسي عند بدء تشغيل التطبيق. يتم تعريفه على النحو التالي: خاصية ShowMainForm: Boolean؛ يستخدم التطبيق خاصية ShowMainForm للتحكم في ما إذا كان سيتم عرض النموذج الرئيسي الخاص به ومتى. يقوم مُنشئ TApplication بتعيين ShowMainForm على True. افتراضيًا، سيتم عرض النموذج الرئيسي، كما هو محدد في خاصية MainForm. إذا كنت بحاجة إلى إخفاء النموذج الرئيسي عند بدء تشغيل التطبيق، فيجب عليك تعيين ShowMainForm على False قبل استدعاء Application.Run في ملف المشروع الرئيسي، والتأكد من أن قيمة الخاصية Visible للنموذج الرئيسي هي False. يعد هذا مفيدًا في العديد من تطبيقات خوادم أتمتة OLE، مثل إخفاء النموذج الرئيسي لبرنامج الخادم عند بدء تشغيل خدمة الأتمتة. بالإضافة إلى ذلك، إذا كنت بحاجة إلى عرض صورة فلاش (Flash) عند بدء تشغيل التطبيق وإجراء بعض الاستعدادات لبيئة التطبيق، وتحتاج أيضًا إلى تعطيل عرض النموذج الرئيسي، فيمكن تحقيق ذلك أيضًا باستخدام سمة ShowMainForm. على سبيل المثال، عند بدء تشغيل دلفي، يتم تعطيل عرض النموذج الرئيسي. 1.10 تم إنهاء السمة تشير السمة التي تم إنهاؤها إلى ما إذا كان البرنامج قد تلقى رسالة Windows WM_QUIT التي تنهي البرنامج. التعريف كما يلي: الخاصية منتهية: منطقية، وهي خاصية للقراءة فقط. يتم استخدام هذه الخاصية بشكل أساسي عند استدعاء أسلوب ProcessMessages حتى لا يتوقف التطبيق عن محاولة معالجة رسائل Windows. عندما يتلقى الأسلوب ProcessMessages الرسالة WM_QUIT، سيتم تعيين Terminated إلى True. تتلقى تطبيقات دلفي دائمًا الرسالة WM_QUIT لأن النموذج أو التطبيق الرئيسي مغلق، أو بسبب استدعاء طريقة الإنهاء. عندما يقوم أحد التطبيقات بإجراء عملية مكثفة للغاية تستهلك الكثير من موارد النظام، يجب استدعاء الأسلوب Application-on.ProcessMessages بشكل دوري ويجب التحقق من الخاصية Application.Terminated لتحديد ما إذا كانت العملية بحاجة إلى إنهاء لإنهاء التطبيق . 1.11 خاصية UpdateFormatSettings تحدد خاصية UpdateFormatSettings ما إذا كان التطبيق يقوم تلقائيًا بتحديث إعدادات التنسيق عندما يقوم المستخدم بتغيير تكوين النظام. يتم تعريفها على النحو التالي: خاصية UpdateFormatSettings: Boolean؛ باستخدام تطبيق خاصية UpdateFormatSettings يمكن التحكم في التحديث التلقائي لإعدادات التنسيق. يقوم مُنشئ TApplication بتعيين هذه الخاصية على True. سيتم التحقق من الخاصية UpdateFormatSett-ings عندما يتلقى التطبيق الرسالة WM_WININICHANGE. يوصى باستخدام إعدادات التنسيق الافتراضية، وهي إعدادات Windows المحلية. يمكنك ضبط UpdateFormatSe-ttings على False لتجنب تغيير إعدادات التنسيق أثناء تنفيذ تطبيق دلفي. 1.12 السمة UpdateMetricSettings السمة UpdateMetricSettings تشير إلى ما إذا كان سيتم تحديث الإعدادات ذات الصلة مثل خط النافذة المطالبة وعنوان الرمز. التعريف كما يلي: الخاصية UpdateMetricSettings: Boolean؛ تشير الخاصية UpdateFormatSettings إلى ما إذا كانت التغييرات في الإعدادات مثل خط نافذة المطالبة وعنوان الرمز في النظام تنعكس في التغييرات في الإعدادات ذات الصلة في التطبيق. يقوم مُنشئ TApplication بتعيين القيمة الأولية لـ UpdateMetricSettings على True. 2. الطريقة 2.1 الطريقة BringToFront تقوم الطريقة BringToFront بتعيين أحدث إطار نشط في التطبيق في مقدمة كافة الإطارات الموجودة على سطح المكتب. تعريفه كما يلي: الإجراء BringToFront استخدم أسلوب BringToFront للعثور على أحدث نافذة نشطة تنتمي إلى النموذج الرئيسي وإحضارها إلى المقدمة. يمكن لأسلوب BringToFront أيضًا اختبار ومعرفة ما إذا كانت النافذة مرئية (مرئية) وصالحة (ممكّنة) قبل أن تصبح النافذة الأمامية. على سبيل المثال، عندما يتلقى أحد التطبيقات بريدًا، فقد يحتاج إلى تنشيط معالج مخصص وإحضاره إلى واجهة سطح مكتب Windows. في هذا الوقت، يمكنك استدعاء الأسلوب Application.BringToFront لتحقيق ذلك. 2.2 طريقة إنشاء النموذج يتم استخدام أسلوب إنشاء النموذج لإنشاء نموذج (نموذج) جديد. يتم تعريفه على النحو التالي: الإجراء CreateForm(FormClass: TFormClass; var Reference)؛ ستستدعي تطبيقات Delphi دائمًا طريقة CreateForm. لذلك، نادرًا ما يكون من الضروري للمبرمجين استدعاء الأسلوب CreateForm مباشرةً. يتضمن مشروع دلفي النموذجي استدعاء واحد أو أكثر لطريقة CreateForm في جزء الكود الرئيسي للمشروع، ويتحكم تلقائيًا في إنشاء النموذج عند استخدام مصمم النموذج. يمكنك أيضًا استدعاء الأسلوب CreateForm في وقت التشغيل لإنشاء نموذج ديناميكيًا. تقوم طريقة CreateForm بإنشاء نموذج محدد جديد بناءً على معلمة FormClass وتقوم بتعيين النموذج إلى مرجع المعلمة المتغيرة. مالك النموذج الذي تم إنشاؤه حديثًا هو كائن التطبيق. سيقوم التطبيق افتراضيًا بالنموذج الأول الذي تم إنشاؤه عن طريق استدعاء CreateForm باعتباره النموذج الرئيسي للمشروع. 2.3 طريقة HandleException توفر طريقة HandleException مؤشرًا افتراضيًا لاستثناءات التطبيق. يتم تعريفه على النحو التالي: الإجراء HandleException(Sender: TObject); طريقة HandleException مفيدة لمؤلفي مكونات محددة لأنها يمكن أن تولد حدثًا لا يلزمه الرد على رسائل Windows. يمكنك استخدام معالج الأحداث OnException في تطبيقك للتحكم في عمليات الاستثناء الأخرى في التعليمات البرمجية المخصصة. في كود التطبيق، إذا تجاوز الاستثناء جميع كتل المحاولة، فسيقوم التطبيق تلقائيًا باستدعاء طريقة HandleE-xception وسيعرض مربع حوار يطالب بحدوث خطأ. ما لم يكن كائن الاستثناء هو EAbort، فسيقوم Han-dleException باستدعاء مقبض OnException (إذا كان موجودًا)، وإلا فسيتم استدعاء ShowException لعرض مربع حوار يطالب بحدوث خطأ. 2.4 أسلوب UnhookMainWindow يتم استخدام أسلوب UnhookMainWindow لتحرير البرنامج المعلق على النموذج الرئيسي بواسطة أسلوب HookMainWindow. التعريف كما يلي: اكتب TWindowHook = function(var message: TMessage): Boolean of object; الإجراء UnhookMainWindow(Hook: TWindowHook); استخدم UnhookMainWindow لتحرير نافذة الخطاف. حدد إجراء مربع الحوار في المعلمة Hook. نوع TwindowHook هو معلمة استدعاء أسلوب HookMainWindow. هذه المعلمة هي مؤشر الطريقة لاستدعاء برنامج الحوار في مربع حوار غير دلفي. تشبه برامج الحوار برامج النوافذ من حيث أن كلاهما يعالج الرسائل الخاصة بمربعات الحوار، لكن بناء الجملة مختلف. 3. الحدث 3.1 الحدث OnActivate يحدث الحدث OnActivate عندما يصبح التطبيق نشطًا. التعريف كما يلي: اكتب TNotifyEvent = الإجراء (المرسل: TObject) الخاصية OnActivate: TNotifyEvent؛ استخدم الحدث OnActive لكتابة معالج حدث لتحديد معالجة خاصة عندما يصبح التطبيق نشطًا. يصبح تطبيق Windows نشطًا عند تشغيله في البداية أو عندما يتم نقل تركيزه مرة أخرى إلى التطبيق الحالي من تطبيق Windows آخر. 3.2 حدث OnDeactivate يحدث حدث OnDeactivate عندما يصبح التطبيق غير نشط. يتم تعريفه على النحو التالي: اكتب TNotifyEvent = الإجراء (المرسل: TObject) للكائن؛ الخاصية OnDeactivate: TNotifyEvent؛ يمكن تشغيل حدث OnDeactive مباشرة قبل أن يصبح التطبيق غير نشط، وبالتالي إكمال المعالجة الخاصة المحددة في معالج الحدث. يحدث حدث OnDeactive للتطبيق الحالي عندما ينتقل المستخدم من التطبيق الحالي إلى تطبيق آخر. 3.3 حدث OnException يحدث الحدث OnException عند حدوث استثناء غير قابل للمعالجة في التطبيق. يتم تعريفه على النحو التالي: اكتب TExceptionEvent = الإجراء (المرسل: TObject؛ E: استثناء) للكائن؛ خاصية OnException: TExceptionEvent؛ يمكنك استخدام حدث OnException لتغيير الإجراء الافتراضي عند حدوث استثناء بدون معالج في التطبيق. في الأسلوب TApplication.HandleException، يتم استدعاء معالج الأحداث OnException تلقائيًا. يتم استخدام الحدث OnException فقط لمعالجة الاستثناءات التي تحدث أثناء معالجة الرسائل. الاستثناءات التي تحدث قبل أو بعد تنفيذ Application.Run لن تتسبب في حدوث حدث OnException. إذا تم تجاهل استثناء في كتلة المحاولة الخاصة بكود التطبيق، فسيقوم التطبيق تلقائيًا باستدعاء أسلوب HandleException. ما لم يكن كائن الاستثناء هو EAbort، فسوف يستدعي HandleException مقبض OnException (إذا كان موجودًا)، وإلا فسيتم استدعاء ShowException لعرض مربع حوار يطالب بحدوث خطأ. نوع TExceptionEvent هو نوع حدث OnException، الذي يشير إلى طريقة لمعالجة الاستثناءات في التطبيق. المعلمة المرسل هي الكائن الذي يطرح الاستثناء، والمعلمة E هي كائن الاستثناء. 3.4 حدث OnHelp يحدث حدث OnHelp عندما يتلقى التطبيق طلب مساعدة. التعريف كما يلي: اكتب THelpEvent = function (Command: Word; Data: Longint; var CallHelp: Boolean): خاصية الكائن OnHelp: استخدم OnHelp لكتابة معالج حدث لإكمال المعالجة الخاصة عندما يكون هناك طلب للمساعدة. الأسلوب HelpContext والأسلوب HelpJump تلقائياً رفع الحدث OnHelp. اضبط CallHelp على True لتمكين VCL من الاتصال بـ WinHelp بعد وقوع الحدث؛ واضبط CallHelp على False لمنع VCL من استدعاء WinHelp. جميع الطرق المتعلقة بالمساعدة في تطبيقات دلفي تمر عبر حدث OnHelp. يتم استدعاء WinHelp فقط عندما تقوم المعلمة CallHelp في الحدث OnHelp بإرجاع True أو عندما لا يتم تعيين الحدث OnHelp إلى مؤشر صالح. 3.5 حدث OnHint عندما يتحرك مؤشر الماوس عبر عنصر تحكم أو عنصر قائمة ويتمكن عنصر التحكم أو عنصر القائمة من عرض مطالبة تعليمات، يقع الحدث OnHint. التعريف كما يلي: اكتب TNotifyEvent = الإجراء (المرسل: TObject) الخاصية OnHint: TNotifyEvent؛ يمكن لمعالج الأحداث المكتوب باستخدام OnHint تنفيذ العملية المحددة عند وقوع حدث OnHint. عندما يقوم المستخدم بوضع مؤشر الماوس على عنصر تحكم وكانت قيمة خاصية التلميح لعنصر التحكم ليست سلسلة فارغة ('')، فسيقع الحدث OnHint. يتم عادةً استخدام حدث OnHint لعرض قيمة خاصية Hint لعنصر تحكم أو عنصر قائمة كعنوان لعنصر تحكم اللوحة (مثل TStatusBar)، بحيث يتم استخدام اللوحة كشريط الحالة. عند وقوع حدث OnHint، يتم عادةً تحديد سمة التلميح كتلميح تعليمات وتلميح أطول يتم عرضه في مكان آخر. 3.6 حدث OnIdle يحدث حدث OnIdle عندما يصبح التطبيق خاملاً. التعريف كما يلي: اكتب TIdleEvent = الإجراء (المرسل: TObject؛ var Done: Boolean) للخاصية OnIdle: TIdleEvent استخدم OnIdel لكتابة معالج حدث لإكمال العملية المحددة عندما يكون التطبيق خاملاً. يكون التطبيق خاملاً عندما لا يقوم بتنفيذ أي تعليمات برمجية. على سبيل المثال، يكون التطبيق خاملاً أثناء انتظار إدخال المستخدم. نوع TIdelEvent هو نوع حدث OnIdel، الذي يشير إلى طريقة يتم تشغيلها عندما يكون التطبيق خاملاً. يحتوي الكائن TIdelEvent على متغير تم تعيينه افتراضيًا على True. عندما يكون "تم" صحيحًا، سيتم استدعاء وظيفة Windows API WaitMessage عند عودة OnIdel. يؤدي WaitMessage إلى حصول التطبيقات الأخرى على تركيز التحكم حتى تظهر رسالة جديدة في قائمة انتظار رسائل التطبيق. عندما تكون المعلمة Done False والتطبيق غير مشغول، فلن يسمح التطبيق للتطبيقات الأخرى بالحصول على تركيز التحكم. عندما يصبح التطبيق خاملاً، يحدث حدث OnIdel مرة واحدة فقط، وقد لا يحدث حدث OnIdel التالي حتى يتم تعيين المعلمة Done على True. يؤدي تعيين "تم" إلى "خطأ" بواسطة التطبيق إلى التخلص من الأعداد غير المنتظمة لوقت وحدة المعالجة المركزية التي يمكن أن تؤثر على الأداء العام للنظام. 3.7 يتم إنشاء حدث OnMessage عندما يتلقى التطبيق رسالة WINDOWS ويتم تعريفه على النحو التالي: نوع TMessageEvent = الإجراء (var Msg: TMsg; var Handled: Boolean) الخاصية OnMessage: يتم استخدام TmessageEvent لتلقي رسائل WINDOWS يمكنه استقبال جميع الرسائل التي يرسلها البرنامج إلى WINDOWS. يتم إنشاء هذا الحدث عندما يتلقى التطبيق رسالة. المتغير Msg من نوع الرسالة WINDOWS.