![]() |
|
الدرس العشرين - اضافة آلة حاسبة للبرنامج - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : الأقسام التعليمية - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=90) +--- قسم : قسم دورات المنتدى (http://vb4arb.com/vb/forumdisplay.php?fid=113) +---- قسم : دورة بناء برنامج لإدارة السوبر ماركت من الألف إلى الياء (http://vb4arb.com/vb/forumdisplay.php?fid=128) +---- الموضوع : الدرس العشرين - اضافة آلة حاسبة للبرنامج (/showthread.php?tid=5708) |
الدرس العشرين - اضافة آلة حاسبة للبرنامج - RaggiTech - 15-10-12 كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم
.
السلام عليكم ورحمة الله وبركاته
.
آلة حاسبة
.
سنتعلم سوية خلال هذا الدرس عمل آلة حاسبة بسيطة ، وسنحاول جاهدين تلافي كتابة أسطر كثيرة معتمدين في ذلك على خاصية Index للأزرار .
ولمن لا يعرف خاصية Index فهي الخاصية التي تتيح تسمية أكثر من أداة بنفس الاسم مع تغيير قيمة هذه الخاصية فقط ، أو بمعنى آخر إنها تقوم بعمل مصفوفة Array من الأدوات .
وتتيح هذه الخاصية أيضاً وضع كود مشترك لجميع هذه الأدوات .
من أجل ذلك سنبدأ في تصميم فورم صغير ، ونضبط خاصية MDIChild بحيث تصبح True ، وذلك لمكن استخدام هذا الفورم أثناء عمل البرنامج .
يحتوي هذا الفورم على ما يلي :
Command1وبـ Index من 0 إلى 10 تحتوي في خاصية Caption على الأرقام بالترتيب من 0 وحتى 9 اضافة إلى الفاصلة . Command2
ويحتوي في خاصية Caption على +/- وهي مختصة بتغيير الاشارة .
Command3
وبـ Index من 0 إلى 3 تحتوي على العمليات التالية : + ، - ، * ، / .
Command4
ويحتوي على = .
Command5
ويحتوي على Index من 0 وحتى 2 تحتوي على الرموز التالية CE لمسح العملية الحالية ، C لافراغ الخانات من جديد ، و Off لاغلاق الآلة .
Command6
ويحتوي على Index من 0 وحتى 2 ويحتوي على MS لتخزين رقم ، MR لاسترجاع التخزين ، MC لافراغ التخزين .
Text1
وهو خانة العمليات .
Text2
وهي الخانة التي توضح الاشارة الحالية ، حاول وضعه على المربع الأول بحيث يبدو أنه بداخله .
واضبط خاصيتي
Locked لهذين المربعين بحيث تصبح True لمنع التلاعب فيهما .
والآن أضف ثلاثة متغيرات ، متغير Memory من النوع double ليحل محل الذاكرة ، ومتغير First من نفس النوع والذي سيحتوي على الرقم الأول ، There وهو متغير من النوع Boolean وهو يبين لنا إذا ما كنا لتونا قد ضغطنا على أحد العمليات أو = بحيث تمسح الخانه مع أول ضغطة لرقم .
كود : [align=right]Dim First As Double الأمر الثاني هو التعامل مع الأرقام ، وكما ترى فكل ما نحتاج إليه في الأرقام والفاصلة هو أن نزيد مربع النص Text1 بمحتويات الزر المضغوط عليه .
إذن سنجل مربع النص = مربع النص اضافة إلى Caption للزر المضغوط عليه .
ولكن قبل ذلك نتأكد من أن There تحتوي على False ، وإلا فإننا نفرغ الخانة أولاً :
كود : [align=right]If There = True Then والآن إلى جزء العمليات الحسابية ، سنستدعي أولاً دالة نسميها Calc_Me ، ومن ثم نضبط There على True ، ونضع في First الرقم الحالية ، واضافة لذلك ، نضع العلامة الحالية في Text2 .
كود : [align=right]Call Calc_Me ولنر كيف سيكون شكل الاجراء Calc_Me ، والذي سنختبر قيمة Text2 وعلى أساسها سوف نقوم بعمل العملية الحسابية بين First و Text1 ونضعها في Text1 :
كود : [align=right]Select Case Text2.Text لكن ولأنه قد تحدث أخطاء ناتجة عن قسمة على الصفر مثلاً ، أو OverFlow ، ولكي لا يتوقف البرنامج فإننا نضع العبارة التالية في بداية الاجراء :
كود : [align=right]On Error Resume Next [/align]وفي آخر الكود نضع ماذا يحدث لو تم اكتشاف خطأ ، حيث نظهر رسالة بهذا الخطأ ، وتخزن كل معلومات الخطأ في الكائن Err :
كود : [align=right]If Err Then كود : [align=right]خطأ[FONT=Times New Roman] " & Errلنعد مرة أخرى إلى أمر = ، ولو لاحظنا أننا سنستدعي الاجراء Calc_Me ، ومن ثم نفرغ خانة العملية Text2 ونضع There=True .
كود : [align=right]Call Calc_Me والآن أوامر Command5 والتي تحتوي على C و CE و Off .
كود : [align=right]Select Case Index وأخيراً أوامر MS و MR و MC :
كود : [align=right]Select Case Index ويمكنك جلياً أن تلاحظ كم من الأكواد وفرت علينا بفضل الله خاصية Index واستدعاء الاجراء Calc_Me بدلاً من كتابته مع كل حدث .
والآن ، نرى كود اظهار هذا الفورم ، وسنظهره في الطرف الأعلى والأيسر للفورم .
كود : [align=right]Case 7 يتبع
...
الدرس العشرين - اضافة آلة حاسبة للبرنامج - RaggiTech - 15-10-12 استقبال أرقام من لوحة المفاتيح .
سنضبط أولاً خاصية KeyPreview للفورم بحيث تصبح True وبهذا أي ضغطة على الكيبورد في هذا الفورم يحس بها حدث Key_Press لهذا الفورم . والآن نعرف أن حدث Key_Press يستقبل متغيراً هو كود آسكي Ascii للزر المضغوط ، ومن خلال ذلك نستطيع أن نضغط على الزر المقابل لها . فمثلاً الرقم 48 يعني الصفر ، من أجل ذك سنضغط على Command1(0) بالشكل التالي : كود : [align=right]Command1(0).Value = True[/align]وكذلك مع باقي الأرقام والتي تأخذ أرقاماً من 48 وحتى 57 ، أي الرقم + 48 .
ومن العلاقة السابقة نستطيع أن نكتب الكود التالي في حدث Key_Press : كود : [align=right]If KeyAscii < 58 And KeyAscii >= 48 Thenوالآن نكمل بمزيد من التخصيص ، فـ 46 تعني الفاصلة ، 42و43و45و47 العمليات الأربع ، 27 زر Esc والذي سنجعله يرمز لـ C في الآلة ، أيضاً 13 يرمز لـ Enter والذي سيكون = .
من أجل ذلك نكتب الكود التالي : كود : [align=right]ElseIf KeyAscii = 46 Thenوأخيراً 8 ترمز لـ BackSpace . وسنستخدم لذلك دالة Left والتي ستقتص نصاً من اليسار بطول النص - 1 ، وذلك بالشكل التالي :
كود : [align=right]ElseIf KeyAscii = 8 Thenبهذا تكون آلتنا جاهزة لاستقبال الأرقام من لوحة المفاتيح .
والملف مرفق الآن بعد التعديلات الأخيرة ... والله الموفق ... والسلام عليكم ورحمة الله وبركاته . |