يشير ما يسمى بالاستثناء إلى خطأ مؤقت ناتج عن مشاكل في البرنامج نفسه أو عملية غير صحيحة من قبل المستخدم أثناء تشغيل البرنامج.
إيقاف تنفيذ البرنامج والحصول على نتائج خاطئة. من المؤكد أن أي شخص كتب برامج في دلفي سيكون على دراية بالاستثناءات. مصدر الاستثناء
هناك العديد من الجوانب، مثل الإشارة إلى مؤشر فارغ، أو التعيين خارج الحدود، أو القسمة على صفر، وما إلى ذلك. إذا لم يتم اتخاذ التدابير المناسبة للأحداث غير الطبيعية،
قد تؤدي المعالجة غير الصحيحة إلى تعطل البرنامج بأكمله. لحسن الحظ، يمكن لدلفي التعامل تلقائيًا مع جميع الاستثناءات التي قد تحدث تقريبًا.
التعامل مع.
1. مثال بسيط على معالجة دلفي للاستثناءات تلقائيًا
1. في بيئة دلفي (3.0) المتكاملة، حدد قائمة خيارات البيئة، وفي البيئة التي تظهر
يوجد خيار فاصل عند الاستثناء في صفحة التفضيلات المسبقة في نافذة الخيارات (في أسفل اليسار). هذا الخيار افتراضيا
يتم تحديد الحالة، بحيث إذا حدث استثناء عند تشغيل البرنامج في بيئة دلفي المتكاملة، فسيتم مقاطعة البرنامج تلقائيًا والعودة
في حالة تصحيح أخطاء دلفي، يظل المؤشر على الكود الذي يحدث فيه الاستثناء حتى يتمكن المبرمجون من تعديله. الآن انقر على هذا الخيار لجعله غير متاح
التحقق من ذلك وموافق.
2. أنشئ مشروعًا جديدًا واحفظه باسم Excep.dpr (سيكون مفيدًا لاحقًا)، واحفظ الوحدة المقابلة باسم Excpunit.pas في Form1
ضع مكون TmaskEdit فيه، واضبط خاصية EditMask الخاصة به على Date، ثم ضع مكون Tbutton، وانقر عليه نقرًا مزدوجًا،
اكتب حدث OnClick الخاص به كما يلي:
الإجراء TForm1.BitBtn1Click(Sender: TObject);
فار ك:عدد صحيح؛
يبدأ
ك:=0;
k:=9 div k;{سيتم إنشاء استثناء القسمة على 0 هنا}
نهاية؛
3. قم بحفظ البرنامج وتشغيله، ما عليك سوى كتابة رقم أو رقمين في MaskEdit1 ثم الضغط على Enter. سيؤدي ذلك إلى إنشاء (يسمى أيضًا التنشيط).
استثناء ينبثق النافذة التالية:
يعد هذا استثناءً بسبب عدم اكتمال البيانات المدخلة في مربع MaskEdit، حيث تقوم دلفي بمعالجتها تلقائيًا
بعد "موافق"، يستمر البرنامج في التنفيذ. انقر فوق Button1، وسوف تظهر نافذة أخرى مماثلة، لأن هناك
القسمة على صفر استثناء.
2. مطالبات دلفي للمواقف غير الطبيعية باللغة الإنجليزية، والتي لا يستخدمها الصينيون، يمكننا اعتراض هذه الاستثناءات وتنفيذها باستخدامها
نصائح صينية. الخطوات المحددة هي كما يلي:
1. قم بتعديل حدث OnClick الخاص بـ Button1 كما يلي:
الإجراء TForm1.BitBtn1Click(Sender: TObject);
فار ك:عدد صحيح؛
يبدأ
ك:=0;
يحاول
ك:=9 شعبة ك؛
يستثني
showmessage("لا يمكن أن يكون المقسوم عليه صفرًا");
نهاية؛
نهاية؛
2. قم بحفظ البرنامج وتشغيله، وسيتم استبدال مربع المطالبة الذي يظهر بعد النقر فوق Button1 بالرسالة الصينية "لا يمكن أن يكون المقسوم عليه صفرًا". يستخدم
تعتبر عبارة "محاولة...إلا...نهاية" طريقة شائعة للتعامل مع الاستثناءات، حيث يتم تنفيذ العبارة التي تأتي بعد الكلمة المحجوزة "محاولة".
في حالة حدوث استثناء، سيتم تنفيذ العبارة بين الكلمات المحجوزة باستثناء ونهاية، وإلا سيتم تنفيذ العبارة بعد النهاية، وبالتالي استبدال عبارة دلفي
المعالجة الافتراضية للاستثناءات. عبارة أخرى مشابهة هي حاول...أخيرًا...نهاية، وهي نفس عبارة حاول...باستثناء..
....الفرق مع end هو أنه بغض النظر عما إذا كانت العبارة بعد المحاولة ستولد استثناءً، فسيتم تنفيذ العبارة بعد النهاية بالتأكيد.
ومع ذلك، بالنسبة للاستثناءات مثل تلك التي تم إنشاؤها بواسطة مربع TmaskEdit، فإن استخدام عبارة المحاولة غير فعال لأننا لا نستطيع العثور على
مكان لكتابة بيانات المحاولة. ولا يمكننا حلها إلا بطريقة أخرى.
3. كل مشروع في دلفي لديه كائن Tapplication، وهو كائن غير مرئي. نستطيع
من خلال تعديل حدث OnException، يمكنك التحكم في الاستثناءات الخاصة، والطرق المحددة هي كما يلي:
1. قم بتعريف عملية Myexception في فئة Form1. ترتبط هذه العملية بحدث OnException الخاص بـ Tapplication.
نفس المعلمات:
عام
{التصريحات العامة}
الإجراء MyException(Sender:TObject;E:Exception);
2. اكتب رمز العملية:
الإجراء TForm1.MyException(Sender:TObject;E:Exception);
يبدأ
إذا كان E هو EDBEditError، فقم بإظهار الرسالة ("الإدخال لا يتوافق مع القواعد")
آخر
Application.ShowException(E); {استدعاء معالجة الاستثناءات الافتراضية}
نهاية؛
3. قم بتعيين قيمة لحدث OnException الخاص بـ Tapplication في حدث OnCreate الخاص بـ Form1:
الإجراء TForm1.FormCreate(Sender: TObject);
يبدأ
Application.OnException :=MyException;
نهاية؛
4. احفظ البرنامج وقم بتشغيله، وأدخل رقمًا أو رقمين في مربع MaskEdit، ثم اضغط على Enter، وسيظهر مربع مطالبة صيني.
استبدل مربع المطالبة الإنجليزي الأصلي.
4. وهنا نود أن نذكر الجميع بضرورة الانتباه إلى ثلاث نقاط:
1.يلخص دلفي جميع الاستثناءات في فئة واحدة، أي فئة الاستثناء (الاستثناء).
حالة خاصة، في sysutils.pas في c:program files orlandDelphi 3source tlsys Directory
هناك تعريف لفئة الاستثناء.
2. يوفر كائن Tapplication عملية HandleException لمعالجة الأخطاء غير المعالجة التي يتم استحضارها في البرنامج.
أحداث الاستثناء، عندما نقوم بتعيين قيمة لحدث OnException الخاص بـ Tapplication، فإن HandleException سوف يستدعي الحدث الجديد
الإجراء لاستبدال عرض رسالة الخطأ الافتراضية. نحن أحرار في ترتيب المحتوى المعروض في عمليتنا الخاصة لتحقيق هان
تأثير التحول.
3. نستخدم بيان الحكم IF للحصول على الاستثناء المحدد. يمكننا استخدام طريقة بسيطة للحصول على اسم الاستثناء المحدد.
وبالعودة إلى المثال الموجود في بداية المقال، هنا نختار خيار Break on Exception، ونقوم بتشغيل البرنامج مرة أخرى، وندخل
تؤدي الأرقام غير الصحيحة إلى قيام MaskEdit1 بإنشاء استثناء، وستظهر النافذة التالية:
إن EDBEditError الموجود في الصف الثاني من النافذة هو اسم الاستثناء، والكود الموجود في البرنامج في هذه المقالة:
إذا كان E هو EDBEditError، فقم بإظهار الرسالة ("الإدخال لا يفي بالمتطلبات")
وقد كتب على هذا الاسم. هذا هو المكان الذي يمكنك فيه الحصول على المعلومات عندما لا تعرف الاسم الدقيق للاستثناء. باستخدام هذا
كن حذرًا عند التعامل مع أحداث الاستثناء لأنك قمت باستبدال معالجة الاستثناءات الافتراضية في دلفي.
قد يتسبب هذا في تعطل النظام.
يعمل البرنامج أعلاه بنجاح ضمن نظام التشغيل Windows 95 Delphi 3.0.