استعمال ادوات الاختبار Cheack and Radio Boxes

فى هذا الفصل نشرح أدوات الاختبار (Check, Radio Boxes) والفرق بينهما ومتى نستخدم كلا منها ، ونرى كذلك خصائص كلا منهما وذلك خلال أمثلة الفصل.

أداة الاختبار الاولى Check Boxes

تستخدم هذه الاداة لاختبار حالة ما هل هى صحيحة أم لا مثل اختبار حالة شخص هل هو متزوج أم لا وبالتالى يمكن إستعمال مجموعة أدوات Check لتحديد مواصفات شخص بحيث تأخذ كل أداة صفة مثل متزوج أم لا, يملك سيارة أم لا،يملك تليفون أم لا ، يملك سيارة أم لا وهكذا.

ومن هذه يمكن تحقق أكثر من صفة فى نفس الوقت وهذا ماتسمح به أداة الاختبار check box

أداة الاختبار الثانية Radio Box

تستخدم هذه الاداة لتحديد إختيار من مجموعة اختيارات بحيث لايمكن للاختيارات جميعها ان تتحقق ولايمكن لاكثر من اختيار أن يتحقق فى نفس الوقت ومثال لذلك اختبار تقدير طالب فنسخدم أداة لكل تقدير (مقبول ، جيد ، جيدجدا ، امتياز)فلايمكن أن يأخذ الطالب أكثر من تقدير فى نفس الوقت وهذا ما تحققه أداة الاختبار Radio Box .

ولتوضيح كيفية إستعمال وخصائص كلا منهما نبدأ بتصميم مثال باستخدام الاداة Check Box.

مثال لإستعمال Check Box

افتح ملف البرنامج vcex4 من الفهرس chpt4 ونفذه تحصل على الشكل (4-1).

clip_image001

شكل 4-1 نتيجة تنفيذ البرنامج

والشكل (4-1) يوضح بعض العمليات المتاحة مع أداة الاختبار Check Box مثل إختبار حالتها هل هى صحيحة أم لا ، كيفية إخفاء الأداة وكيفية إظهارها ! وكيفية جعل الأداة قابلة للإستعمال Enabled أو غير قابلة للإستعمال Disable.

(جرب استعمال البرنامج ثم تابع معنا خطوات تصميم البرنامج )

خطوات تصميم البرنامج

1. من القائمة الرئيسية اختار File ومنها New ثم project warkspace ثم OK.

2. اكتب إسم للبرنامج وليكن vcex4 .

3. تحصل على شاشة تحديد نوع التطبيق إختار كما سبق Dialog Based System ثم Next.

وهكذا تابع شاشات مواصفات البرنامج بالضغط على NEXT حتى تصل الى Finsh كما سبق وبهذا تحصل علىبرنامج ابتدائى مبنى على صندوق حوار ،قم بتعديله حتى يوافق الشكل المطلوب تصميمه وذلك كما يلى.

4. من صندوق ملفات البرنامج انقر زر موارد البرنامج تحصل على شجرة مواردالبرنامج وهى عبارة عن صندوق الحوار الذى تصممه والرسومات الموجودة فى البرنامج وغير ذلك من الادوات التى اضافها VC++.

6. انقر بالفأرة مرتين على Dialog ثم انقر مرتين على IDD-VCEX4 -Dialog تحصل على شكل صندوق الحوار الذى صممه لنا VC++

احذف جميع الادوات الموجودة عليه وذلك بالضغط على الاداة مرة واحدة بالفأرة ثم بالضغط على مفتاح Del وهكذا حتى نحصل على صندوق الحوار وليس به أدوات كما سبق.

7. ابدأ فى تصميم الشكل المطلوب وذلك بإستعمال صندوق الادوات الموجود على يمين صندوق الحوار ، كما يلى :

- وقع خمسة ازرار اوامر من صندوق الادوات الى صندوق الحوار.

- وقع اداة اختبار CHECK الى صندوق الحوار.

- وقع اداة كتابة EDIT الى صندوق الحوار.

- رتب جميع الادوات لتعطى الشكل (4-2).

clip_image002

8. غير عناوين الادوات لتعطى الشكل المطلوب وهو شكل (4-3)

