التعليقات

كيفية إنشاء واستخدام وإغلاق النماذج في دلفي

كيفية إنشاء واستخدام وإغلاق النماذج في دلفي

في دلفي ، يحتوي كل مشروع على نافذة واحدة على الأقل - النافذة الرئيسية للبرنامج. تستند جميع نوافذ تطبيق Delphi إلى كائن TForm.

شكل

كائنات النموذج هي لبنات البناء الأساسية لتطبيق Delphi ، وهي الإطارات الفعلية التي يتفاعل معها المستخدم عند تشغيله للتطبيق. النماذج لها خصائصها وأحداثها وطرقها التي يمكنك من خلالها التحكم في مظهرها وسلوكها. يعد النموذج في الواقع مكونًا من عناصر دلفي ، ولكن على عكس المكونات الأخرى ، لا يظهر النموذج على لوحة المكون.

نقوم عادةً بإنشاء كائن نموذج عن طريق بدء تطبيق جديد (ملف | تطبيق جديد). سيكون هذا النموذج المنشأ حديثًا ، بشكل افتراضي ، هو النموذج الرئيسي للتطبيق - النموذج الأول الذي تم إنشاؤه في وقت التشغيل.

ملاحظة: لإضافة نموذج إضافي إلى مشروع دلفي ، حدد ملف | نموذج جديد.

ولادة

OnCreate عنصر
يتم تشغيل حدث OnCreate عند إنشاء TForm لأول مرة ، أي مرة واحدة فقط. البيان المسؤول عن إنشاء النموذج موجود في مصدر المشروع (إذا تم تعيين النموذج ليتم إنشاؤه تلقائيًا بواسطة المشروع). عندما يتم إنشاء نموذج وتكون الخاصية مرئيًا له هي True ، تحدث الأحداث التالية بالترتيب المدرج: OnCreate و OnShow و OnActivate و OnPaint.

يجب عليك استخدام معالج الأحداث OnCreate للقيام ، على سبيل المثال ، مهام التهيئة مثل تخصيص قوائم السلسلة.

يجب تحرير أي كائنات تم إنشاؤها في حدث OnCreate بواسطة حدث OnDestroy.

OnCreate -> OnShow -> OnActivate -> OnPaint -> OnResize -> OnPaint ...

OnShow
يشير هذا الحدث إلى أنه يتم عرض النموذج. يسمى OnShow قبل أن يصبح النموذج مرئيًا. إلى جانب النماذج الرئيسية ، يحدث هذا الحدث عندما نقوم بتعيين الخاصية Visible للنماذج إلى True ، أو استدعاء الأسلوب Show أو ShowModal.

OnActivate
يتم استدعاء هذا الحدث عندما يقوم البرنامج بتنشيط النموذج - أي عندما يتلقى النموذج تركيز الإدخال. استخدم هذا الحدث لتغيير عنصر التحكم الذي يحصل بالفعل على التركيز إذا لم يكن هو المطلوب.

OnPaint ، أحجم
يتم استدعاء الأحداث مثل 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) ، مما يؤدي إلى إحباط طريقة الإغلاق.

عند_الإغلاق
إذا أشار OnCloseQuery إلى ضرورة إغلاق النموذج ، فسيتم استدعاء حدث OnClose.

يمنحنا حدث OnClose فرصة أخيرة لمنع إغلاق النموذج. يحتوي معالج أحداث OnClose على معلمة إجراء ، مع القيم المحتملة الأربعة التالية:

  • caNone. لا يُسمح بإغلاق النموذج. كما لو أننا قمنا بتعيين CanClose إلى False في OnCloseQuery.
  • caHide. بدلاً من إغلاق النموذج الذي تخفيه.
  • caFree. تم إغلاق النموذج ، لذلك يتم تحرير الذاكرة المخصصة بواسطة دلفي.
  • caMinimize. يتم تصغير النموذج ، بدلاً من إغلاقه. هذا هو الإجراء الافتراضي لنماذج MDI الفرعية. عندما يقوم المستخدم بإيقاف تشغيل Windows ، يتم تنشيط الحدث OnCloseQuery ، وليس OnClose. إذا كنت ترغب في منع Windows من إيقاف التشغيل ، فضع الشفرة في معالج الأحداث OnCloseQuery ، بالطبع CanClose = False لن يقوم بذلك.

OnDestroy
بعد معالجة أسلوب OnClose وإغلاق النموذج ، يتم استدعاء حدث OnDestroy. استخدم هذا الحدث للعمليات المقابلة لتلك الموجودة في حدث OnCreate. يستخدم OnDestroy لإلغاء تخصيص الكائنات المتعلقة بالنموذج وتحرير الذاكرة المقابلة.

عند إغلاق النموذج الرئيسي للمشروع ، يتم إنهاء التطبيق.