بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته
اليوم نتطرق سويا بإذن الله العظيم الى تغيير مبدأ بسيط من مبادىء الحوار مع المستخدم فقد تعود الكثير من المبرمجين ( و يؤسفني كثيرا ان اكون واحدا من هذا الصنف من المبرمجين ) على عدم إحترام اصول الحوار مع المستخدم فلو جربت ان تطرح علي سؤالاً مثل ( إذا اردت يا رغيد ان تخبر المستخدم بأن عنوان البريد الذي ادخله في مربع الحوار هي قيمة خاطئة ، فيكف ستخبره بذلك ؟ ) فستجدني اجيبك بتلقائية سوف اظهر له مربع حوار يخبره بذلك ! :
MsgBox("تأكد من عنوان البريد الذي ادخلته !")نعم اظنك ترى انني لم ارتكب جرما او خطأ في إجابتي و هي تفي بالغرض إن شاء الله تعالى و لكن تخيل وجود الكثير من مربعات النص للإدخال ( الاسم، العمر، العنوان، و البريد، و المؤهلات و و و .... إلخ ) و هناك مربع حوار يظهر الخطأ في كل حقل فإذا ارتكب المستخدم بضعة اخطاء إملائية ربما لسرعة الإدخال او الإرهاق و بغض النظر عن السبب فإنه سيواجه الكثير من مربعات الحوار المزعجة و التي لن يمكنه تصحيح خطئه و العودة إلى برنامجه إلا بعد التعامل معها وهو شيء محبط و ممل كثيرا ( على الاقل بالنسبة لي خاصة و اني كثير الاخطاء للأسف ).
يكمن الحل في إتخاد اساليب اخرى للحوار مع المستخدم و يدعم الـ Visual Basic .NET اساليب اجمل لتلبية مثل هذه الأمور مثلا إستخدام الـ ErrorProvider ... فمثلا إذا كان لديك مربع نص بإسم txtEmail و لديك دالة خاصة بإسم ValidEmail تقوم بتمرير عنوان البريد لها فتعيد القيمة True اذا كان سليما و False في حال وجود خطأ فيه ... فبإستخدام الـ ErrorProvidor يمكنك عمل شيء مثل :
Private Sub txtEmail_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) If ValidEmail(txtEmail.Text) = False Then ErrorProvider1.SetError(txtEmail, "يوجد خطأ في عنوان البريد") Else ErrorProvider1.SetError(txtEmail, "") End If End Sub
في الشفرة السابقة جعلت الفحص يتم في الحدث TextChanged و هذا يعني ان المستخدم و اثناء كتابته سيتم إعلامه بكون البريد الذي يكتبه هو بريد خاطىء وهي وسلية افضل من جعل المستخدم يكمل كتابة جميع البيانات ليكتشف في الاخير انه اركتب الكثير من الاخطاء من خلال عرضها له بمربعات حوار MsgBox.
للفائدة :
اذا لم يكن لديك فكرة عن ErrorProvider او كنت تستخدم لغة لا يوجد بها شيء مماثل له مثل الـ VisualBasic 6.0 فيمكنك إعلام المستخدم بوجود خطأ في البيانات التي يقوم بإدخالها بطرق متعددة مثل تغيير لون الحقل ( مربع النص ) الذي يستخدمه مثلا :
Private Sub txtEmail_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) If ValidEmail(txtEmail.Text) = False Then txtMail.BackColor = Color.Green Else txtMail.BackColor = Color.White End If End Sub
و بهذا فبمجرد كون البريد الذي يكتبه غير سليم فإن لون مرع النص سيدل على ذلك إلى ان يكتب عنوان بريد سليم.
الجديد في الموضوع
و الآن ننتقل الى موضوعنا الاصلي في هذا المقال وهو استغلال نظام التشغيل Windows XP لتزويد المستخدم برسائل إعلام ( او تنبيه ) ظريفة ... فتخيل معي انك تقوم بتصميم برنامج يقوم بعملية طويلة من المعالجة و يستدعي البقاء في الخلفية مثلا برنامج يراقب مساحة القرص الصلب او برنامج يقوم بتنظيف الريجستري او برنامج يستجلب بيانات من عنوان بريدك او تخيل انك تريد تصميم برنامج لمراقبة عملية اضافة اي ملفات تنفيذية الى مجلد النظام و تريد ان يقوم برنامجك بإعلامك بأي تغييرات تحدث للنظام.
و ايا كان السبب او البرنامج الذي تقوم بتصميمة فقد تستدعي الحاجة الى وجود رسائل تنبيه عند انتهاء او حدوث عملية معينة في برنامجك ... و عندها سوف تستخدم بشكل افتراضي مربعات الحوار MsgBox وسيفي بالغرض بإذن الله تعالى و لكن من الاجمل ان نستغل نظام التشغيل و نعرض شيئا مثل الصورة التالية :
و كما هو ظاهر في الصورة فيمكنك ان تقوم بعرض الرسائل التي تريدها على شكل بالون Balloon بقرب ساعة النظام في شريط المهام وهي ذاتها الطريقة التي يستخدمها نظام الوينذوز اكس بي لعرض رسائله التنبيهية مثل ( رسالة إنخفاظ ذاكرة الرام ) او ( رسالة تنبيه بنقص المساحة التخزينية في احد اقسام القرص الصلب ) او ( رسالة التنبيه بوجود ايقونات غير مستخدمه على سطح المكتب ) و الكثير غيرها من الرسائل و جمعيها رسائل من النظام يقوم بعرضها على شكل Balloons.
و من الجميل ان نستغل هذه الميزة خاصة و كونها اقل إزعاجا للمستخدم و تختفي تلقائيا في حالة عدم إستجابة المستخدم لها بعد مرور فترة معينة.
و لكي تتمكن من إستخدام هذه الرسائل فقد قمت بتصميم فئة Class خاصة لهذا الغرض بإسم RgheedBalloon يمكنك تضمينها في مشاريعك بسهولة بإذن الله تعالى ... و فيما يلي تجد شرحا مقتضبا لهذه الفئة بإذن الله تعالى ....
كيف تستخدم الفئة RgheedBalloon
لعرض رسائل مثل :
ينبغي اولا ان تعرف ان هذه الفئة تحتوي على اربعة احداث يمكنك استخدامها و هي :
BalloonShown و ينبثق هذا الحدث عندما يظهر البالون للمستخدم BalloonHidden و ينبثق هذا الحدث عندما يختفي البالون مثلا عند ضغط المستخدم على زر إغلاق البالون BalloonClicked اما هذا الحدث فعندما يقوم المستخدم بالنقر على اي جزء من البالون غير زر الإغلاق NoResponse وهو الحدث الذي ينبثق عندما يمر الوقت دون ان يستجيب المستخدم للبالون سواءا بالنقر او الاغلاق
و بالاضافة الى تلك الاحداث فيوجد بعض الخصائص التي تمكنك من التحكم بالبالون وهي :
BalloonTitle عنوان البالون BalloonText النص الذي سيظهر للمستخدم (رسالة التنبيه) او الاستفسار BalloonType نوع الايقونة التي ستظهر في الرسالة NotifyIcon عبارة عن الـ NotifyControl الذي سترتبط به الرسالة
و الان لكي تقوم بتضمين الفئة في برنامج قم بإضافتها الى مشروعك ستجد ملف dll بإسم RgheedBalloons.dll المجلد المرفق ... افتح مشروع جديد ثم من القائمة Project اختر Add Reference ثم اختر الملف RgheedBalloons بعد الضغط على الزر Browse
و بهذا تكون قد اضفت الفئة الى مشروعك و لكي تستخدمها قم اولا بإضافة اداة NotifyIcon و التي يمكنك عن طريقها ان تقوم بجعل برنامجك يظهر بجوار ساعة النظام و اختر الايقونة التي تناسبها و لنفترض بأن اسم الادة هو NotifyIcon1 كما هو افتراضي.
و الان الى الكود .... في القسم العام للفورم قم بتعرييف متغيير من النوع RgheedBalloon مع تضمين الاحداث بواسطة WithEvents بالشكل التالي :
Dim WithEevents Balloon As RgheedBalloon
وبهذا يكون معك متغير بإسم Balloon يمثل الفئة RgheedBalloon و لكي نقوم بربطه مع الـ NotifyIcon1 لكي يظهر عنده نقوم بكتابه الكود التالي في الحدث Load للفورم :
Private Sub Form1_Load(...) Handles MyBase.Load Balloon = New RgheedBalloon(NotifyIcon1) End Sub
يمكن الان بكل سهولة ان تقوم بعرض اي رسالة تريدها عن طريق الامر ShowBalloon و لنفرض انني اريد ان اعرض رسالة تعريفية بي كرجل يمني مسلم .. فما سأكتبه سيكون كالتالي :
Balloon.ShowBalloon("مسلم يمني الجنسية","رغيد الطيب")و اذا قام المستخدم بالنقر على البالون فإن الحدث BalloonClicked سوف ينفذ و لعرض رسالة يمكن كتابة شيء مثل :
Private Sub Balloon_BalloonClicked() Handles Balloon.BalloonClicked
MsgBox("لقد تم النقر على البالون")
End Subفي المثال المرفق ستجد مثالا كاملا عن إستخدام الفئة المذكورة في برامجنا بإذن الله تعالى.
اخيرا نقول السلام عليكم و رحمة الله و بركاته