clip_image003

وذلك بالضغط على الاداة مرة واحدة بالفأرة ثم كتابة العنوان فيكتب مباشرة فى خاصية Caption ثم احفظ التغيرات كما سبق.

إعطاء متغيرات للأدوات

فى هذا البرنامج مطلوب اعطاء متغير لاداة الاختبار check1 وأداة الكتابة edit 1 حتى يمكن التعامل معهما ويتم ذلك كما يلى :

-اضغط بأصبعك على المفتاح Ctrl وفى نقس الوقت انقر بالفأرة مرتين على أداة الاختبار Check1 تحصل على صندوق تعريف متغير ،اكتب اسم للمتغير وليكن mch1 واترك نوع المتغير Bool كما فى شكل (4-4).

clip_image004

- كرر الخطوة السابقة مع أداة الكتابة Edit1 بحيث تأخذ متغير بالاسم me1 من النوع Cstring

كتابة سطور الدوال

1. ابدأ فى كتابة سطور الدوال التى تحقق أدوات البرنامج وهى عند الضغط بالفأرة على أداة لاختبار يكتب البرنامج فى اداة الكتابة حالة الأداة هل هى Checked أم لا.

- عند الضغط على زر الاوامر hide يتم إخفاء أداة الاختيار.

- عند الضغط على زر الاوامر Show يتم إظهار أداة الاختبار.

- عند الضغط على زر الاوامر Disable تصبح حالة الاداة Disable أى لايمكن استعمالها وعند الضغط على زر الاوامر Enable يمكن استعمال اداة الإختيار.

11. ابدأ فى كتابة سطور دالة أداة الاختيار كما يلى اضغط على المفتاحين CTRL + W للوصول إلى شاشة Class Wizard تحصل على شاشة بجميع الادوات الموجودة فى البرنامج كما فى شكل (4-5)

clip_image006 شكل 4-5 شاشة classwizard وبها جميع أدوات البرامج

12. اضغط على Message Maps ثم انقر على IDC-Check1 ثم BN-Clicked ثم Add Function ثم OK فيتم إنشاء دالة بالاسم On-Check 1 يتم تنفيذها عند الضغط على الأداة.

12. انقر على Edit Code وابدأ فى كتابة سطور الدالة كما يلى :

1:UpdateData (TRUE);

2:if (mch1 = = TRUE)

3:me1 =“ MY Checkl IS CHECKED ;

4:else

5:me1 =“MY check1 IS NOT CHECKED” ;

6: UpdateData (FALSE );

شرح سطور الدالة

فى هذه الدالة فى السطر رقم 1 استعملنا الدالة UpdateData () كما سبق لنقل حالة أداة الاختبار إلى المتغير mch1 .

فى السطر رقم 2 استعملنا جملة If لاختبار قيمة المتغير mch1 فإذا كانت TRUE ومعناها أن الاداة صحيحة يتم تسجيل رسالة بذلك فى المتغير me1 والا تم تسجيل رسالة بعكس ذلك فى المتغير me1.

وفى النهاية الدالة UpdateData () لإخراج النتيجة فى أداة الكتابة يمكن لك أن تجرب البرنامج عند هذه المرحلة وذلك بتحويله الى نسخة تنفيذية ثم تنفيذه ومشاهدة نتيجة الضغط على أداة الاختبار.

- اكتب دوال أزرار الاوامر الباقية بنفس الطريقة وهى :

اضغط على مفتاحى Ctrl + W للوصول إلى Classwizard ثم التأكد من الضغط على Message Maps ثم بالضغط على إسم الأداة المطلوب كتابة دالة لها وليكن IDC-Button 1 ثم بالضغط على BN-Clicked ثم Add function ثم OK وبالضغط على Edit Code وابدأ كتابة سطور الدالة

طبق ذلك على جميع أزرارالاوامر واكتب الدوال التالية :

1. دالة زر الامر Hide

GetDlgItem ( IDC-Checkl) -> ShowWindows(SW-HIDE);

شرح سطور الدالة

