في دلفي، يحتوي كل مشروع على نافذة واحدة على الأقل - النافذة الرئيسية للبرنامج. تستند جميع نوافذ تطبيق دلفي كائن TForm.
شكل
كائنات النموذج هي اللبنات الأساسية لتطبيق دلفي ، وهي النوافذ الفعلية التي يتفاعل معها المستخدم عند تشغيل التطبيق. للنماذج خصائصها وأحداثها وأساليبها التي يمكنك من خلالها التحكم في مظهرها وسلوكها. النموذج هو في الواقع مكون دلفي ، ولكن على عكس المكونات الأخرى ، لا يظهر النموذج في لوحة المكونات.
نقوم عادةً بإنشاء كائن نموذج عن طريق بدء تطبيق جديد (File | New Application). سيكون هذا النموذج الذي تم إنشاؤه حديثًا ، بشكل افتراضي ، النموذج الرئيسي للتطبيق - النموذج الأول الذي تم إنشاؤه في وقت التشغيل.
ملاحظة: لإضافة نموذج إضافي إلى مشروع دلفي ، حدد ملف | صيغة جديدة.
ولادة
OnCreate
يتم تشغيل حدث OnCreate عند إنشاء TForm لأول مرة ، أي مرة واحدة فقط. العبارة المسؤولة عن إنشاء النموذج موجودة في مصدر المشروع (إذا تم تعيين النموذج ليتم إنشاؤه تلقائيًا بواسطة المشروع). عند إنشاء نموذج وخاصية Visible الخاصة به هي True ، فإن الأحداث التالية تحدث بالترتيب المدرج: OnCreate و OnShow و OnActivate و OnPaint.
يجب عليك استخدام معالج الأحداث OnCreate للقيام ، على سبيل المثال ، بأعمال التهيئة مثل تخصيص قوائم السلاسل.
يجب تحرير أي كائنات تم إنشاؤها في حدث OnCreate بواسطة حدث OnDestroy.
OnCreate -> OnShow -> OnActivate -> OnPaint -> OnResize -> OnPaint...
OnShow
يشير هذا الحدث إلى أنه يتم عرض النموذج. يتم استدعاء OnShow قبل أن يصبح النموذج مرئيًا. إلى جانب النماذج الرئيسية ، يحدث هذا الحدث عندما نقوم بتعيين خاصية Visible الخاصية إلى True ، أو استدعاء الأسلوب Show أو ShowModal.
OnActivate
يتم استدعاء هذا الحدث عندما يقوم البرنامج بتنشيط النموذج - أي عندما يتلقى النموذج تركيز الإدخال. استخدم هذا الحدث لتغيير عنصر التحكم الذي يتم التركيز عليه بالفعل إذا لم يكن العنصر المطلوب.
OnPaint ، OnResize
يتم استدعاء الأحداث مثل OnPaint و OnResize دائمًا بعد إنشاء النموذج في البداية ، ولكن يتم استدعاؤها أيضًا بشكل متكرر. يحدث OnPaint قبل رسم أي عناصر تحكم في النموذج (استخدمه لطلاء خاص على النموذج).
الحياة
ولادة شكل ليست مثيرة للاهتمام كما يمكن أن تكون الحياة والموت. عندما يتم إنشاء النموذج الخاص بك وجميع عناصر التحكم في انتظار الأحداث للتعامل معها ، يتم تشغيل البرنامج حتى يحاول شخص ما إغلاق النموذج!
الموت
يتوقف التطبيق الذي يعتمد على الحدث عن العمل عند إغلاق جميع نماذجه ولا يتم تنفيذ أي رمز. إذا استمر وجود نموذج مخفي عند إغلاق آخر نموذج مرئي ، فسيظهر التطبيق الخاص بك منتهية (لأنه لا توجد نماذج مرئية) ، ولكنها في الواقع ستستمر في العمل حتى تظهر جميع النماذج المخفية مغلق. مجرد التفكير في موقف حيث يتم إخفاء النموذج الرئيسي في وقت مبكر ويتم إغلاق جميع الأشكال الأخرى.
... OnCloseQuery -> OnClose -> OnDeactivate -> OnHide -> OnDestroy
OnCloseQuery
عندما نحاول إغلاق النموذج باستخدام طريقة الإغلاق أو بوسائل أخرى (Alt + F4) ، يتم استدعاء حدث OnCloseQuery. وبالتالي ، فإن معالج الأحداث لهذا الحدث هو المكان الذي يتم فيه اعتراض إغلاق النموذج ومنعه. نستخدم OnCloseQuery لسؤال المستخدمين عما إذا كانوا متأكدين من أنهم يريدون حقًا إغلاق النموذج.
إجراء TForm1.FormCloseQuery (المرسل: TObject؛ فار CanClose: منطقي) ؛
ابدأ
إذاMessageDlg("هل تريد بالفعل إغلاق هذه النافذة؟" ، mtConfirmation ، [mbOk ، mbCancel] ، 0) = mrCancel ثم CanClose: = خطأ ؛
النهاية;
يحتوي معالج الأحداث OnCloseQuery على متغير CanClose الذي يحدد ما إذا كان النموذج مسموحًا بإغلاقه. قد يقوم معالج الأحداث OnCloseQuery بتعيين قيمة CloseQuery إلى False (عبر معلمة CanClose) ، مما يؤدي إلى إحباط أسلوب الإغلاق.
OnClose
إذا أشار OnCloseQuery إلى أنه يجب إغلاق النموذج ، يتم استدعاء حدث OnClose.
يمنحنا حدث OnClose فرصة أخيرة لمنع النموذج من الإغلاق. يحتوي معالج الأحداث OnClose على معلمة Action ، مع القيم الأربع المحتملة التالية:
- لا يمكن. لا يسمح بإغلاق النموذج. تمامًا كما لو قمنا بتعيين CanClose إلى False في OnCloseQuery.
- إخفاء. بدلاً من إغلاق النموذج الذي تخفيه.
- خالية. النموذج مغلق ، لذلك يتم تحرير الذاكرة المخصصة من قبل دلفي.
- قم بتقليل. يتم تصغير النموذج بدلاً من إغلاقه. هذا هو الإجراء الافتراضي لنماذج MDI التابعة. عندما يقوم مستخدم بإيقاف تشغيل Windows ، يتم تنشيط حدث OnCloseQuery ، وليس OnClose. إذا كنت تريد منع Windows من إيقاف التشغيل ، فضع التعليمات البرمجية في معالج الأحداث OnCloseQuery ، بالطبع CanClose = False لن يقوم بذلك.
OnDestroy
بعد معالجة أسلوب OnClose وإغلاق النموذج ، يتم استدعاء حدث OnDestroy. استخدم هذا الحدث للعمليات المقابلة لتلك الموجودة في حدث OnCreate. يستخدم OnDestroy لإلغاء تخصيص الكائنات المتعلقة بالنموذج وتحرير الذاكرة المقابلة.
عند إغلاق النموذج الرئيسي للمشروع ، ينتهي التطبيق.