أرجو المساعدة
في لافيجوال بيسيك توجد التعليمة on error do
لتجاوز توقف البرنامج في حال حصول خطأ
فهل لها مثيل في الدلفي
أرجو المساعدة
في لافيجوال بيسيك توجد التعليمة on error do
لتجاوز توقف البرنامج في حال حصول خطأ
فهل لها مثيل في الدلفي
MAAAAAAAAAAAAAAAAAAAAAAAC
try //your code here except end;
إذا لم تضع شيء بين except و end سيتم تجاهل الأخطاء بالملف التنفيذي النهائي
, أو بإمكانك وضع رسالة من عندك بينهما (بالعربية مثلا)
يملك ديلفي تعليمات وإجرائيات قوية وفاعلة في التقاط كل إستثناء غير وارد في عمل التطبيق.
فديلفي يسهل عملية إدارة الأخطاء الغير مرتقبة بفضل مجموعة من الصيغ يوضفها المبرمج وفق ما يريده.
هذه الصيغ هي ثلاث:
الصيغة الأولى : Try.. finally ..end;
try instruction1 finally instruction2 end;
في هذه الصيغة فأن instruction1 هي مجموعة من تعليمات الكود محمية وهي تلي Try, وعند حدوث أي استثناء OnException فإن الكود instruction2 الذي يأتي بعد Finally وفبل End; سينفذ حتما سواءا حدث الإستثناء أم لم يحدث.
تفيد هذه الصيغة عند تعريف بعض المكونات ديناميكيا, فيخشى عند حدوث استثناء أن لا تحطم هذه المكونات ولا يتم تحرير الذاكرة المحجوزة لها.
ففي تعليمات كود finally سنقوم بتحرير الذاكرة التي حجزت لبعض المكونات كيفما كان الحال.
مثال :
function TForm2.OpenImage(ImgFile: TFileName): boolean; var img: TImage; begin try img := TImage.Create(Form2); img.Parent:= Form2; img.Picture.LoadFromFile(ImgFile); finally img.Free; end;
الصيغة الثانية: Try...Except...end;
try instruction1 except instruction2 end;
سنعطي مثالا عن فائدة اتخدام هذه الصيغة من تسيير الإستثناءات:
لنعتبر أن المستخدم يجب أن يدخل في مربع للتحرير Edit1 عدد, سيقوم الكود بعدها بتحويله من سلسلة محرفية إلى عدد من صنف float.
فما يضمن لنا أن المستخدم سيلتزم بإدخال أعدادا وليس حروفا, أو أنه أدخل عددا لكنه ليس مكتوبا بشكل صحيح كأن يحتوي العدد على نقطتين للتعبير العشري عوضا عن واحدة..إلخ.
حاول أن تقوم بإدخال قيمة غير صحيحة لا تعبر عن قيمة عددية, حينها ستستقبل رسالة إخبارية تعلمك عن طبيعة الإستثناء الذي حدث.
عند حدوث استثناء تقوم ديلفي بترصده و تسسيره وتعطي لك إمكانية إصلاح الخطاْ إن أمكن دون توقف للبرنامج, هذا بالإعتماد على هذه الصيغة.
المثال:
procedure TForm2.Button1Click(Sender: TObject); var strErr: string; begin try Nmbr:= StrToFloat(Edit1.Text); //StrToFloatconverts the given string to an reel value. If the string //doesn't contain a valid value, an EConvertError exception is raised. } // .... instruction to do Nmbr:= Pi / Nmbr; // number must be no zero else a exception //is rased: EZeroDivide except on EConvertError do begin Edit1.Text:='0'; strErr:= 'the ' + EConvertError.ClassName + ' has occured'+ #10 + 'Enter a valid Number Please'+ #10 + 'The Decimal Separator is: "' + DecimalSeparator+ '".'; MessageBox(0,PChar(StrErr), 'EConvertError Exception',MB_OK + MB_ICONERROR); end; on EZeroDivide do // DIVIDE_BY_ZERO begin Nmbr:= Pi; Edit1.Text:='1'; strErr:= 'the ' + EZeroDivide.ClassName + ' has occured'+ #10 + 'The default value "1" is entred'; MessageBox(0,PAnsiChar(StrErr), 'EZeroDivide Exception',MB_OK + MB_ICONEXCLAMATION); end; end; end;
الصيغة الثالثة : rase ExceptionObject at @fuction
وهي خلق أستثناء لكي يقوم النظام باستقباله وتحويله لدالة التطبيق التي ستحلله
مثال:
if Nmbr <0 then
raise EMathError.Create('Enter a positive value !!!') at @TForm2.Button1Click;بالتوفيق في برمجة ديلفي :D
تم تعديل هذه المشاركة بواسطة ikossan في 6 مايو 2005 في 18:56
سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين
يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.
اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.
الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.
إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.
و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله
أخوكم مراد
لقد سبقتني يا أخي :lol:
سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين
يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.
اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.
الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.
إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.
و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله
أخوكم مراد
هذا الموضوع مغلق.