فى هذا السطر استعملنا دالتين هما GetDlgItem ( ) وتقوم بالاشارة إلى عنصر داخل صندوق الحوار وهو المتغير IDC-Check1 الذى يشير إلى أداة الاختبار المطلوب التعامل معها والدالة الثانية هى ShowWindow () التى تقوم بإظهار وإخفاء العنصر المشار اليه وذلك تبعا لمعامل الدالة فى هذه الحالة المعامل SW-HIDE معناه اخفاء العنصر فيتم اخفاء اداة الاختبار عند النقر على هذا الزر.

2. دالة زر الامر Show

GetDlgItem (IDC-CHECK1) -> ShowWindow(SW-SHOW) ;

س
شرح سطور الدالة

فى هذا السطر استعملنا نفس الدالتين المستعملتين مع زر الاوامر السابق ولكن الفرق الوحيد هو تغيير معامل الدالة ShowWindow ( ) من المعامل SW-HIDE الذى كان يقوم بإخفاء أداة الاختبار إلى المعامل SW-SHOW الذى يؤدى إلى إظهار الاداة.

3. دالة زر الامر Enable

اكتب سطور الدالة التالية :

GetDlgItem (IDC-CHECK1) -> EnableWindow (TRUE);

فى هذا السطر نجد نفس دوال السطور السابقة ولكن تم تغيير معامل الدالة EnableWindow() الى TRUE حتى يمكن التعامل مع العنصر المشار اليه وهو IDC-Check 1 أى أدة الاختيار .

بعد الانتهاء من كتابة سطور الدوال وحفظ كل حالة قم بتنفيذ البرنامج بعد عمل نسخة تنفيذية منه ثم جرب إستعمال البرنامج نجد الضغط على زر الاوامر Hide يتم اخفاء أداة الاختيار والضغط على زر الاوامر Show يظهر مرة آخرى وهكذا وبالتالى فى هذا المثال رأينا بعض العمليات المتاحة مع أداة الاختبار مثل كيفية اختبار حالة أداة الاختبار ، كيفية اخفائها واظهارها كيفية جعلها فعالة (Active) أو غير فعالةكما فى نتيجة التنفيذ الموجودة فى الشكل 4-6.

وقبل الانتقال للفقرة التالية لايفوتنا أن نوضح نقطة وهى أننا استعملنا بعض الدوال مثل GetDlg Item ( ) وغيرها فأين نجد هذه الدوال وكيف لنا أن نتعرف على هذه الدوال يتم ذلك كما يلى :

من القائمة الرئيسية من الاختيار Help ثم Foundation Classes يظهر لنا صندوق حوار للبحث نكتب اسم الدالة المطلوب البحث عنها وهى GetDlgItem وبالضغط عليها نحصل على معلومات كاملة عن هذه الدالة، لاحظ نسبة الدالة Get Dlg Item الى الفصيلة CWnd فى حين أننا استعملنا الدالة مع فصيلة من نوع Dialog لمعرفة ذلك نبحث عن أصل الفصيلة CDialog وذلك بالبحث عن الفصيلة CDialog نجد أنها مشتقة من Cwnd وبالتالى جميع دوال الفصيلة CWnd تعمل مع الفصيلة CDialog وهذا ما تم الاشارة اليه فى فصول الكتاب عند شرح مفاهيم البرمجة بواسطة الاهداف حيث يحتوى لغة VC++ على مكتبة فصائل MFC كل فصيلة تحتوى على أعضاء من الدوال والبيانات يتم التعامل معها واستعمال الدوال وهذه المكتبة عبارة عن شجرة فصائل مشتقة من بعضها.

4. دالة زر الامر Disable

GetDlg Item (IDC-CHECKI) -> EnableWindow (FALSE);

فى هذا السطر استعملنا دالتين - الدالة الاولى GetDlgItem ( ) لتشير الى عنصر داخل صندوق الحوار المطلوب التعامل معه وهو Check1 كما سبق والدالة الثانية هى EnableWindow ( ) التى تجعل العنصر فعال بحيث يمكن التعامل معه أو غير فعال فلا يمكن التعامل معه وذلك اعتماداً على معامل الدالة فإذا كان المعامل FALSE كما هو الحال أصبح العنصر (Check 1) غير فعال فيظهر بلون خافت ولايمكن التعامل معه واذا كان المعامل TRUE كما فى الدالة التالية أصبح العنصر فعال وبالتالى يمكن التعامل معه.

