تقدم النماذج المشروطة ميزات خاصة لا يمكننا امتلاكها عند العرض بطريقة غير مشروطة. الأكثر شيوعًا ، سنعرض نموذجًا بشكل مشروط لعزل عملياته من أي شيء قد يحدث في النموذج الرئيسي. بمجرد اكتمال هذه العمليات ، قد ترغب في معرفة ما إذا ضغط المستخدم على الزر حفظ أو إلغاء لإغلاق النموذج المشروط. يمكنك كتابة بعض التعليمات البرمجية الشيقة لإنجاز ذلك ، ولكن لا يجب أن يكون صعبًا. دلفي توفر نماذج مشروطة بخاصية ModalResult ، والتي يمكننا قراءتها لإخبار كيفية خروج المستخدم من النموذج.
إرجاع التعليمات البرمجية التالية نتيجة ولكن روتين الاستدعاء يتجاهلها:
فار F: TForm2 ؛ ابدأ ف: = TForm2.Create (لا شيء); F.ShowModal ؛ F. الإفراج ؛ ...
يوضح المثال الموضح أعلاه النموذج فقط ، ويتيح للمستخدم فعل شيء به ، ثم يقوم بتحريره. للتحقق من كيفية إنهاء النموذج ، نحتاج إلى الاستفادة من حقيقة أن طريقة ShowModal هي دالة تُرجع إحدى قيم ModalResult العديدة. قم بتغيير الخط
F.ShowModal
إلى
إذا F.ShowModal = mrOk ثم
نحتاج إلى بعض التعليمات البرمجية في شكل مشروط لإعداد كل ما نريد استرداده. هناك أكثر من طريقة للحصول على ModalResult لأن TForm ليس المكون الوحيد الذي له خاصية ModalResult - TButton له أيضًا.
دعونا نلقي نظرة على ModalResult من TButton أولاً. ابدأ مشروعًا جديدًا وأضف نموذجًا إضافيًا (القائمة الرئيسية لـ Delphi IDE: ملف -> جديد -> نموذج). سيكون لهذا النموذج الجديد اسم "Form2". بعد ذلك ، أضف TButton (الاسم: 'Button1') إلى النموذج الرئيسي (Form1) ، وانقر نقرًا مزدوجًا فوق الزر الجديد وأدخل الرمز التالي:
إجراء TForm1.Button1Click (المرسل: TObject) ؛ فار و: TForm2 ؛ ابدأ و: = TForm2.Create (لا شيء); محاولةإذا F. ShowModal = mrOk ثم شرح: = "نعم" آخر التسمية التوضيحية: = "لا" ؛ أخيرا F. إطلاق سراح؛ النهاية; النهاية;
الآن حدد النموذج الإضافي. أعطها اثنين من الأزرار ، مع وضع علامة واحدة على "حفظ" (الاسم: "btnSave" ؛ التسمية التوضيحية: "حفظ" والآخر "إلغاء" (الاسم: "btnCancel" ؛ التسمية التوضيحية: "إلغاء"). حدد الزر حفظ واضغط F4 لإحضار المفتش الكائن ، قم بالتمرير لأعلى / لأسفل حتى تجد خاصية ModalResult و اضبطه على mrOk. ارجع إلى النموذج وحدد الزر "إلغاء الأمر" ، واضغط على F4 ، وحدد خاصية ModalResult ، واضبطه على السيد.
إنها بهذه السهولة. الآن اضغط F9 لتشغيل المشروع. (بناءً على إعدادات البيئة الخاصة بك ، قد تطالب Delphi بحفظ الملفات.) بمجرد ظهور النموذج الرئيسي ، اضغط على Button1 الذي أضفته سابقًا ، لإظهار النموذج الفرعي. عندما يظهر النموذج الفرعي ، اضغط على الزر "حفظ" ثم يتم إغلاق النموذج ، بمجرد الرجوع إلى ملاحظة النموذج الرئيسية التي تظهر عليها عبارة "نعم". اضغط على زر النموذج الرئيسي لإحضار النموذج الفرعي مرة أخرى ولكن هذه المرة اضغط على زر "إلغاء الأمر" (أو زر إغلاق قائمة النظام أو الزر [x] في منطقة التسمية التوضيحية). سيظهر عنوان النموذج الرئيسي "لا".
كيف يعمل هذا؟ لمعرفة ذلك ، ألق نظرة على حدث Click لـ TButton (من StdCtrls.pas):
إجراء زر. انقر؛ فار النموذج: TCustomForm ؛ ابدأ النموذج: = GetParentForm (Self) ؛ إذا لا شيء ثم شكل. ModalResult: = ModalResult؛ وارث انقر؛ النهاية;
ما يحدث هو أن صاحب (في هذه الحالة النموذج الثانوي) من TButton يحصل على مجموعة ModalResult وفقًا لقيمة ModalResult من TButton. إذا لم تقم بتعيين TButton. ModalResult ، فإن القيمة هي mrNone (افتراضيًا). حتى إذا تم وضع زر TButton على عنصر تحكم آخر ، فلا يزال النموذج الأصلي يستخدم لتعيين نتائجه. ثم يستدعي السطر الأخير حدث النقر الموروث من فئة سلفه.
لفهم ما يحدث في نماذج ModalResult ، من المفيد مراجعة الرمز في Forms.pas ، والذي يجب أن تتمكن من العثور عليه في.. \ DelphiN \ Source (حيث يمثل N رقم الإصدار).
في دالة ShowModal في TForm ، مباشرة بعد عرض النموذج ، تبدأ حلقة تكرار حتى ، والتي تستمر في التحقق من أن ModalResult المتغير يصبح قيمة أكبر من الصفر. عند حدوث ذلك ، يغلق الرمز النهائي النموذج.
يمكنك تعيين ModalResult في وقت التصميم ، كما هو موضح أعلاه ، ولكن يمكنك أيضًا تعيين خاصية ModalResult للنموذج مباشرةً في التعليمات البرمجية في وقت التشغيل.