ثانياً : أداة الاختبار Radio Buttons

كما أشرنا فى أول الفصل أننا نستعمل هذه الأدة عندما نريد تحديد اختيار واحد من مجموعة اختيارات مثل تقدير طالب أولون اشارة المرور أو سرعة السيارة ونوضح ذلك من خلال المثال التالى :

مثال لإستعمال أداة الاختيار Radio Button

افتح ملف البرنامج VCEX6 من الفهرس CHPT4 ونفذه تحصل على نتيجة التنفيذ الموجودة فى الشكل4-7

clip_image007

فى هذا الشكل نرى وجود أداتين للاختبار لتحديد لون إشارة المرور هل هى RED أم Green و ثلاث أدوات آخرى تحدد سرعة السيارة ونلاحظ أنه فى مجموعة الالوان يمكن لنا ان نختار لون واحد فلا يمكن أن يتحقق الاختياران فى نفس الوقت وكذلك فى مجموعة السرعات نحدد سرعة واحدة وفى النهاية بالضغط على زر الامر Report نحصل علىالنتيجة وهى الحالة المختارة

 

تصميم البرنامج

لتصميم البرنامج اتبع الخطوات التالية :

1. من القائمة الرئيسية اختار File ثم NEW ثم PROJECT WORKSPACE لإنشاء تطبيق جديد واكتب له اسم وليكن VCEX6ثم CREAT

2. نحصل على صندوق حوار تحديد نوع التطبيق اختار Dialog based كما سبق واستمر حتى تصل إلى Finish حتى يتم تخليق التطبيق أو اختارFINISH عند هذه المرحلة فتحصل على صندوق حوار مواصفات البرنامج اختار OK.

ملحوظة

فى الفصول التالية سوف نرى الانواع المختلفة للتطبيق وكيفية استعمالها والتعامل معها.

3. من صندوق ملفات البرنامج اختار زر ملفات الموارد ثم انقر مرتين على VCEX6 RESOURCES ثم اختار Dialog ثم انقر مرتين على IDC-VCEX6 -Dialog فتحصل على الشكل المبدئى لصندوق الحوار احذف جميع الادوات من على صندوق الحوار كما سبق حتى تحصل على صندوق الحوار فارغ من الادوات وجاهز للإستعمال.

4. ابدأ فى تصميم الشكل المطلوب كما يلى :

-اختار أداة الاطار (Frame) (راجع الفصل الثانى شكل 2-19 ) وضعها على صندوق الحوار واكتب عنوان لاداة الاطار وليكن Color كما فى الشكل 4-8

تذكر

نستعمل أداة الاطار لاحتواء مجموعة أدوات بحيث تعمل هذه الادوات كوحدة منفصلة وهذا ما يحدث فى المثال التالى.

clip_image008

5. اختار أداة الاختبارRADIO) )من تحت زر الاوامر من صندوق الادوات وضعها داخل اطار الالوان واعطيها العنوان Red بالمثل اختار أداة آخرى واعطيها العنوان Green كما فى الشكل 4-9.

clip_image009

6. بنفس الاسلوب السابق نضع إطار آخر ونعطيه العنوان Speed ونضع عليه ثلاث أدوات اختبار وإعطيها العناوين كما بالشكل 4-10.

clip_image010

7. اختار زر أداة أوامر وضعها على صندوق الحوار وغير العنوان إلى Report وكذلك أداة خانة كتابة كما فى الشكل 4-11

clip_image011

8. بهذا نكون صممنا الشكل المطلوب. (بعد الانتهاء من التصميم وحفظ التصميم يمكن لك اختبار شكل البرنامج واختبار الأدوات كما يلى :

من القائمة الرئيسية اختار Resources ثم Test تحصل على شكل البرنامج جرب اختباره باختبار أداة اختبار).

نجد خطأ ما وهو أنك لا تستطيع تحديد اختيار من مجموعة Color واختيار من مجموعة Speed ، انما هو اختيار واحد على مستوى صندوق الحوار ولإخبار البرنامج أن مجموعة Color مجموعة منفصلة ومجموعة Speed مجموعة منفصلة تقوم بما يلى :

انقر مرتين على أداة الاختبار RED تحصل على صندوق الخصائص بها كما فى الشكل4-12

clip_image012

وأحد هذه الخصائص خاصية Group انقر بالفأرة داخل هذه الخاصية لتجعلها فعالة ، فيقوم البرنامج بضم الادوات الموجودة فى نفس الإطار الى هذه الاداة كمجموعة.

بالمثل انقر أداة الاختبار 20 MPH مرتين تحصل على صندوق الخصائص انقر خاصية Group فيتم إضافة باقى الادوات فى الاطار الى هذه الاداة كمجموعة.

ملحوظة 1

يتم تغير خاصية Group بالنسبة لأول أداة فى المجموعة فقط ووجود الاطار يعنى باقى الأدوات تعامل كمجموعة.

ملحوظة 2

عند إستعمال أدوات الاختيار Radio مع صندوق الحوار يراعى الترتيب عند وضع الادوات على صندوق الحوار لأن البرنامج يعتبر بهذا الترتيب ويعطيها أسماء متتالية.

يمكن لك الأن اختبار نتيجة العمل ، من القائمة الرئيسية منLAYOUT اختار Test وجرب استعمال الادوات تجد امكانية اختيار أداة من إطار Color وأداة من إطار Speed

احفظ هذه التغيرات وتعال معنا لاعطاء متغيرات لادوات الإختبار كما يلى :

اضغط CTR + W للوصول الى Classwizard ثم Member Variables سجل متغيرات للادوات كما فى الجدول التالى (أو سجل المتغيرات بالطريقة المعتادة وهى استعمال المفتاح CTRL والنقر مرتين على الأداة).

Type

Catagory

Varable Name

Control ID

control

Control

mr

IDC-RADIO1

int

Value

ms

IDC-RADIO3

Control edit

me

IDC-Edit 1

 

من الجدول السابق تلاحظ

المتغير IDC-Radio1 أخذ Category من نوع Control وذلك لأنه سوف يستعمل كأنه Button وهذا معناه أنه Object من فصيلة Cbutton.

بينما المتغير IDC-Radio 3 من نوع قيمة int

والسؤال لماذا اعطينا الاداة الاولى من المجموعة الاولى النوع CButton بينما اعطينا الاداة الاولى فى المجموعة الثانية النوع int ؟وذلك لنرى امكانية التعامل مع الاداة باكثر من شكل وهذا ما سوف نراه فى الفقرة التالية :

المتغير IDC-Edit1 أخذ النوع CEdit لأنه هدف من فصيلة CEdit وبالتالى يمكن تنفيذ جميع دوال الفصيلة Cedit عليه

فى حالة عمل مجموعات من أدوات الاختيار Radio نعطى متغير للاداة الاولى فقط من المجموعة كما حدث فى هذا المثال حيث أعطينا الاداة الاولى من المجموعة الاولى وهى IDC-Radio1 والأداة الأولى من المجموعة الثانية IDC-Radio3.

كتابة سطور الدوال

9. والآن نريد كتابة سطور الدالة التى تنفذ عندما يضغط المستخدم على زر الاوامر Report لكى يعرض لنا حالة أدوات الاختبار فى خانة نص الكتابة كما حددها المستخدم

إضغط CTRL + W للوصول إلى Classwizard إضغط Message Maps ثم إضغط IDC-Button1 ثم BN-Clicked ثم Add Function

ثم إضغط على OK للموافقة على إسم الدالة وهو On Button1 ( )

إضغط Edit Code لكتابة سطور الدالة ثم أكتب السطور التالية :

1: UpdataData (TRUE);

2: Char state [50];

3: int CHK;

4: CHK=GetCheckRadioButton(IDC_RADIO1,IDC_RADIO2);

5: if (CHK==0)

6: strcpy(state,”NON ...COLOR..”);

7: if (CHK = = IDC_RADIO1)

8: strcpy (State, “Color : Red”)

9: if (CHK = = IDC_RADIO2)

10: strcpy (State, “Color : Green”)

11: if (ms = = 0)

12: strcat (State, “Speed : 20 MPH”);

13: if (ms = = 1)

14: Strcat (State, “Speed : 55 MPH”);

15: if (ms = = 2)

16: strcat (State, “Speed : 70 MPH”);

17: me. SetSel (0,-1);

18: me. ReplaceSel (State);

شرح سطور الدالة

فى هذه السطور بدأنا السطر رقم 1 بالدالة UpdateData( ) بمعامل هو القيمة TRUE وذلك لنقل حالة الادوات الى المتغيرات المصاحبة لها وفى السطر رقم 2 اعلان عن متغير حرفى.

فى السطر رقم 3 اعلان عن متغير صحيح.

فى السطر رقم 4 تقوم الدالة () GetCheckRadioButton باختبار أداتى اختبار الالوان وتضع النتيجة فى المتغير CHK.

فى السطر رقم 5 نستخدم جملة If لإختيار قيمة المتغير CHK فإذا كانت قيمة المتغير هىصفر هذا يعنى أن المستخدم لم يختار أداة بعد وبالتالى السطر رقم 6 يخزن فى المتغير state عبارة تفيد ذلك.

فى السطر رقم 7 اختبار قيمة المتغير CHK اذا كانت تساوى IDC_RADIO6 فهذا معناه أن المستخدم إختار الاداة الاولى وهى Red وبالتالى فى السطر رقم 4 نستخدم الدالة Strcpy ( ) لنسخ العبارة Color : Red فى المتغير state ، بالمثل فى السطور رقم 5 ، 6 وبالتالى نخرج من جملتى If بتحديد لون .

فى السطر رقم 11 نبدأ فى إختبار المتغير ms الذى يحدد أى أداة من الادوات الثلاثة فى المجموعة الثانية Speed اختارها المستخدم فإذا كان 0 معناه أن المسنخدم إختار الاداة الاولى وهكذا وفى كل مرة نستخدم الدالة Strcat ( ) لإضافة عبارة السرعة الى محتويات المتغير State أى الى اللون الذى تم تحديده ونخرج من هذه السطور بالمتغير state الذى يحتوى على اللون والسرعة

فى السطر رقم 17 نستخدم الدالة SetSel ( ) لإختيار محتويات أداة الكتابة

فى السطر رقم 18 نستخدم الدالة ReplaceSel ( ) لوضع محتويات المتغير State فى خانة الكتابة وبالتالى عند الضغط على أداة زر الأوامر Report تخرج حالة أدوات الاختبار فى خانة الكتابة IDC-Edit 1

10. بعد كتابة سطور الدالة وحفظ التغيرات أبدأ بتنفيذ البرنامج بالخطوات المعتادة وجرب اختيار أداة اختبار من مجموعة Color وكذلك أداة اختبار من مجموعة Speed ثم إضغط على زر الأوامر Report تحصل على تقرير بحالة الادوات كما فى الشكل 4-13

clip_image013

ملاحظات

1. فى هذا البرنامج أعطينا متغير mr للأداة الاولى من المجموعة Color وكان من النوع CONTROL لذلك تم اختباره باستخدام الدالة Getchecked Radio Button ( ) وباقى سطور دالة الاوامر Report

2. اعطينا متغير ms للاداة الاولى من المجموعة الثانية وكان نوع int وبالتالى استخدامنا فى اختباره جملةif لمعرفة قيمته فاذا كانت صفر فانها تشير الى الاداة والقيمة 1 تشير للاداة الثانيةوالقيمة2 للثالثة وهكذا.ولك أن تستخدم الطريقة الاولى أو الثانية كما تشاء.

2. فى البرنامج السابق يمكن إعطاء قيمة ابتدائية للادوات بحيث تكون القيمة الابتدائية للسرعة مثلاً هى 70 بإعطاء المتغير ms القيمة 2 وذلك فى سطور الدالة OnInitDialog ( ) كما يلى :

Bool :: OnInitDialog ( )

ms = 2;

UpdateData (False);

return True;

3. فى البرنامج السابق استخدمنا أداة خانة الكتابة Edit لعرض نتيجة التقرير وهى مخزنة فى المتغير state ويمكن لنا عرض قيمة هذا المتغير باستخدام الدالة MessageBox() بالصورة Message Box (state) وبالتالى يتم عرض النتيجة فى صندوق الرسالة.

التسميات: