التعامل مع الفأرة Working With Mouse

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

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

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

الحدث

المعنى (وقت الحدوث)

WM­_LBUTTONDBLCLK

عند النقر مرتين بالطرف الأيسر للفأرة.

WM_LBUTTONDOWN

عند الضغط على الطرف الأيسر للفأرة (النقر مرة واحده).

WM_LBUTTONUP

عند ترك الطرف الأيسر للفأرة.

WM_MOUSE MOVE

عند تحريك الفأرة فى مساحه البرنامج.

WM_RBUTTON DBLCLK

عند النقر مرتين بالطرف الأيمن للفأرة.

WM_RBUTTON DOWN

عند الضغط على الطرف الأيمن للفأرة مرة واحدة.

WM_RBUTTON UP

عند ترك الطرف الأيمن للفأرة.

جدول باحداث الفأرة

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

البرنامج الاول

افتح ملف البرنامج vcex12من الفهرس chpt8 ونفذه تحصل على الشكل 8-1

clip_image002

، ويحتوى الشكل على أداتين كتابة (Edit) وبجوارهما عنوانين هما X , Y ، جرب تحريك الفأرة ستتغير الأرقام الموجودة فى أداة الكتابه الأولى والثانيه وهذه الارقام هى احداثيات الفارة على الشاشة ، حيث تعبر أداة الكتابة الأولى عن قيمه X (الموضع الأفقى للفأرة ) للنقطه التى تقف عند الفأرة ، وتعبر الأداة الثانيه عن قيمه y (الموضع الرأسى) للنقطه التى تقف عندها الفأرة، وهكذا عند تحريك الفأرة تتغير القيم تبعا لتغيير موضع الفأرة.

بالاضافة لعرض احداثيات الفأرة على الشاشة يمكن استعمال الفأرة فى الرسم , جرب

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

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

1. ابدأ برنامج جديد وذلك بإختيار File ثم New ثم work space Project ثم OK.

2. اكتب اسم للبرنامج وليكن vcex 12ثمcreate .

3. حدد نوع المشروع من النوع SDI ثم انقر Next.

4. تحصل على شاشه تحديد نوع قواعد البيانات اتركها كما هى و انقر Next.

5. تحصل على شاشه تحديد نوع OLE اترك الاختيارات كما هىو انقر Next.

6. تحصل على شاشه تحديد مواصفات البرنامج انقر Next.

7. تحصل على شاشه تعليقات البرنامج ونوع مكتبه الربط انقر Next.

8. تحصل على آخر شاشه وهى الفصائل التى يتكون منها البرنامج ، انقر الفصيله

View CVEX18 ثم Cview وإختار CFormView كما بالشكل 8-2 ثم Finsh ثم OK ليتم تخليق البرنامج بالمواصفات التى تم تحديدها.

clip_image003

شكل 8-2 تحديد الفصائل
تعديل البرنامج

9. بعد الانتهاء من تخليق البرنامج قم بتعديل البرنامج ليناسب الشكل المطلوب وذلك كما يلى :

- انقر رمز ملف الموارد ومن صندوق ملفات البرنامج انقر (مرتين) resources VCEX 18 لتحصل على شجره ملفات الموارد.

- انقر مرتين على Dialog ثم انقر مرتين على IDD-VCEX 12 -FORM تحصل على الشكل المبدئى لصندوق الحوار الذى يمثل خلفيه البرنامج.

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

- اسحب أداتين كتابة (Edit box) وأداتين عنوان ( STATIC TEXT ) ووقعها على صندوق الحوار وغير العناوين حتى تحصل على الشكل 8-3 وهو الشكل المطلوب للبرنامج

clip_image004

إعطاء متغيرات لأداتى الكتابة

لعرض احداثيات الفارة فى أداتى الكتابة لابد من تعريف متغيرات لاداتى الكتابة حتى يمكن استعمالها ويتم ذلك كما يلى :-

-اضغط باصبعك على المفتاح CTRL وفى نفس الوقت انقر بالفأرة مرتين على أداة الكتابة الاولى (X) تحصل على صندوق حوار تعريف متغير ,اكتب اسم للمتغير وليكن MX واختار نوع للمتغير من نوع int ثم انقر OK .

-كرر الخطوة السابقة مع أداة الكتابة الثانية بحيث تأخذ لاسم MY والنوع INT .

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

10. بعد تصميم الشكل المطلوب نبدأ فى كتابة سطور الدالة التى تنفذ عند حركة الفأرة وذلك كما يلى :

- اضغط مفتاحى Ctrl + W ، من صندوق الأهداف انقر الفصيله CVCEX 12 View.

n من صندوق الرسائل (MESSAGES)اختار الرسالة WM_Mouse Move كما فى الشكل 8-4

clip_image006

ثم Add Function ثم OK فيتم إضافة دالة بالاسم On_Mouse Move

بمعنى عندما يتم تحريك الفأرة نفذ هذه الدالة

- انقر الزر Edit Code واكتب السطور التالية :

1: mx = Point.x ;

2: my = Point.y ;

3: UpdateData (FALSE) ;

4: CC Lient DC dc(this) ;

5: dc.SetPixel (Point.x , Point.y , RGB(0,0,0)) ;

فى هذه السطور ، فى السطر رقم 1 يتم وضع القيمة Point.x فى المتغير mx ، والقيمه Point.x هى القيمه الحاليه للوضع الأفقى للفأرة ، والمتغير mx معرف لأداة الكتابه الأولى، بالمثل السطر رقم 2.

فى السطر رقم 3 الداله UpdateData( ) بالمعامل FALSE تقوم بنقل قيمه المتغيرات mx ، my إلى الأدوات وبالتالى عند تحريك الفأرة تتغير القيم الموجودة فى أداتى الكتابه بما يوافق موقع الفأره.

فى السطر رقم 4 يتم تعريف متغير (هدف) من الفصيلة CCLientDC وهى الفصيلة المسئولة عن منطقه الرسم وتحتوى على جميع دوال الرسم ، فى السطر 5 تقوم الداله Set Pixel( ) برسم نقطة على الشاشه فى الموضع (point.x , point.y) وهو الموضع الحالى للفأرة ، وذلك باللون RGB (0,0,0) وهو اللون الأسود.

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

ترجمة وتنفيذ البرنامج

ترجم البرنامج و نفذه بالضغط على المفتاحين CTRL + F5 تحصل على الشكل (8-5)

clip_image007

ثم جرب إستعماله تلاحظ ما يلى :

- عند تحريك الفأرة فى بيئه الرسم تتغير القيم الموجودة فى أداتى الكتابه بما يوافق حركه الفأرة.

- يتم رسم نقط بشكل متتالى عند حركة الفأرة وبالتالى يمكن استعمال الفأرة فى الرسم الحر.

ملاحظات على البرنامج

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

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

ثانياً : لا تستطيع تحريك الفأرة بدون رسم. للرسم فى مكان آخرلانها بمجرد تحريك الفأرة يتم رسم نقط

ولحل هذه المشاكل نقوم بتعديل سطور الدالة السابقه كما يلى :

تعديل البرنامج

- اضغط مفتاحى Ctrl + W ، تأكد من أن الفصيلة الحاليه هى CVCEX12View وذلك فى خانه Class Name.

- من صندوق الأهداف إختار CVCEX12View ثم انقر الرساله WM_Mouse Move ثم Edit Code للتعديل فى البرنامج.

- عدل سطور الداله بحيث تصير كما يلى :

mx = Point.x ;

mx = Point.y ;

UpdateData (FALSE) ;

1: if ((nFlags & MKLBUTTON) = = MK-LBUTTON)

{

2: CC Lient DC dc(this) ;

3: dc.Move to (m_Prevx,m.Prevy) ;

4: dc.Line to (Point.x , Point.y) ;

5: m_PrevX = Point.x ;

6: m_PrevY = Point.y ;

}

فى هذه السطور

فى السطر 1 الجملة if تختبر حاله الطرف الأيسر للفأرة أثناء حركة الفأرة هل يضغط عليه المستخدم ؟ فإذا كانت الاجابة نعم يتم تنفيذ الجمل التالية. وهى باقى سطور الدالة والمسؤلة عن الرسم واذا كانت لها ، لاتنفذ السطور التالية وبالتالى لايتم الرسم.

فى السطر 3 يتم تغيير الاحدثيات إلى النقطتين m_Prev X ، m_prev Y ويحتويان على القيم السابقه لـ Y,Y ، فى السطر 4 يتم رسم خط من النقطه السابقه إلى النقطه الحاليه وكلما تحركت الفأرة يتم ذلك فتحصل على رسم متواصل.

تعريف متغيرات

1. افتح الملف VCex12View.h واكتب السطرين التاليين بعد السطر //attributes

int m-PrevX ;

int m-PrevY ;

فى هذه السطور تم تعريف متغيرين من نوع int.

2.قم بإنشاء داله تنفذ عند الضغط على الطرف الأيسر للفأرة كما يلى :

- اضغط المفتاحين Ctrl+W ثم اختار Cvcex12View ثم الرساله WM-L BUTTON DOWN ثم Add Function ثم OK.

- انقر الزر Edit Code ثم اكتب السطور التالية :

m _ Prev X = Point.X ;

m _Prev Y = Point.Y ;

فى هذه السطور تقوم بوضع القيمه الحاليه لوضع الفأرة (X,Y) وهى point.x,point.y فى المتغيرات المعرفة وهى m_prevx,m_prevy، بحيث يتم ذلك كلما ضغط المستخدم على الطرف الأيسر للفأرة وأراد التحرك إلى مكان جديد.

ترجمة وتنفيذ البرنامج

ترجم البرنامج وقم بتنفيذه ثم جرب إستعماله تلاحظ ما يلى :

- عند تحريك الفأرة يتم تغيير قيم أداتى الكتابة لنعبر عن موقع الفأرة على الشاشة ولكن لا يتم الرسم بالحركة بدون ضغط على الطرف الايسر.

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

البرنامج الثانى

يقوم هذا البرنامج باختبار بعض المفاتيح أثناء حركة الفأرة وهى مفتاح ctrl مفتاح shift وكذلك الطرف الايمن الايسر للفارة وهذا يوضح امكانية توظيف هذه المفاتيح فى حالة حركة الفأرة مثلما يحدث فى معظم برامج النوافذ مثل توظيف المفتاح shift مع النقر على الفأرة وهكذا .

افتح ملف البرنامج vcex 13 من الفهرسchpt 8أو تابع مراحل تصميم وتنفيذ البرنامج تحصل على الشكل 8-6 وهو برنامج من نوع SDI ، يوجد فى خلفيته أربعة أدوات اختبار (Check Control) كل واحدة لتحديد حاله معينه ، الأولى تحدد هل تم الضغط على الطرف الأيسر للفأرة أم لا ، الثانيه تحدد حاله المفتاح Ctr ، الثالثة تحدد هل تم الضغط على الطرف الأيمن للفأرة، أم لا ، الرابعة تحدد حاله المفتاح Shift ، جرب إستعمال البرنامج بحيث تحرك الفأرة وتضغط على المفتاح shift , ctrl وتلاحظ النتيجة.

clip_image009

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

1. ابدأ برنامج جديد وذلك باختيار File ثم New ثمworkspace Project ثم OK.

2. فى صندوق اسم المشروع اكتب اسم المشروع وليكن vcex 13 ثمcreate .

3. من شاشه نوع التطبيق إختار Single document ثم Next.

4. من شاشه تحديد ملف قواعد البيانات انقر Next لتختار None.

5. تحصل على شاشه تحديد OLE انقر NEXT.

6. تحصل على شاشه مواصفات البرنامج انقر NEXT.

7. تحصل على شاشه تعليقات البرنامج ونوع مكتبه الربط انقر NEXT.

8. تحصل على آخر شاشه وهى الفصائل التى يتم استعمالها لتكوين فصائل البرنامج انقر على ( vcex 13 View) ثم على Cview تحصل على قائمه الفصائل التى يمكن استعمالها مكان هذه الفصيلة اختار الفصيلة CFormView كما فى الشكل 8-7 ثم انقر على Finsh ثم OK ليتم تخليق برنامج بهذه المواصفات.

clip_image011

تصميم الشكل المطلوب

9. بعد تخليق البرنامج قم بالتعديل فيه ليوافق الشكل المطلوب وذلك كما يلى :

- انقر على رمز ملف الموارد ثم انقر على vcex13Resources لتحصل على شجره ملفات الموارد.

- من شجره ملفات الموارد اختار Dialog ثم IDD-vcex 13-FORM تحصل على الشكل المبدئى لصندوق حوار خلفيه البرنامج.

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

n اسحب أربعه أدوات اختبار من نوع box Check ووقعها على صندوق الحوار وغير العناوين لتحصل على الشكل 8-8 وهو الشكل المطلوب للبرنامج .

clip_image012

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

10. بعد تصميم الشكل المطلوب ووضع أدوات الأختبار لابد من إعطاء متغيرات لها ليتم التعامل معها داخل نص البرنامج وذلك كما يلى :

- اضغط مفتاح Ctrl وفى نفس الوقت انقر بالفأرة مرتين على أداة الاختيار الأولى تحصل على صندوق حوار لإعطاء متغير للأداة اكتب الاسم m1 وإترك خانه Categary كما هى value وكذلك خانه Variable Type اتركها Bool ثم انقر على OK.

- كرر نفس الخطوه مع أداه الاختيار الثانية والثالثة والرابعة بحيث تأخذ الادوات متغيرات بالاسماء m2 ، m3 ، m4 بالترتيب تأخذ نفس النوع وهو Bool.

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

11. يبقى الآن كتابة سطور الداله التى تنقذ عند الضغط على الفأرة( لاختيار مفتاح Ctrl أومفتاح Shift )ويتم ذلك كما يلى :-

- اضغط مفتاحى Ctrl + W للحصول على شاشه Class Wizard.

n فى أول صندوق العناصر (object IDS) اختار الفصيله View.vcex 13 ثم من صندوق الرسائل (Messages) اختار WM-LBUTTON DOWN كما فى الشكل 8-9 ثم Add Function ثم OK لإضافة داله بالاسم ONLBUTTON DOWNتنفذ عند الضغط على الطرف الايسر للفارة.

clip_image014

- انقر الزر Edit Code تحصل على الدالة المطلوبة واكتب السطور التاليه :

1: m1 = TRUE ;

2: if ((nFlags & MK_CONTROL) = = MK_CONTROL)

3: m2 = TRUE ;

4: else

5: m2 = FALSE ;

6: if ((nFlags & MK_RBUTTON) = = MK_RBUTTON)

7: m3 = TRUE ;

8: else

9: m3 = FALSE ;

10: if ((nFlags & MK_Shift) = = MK_Shift)

11: m4 = TRUE ;

12: else

13: m4 = FAISE ;

14: UpdateData (FAISE) ;

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

فى السطر رقم 1 اعطينا المتغير m1 القيمه TRUE (m1 معرف لأداه الاختبار الأول) فى السطر رقم 2 جملة if تختبر حالة المفتاح Ctrl عند الضغط على الطرف الأيسر للفأرة هل يضغط عليه المستخدم أمر لا ، ويتم ذلك بعمل Anding للمتغير n Flags (الذى يستعمل كمعامل للداله) الذى يحتوى على كود المفتاح الذى تم الضغط عليه مع المتغير MK-CONTROL الذى يشير إلى المفتاح Ctrl ، ثم مقارنه النتيجه بالمتغير MK-CONTROL فإذا كان الطرفين متساوين فمعنى ذلك ان الكود الموجود فى المتغير nflags والذى ضغط عليه المستخدم هو control اى ان المستخدم ضغط على المفتاح Ctrl وفى هذه الحالة يقوم السطر رقم 3 بإعطاء المتغير m2 القيمه TRUE وإلا يقوم السطر 5 بإعطاء المتغير m2 القيمه FALSE.

- بالمثل تقوم جملة if بإختبار الطرف الأيمن للفأرة فى السطر رقم 6 وبإختبار المفتاح Shift فى السطر رقم 10.

- فى السطر رقم 14 تقوم الدالة UpdateData( ) بالمعامل FALSE بتغيير حالة أدوات الاختبار بالقيم الموجودة فى المتغيرات m1 ، m2 ، m3 ، m4. وهو ما يعبر عن حالة المفاتيح.

ترجمة وتنفيذ البرنامج

12. قم بترجمة وتنفيذ البرنامج ثم جرب إستعماله كما يلى :

- انقر الطرف الأيسر للفأرة ولاحظ حالة ادوات الاختيار.

- انقر الطرف الأيسر للفأرة وأنت تضغط فى نفس الوقت المفتاح Ctrl ولاحظ حالة ادوات الاختيار.

- اضغط على المفتاح Shift وانقر الطرف الأيسر للفأرة فى نفس الوقت.

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

لوحة المفاتيح

فى هذه الفقرة نرى كيفيه توظيف المفاتيح المختلفه للوحه المفاتيح ، مثل مفاتيح حروف الهجاء أو الأرقام أو مفاتيح الوظائف مثل المفاتيح Ctr , F2 , F1 ،.... وغيرها

فكما توجد أحداث للفأرة توجد أحداث للوحة المفاتيح مثل الضغط على مفتاح وغيرها ونوضح ذلك من المثال التالى :-

مثال اختبار لوحة المفاتيح

افتح ملف البرنامج vcex14 من الفهرس chpt8 أو تابع مراحل تصميم وتنفيذ البرنامج تحصل على الشكل (8-10) وهو برنامج من نوع SDI لا يحتوى على أدوات إضافيه ، جرب إستعمال المفاتيح بالضغط على مفتاح السهم الشمال (Left Arrow) ، إضغط المفتاح Home ، إضغط مفتاح حرف A وهكذا وفى كل حاله لاحظ النتيجه كما فى الشكل (8-10 ).

clip_image016

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

1. ابدأ برنامج جديد وذلك بإختيار File ثم New ثمworkspace Project ثم Ok.

2. فى صندوق اسم المشروع اكتب اسم للمشروع وليكن vcex14 ثم Create

3. من شاشة نوع التطبيق إختار Single Document ثم Next.

4. استمر فى اختيار موصفات البرنامج بالضغط بالفأرة على كلمه Next للموافقه على المواصفات الإفتراضيه حتى تحصل على آخر شاشة وبها الإختيار Finsh ثم Ok وبهذا تم تخليق برنامج من نوع Single Document.

تصميم الشكل المطلوب واعطاء متغيرات

فى هذا البرنامج لا نحتاج لوضع أدوات على شاشه البرنامج وبالتالى لا نحتاج استعمال متغيرات لذلك لا نعدل فى شكل البرنامج.

كتابة سطور البرنامج

لكتابة السطور التى تختبر المفاتيح نفذ ما يلى :

1. اضغط مفتاحى Ctr+W للحصول على شاشه Class Wizard.

2. فى صندوق العناصر المكتوب عليه Object IDs انقر على أول اختيار وهو vcex14View وانظر إلى صندوق الرسائل على الجانب الأيمن وبه الرسائل الممكنه أو الأحداث التى يتعرض لها هذا البرنامج كما بالشكل(8-9).

3. تابع صندوق الرسائل تجد به الرسائل التى تتعامل مع لوحه المفاتيح وهى كما يلى:

الرساله

وقت الحدوث

WM-Key Down

عند الضغط على مفتاح من لوحة المفاتيح.

WM-KeyUp

عند ترك مفتاح بعد الضغط عليه.

WM-CHAR

عند إستعمال لوحه المفاتيح.

4. نستعمل الرساله WM-Keydown وذلك بالنقر عليها بالفأرة ثم Add Function فيتم إضافة داله لصندوق الدوال (Member Function) وذلك بالاسم On KeyDown.

5. إختار Edit Code لكتابة سطور الدالة ، اكتب السطور التاليه :

// To Do Add Your Message handle Code here

1: switch (nChar)

{

2: Case VK - LEFT :

3: Message Box ( “You Pressed The Left arraw....”);

4: break ;

5: Case VK - RIGHT :

6: Message Box ( “You Pressed The Right arraw...”);

7: break ;

8: }

9: if (n Char = = ‘A’ || nChar = = ‘a’)

10: Message Box ( “You Pressed ‘A’ Key”);

شرح سطور البرنامج

* فى السطر رقم 1 يتم إختيار قيمه المتغير nChar والمتغير nChar يأخذ كود المفتاح الذى يتم الضغط عليه.

* فى السطر رقم 2 كلمه Case تختبر إذا كانت قيمه المتغير nChar هى VK - LEFT (وهو ثابت معرف لمفتاح السهم الشمال) يتم طباعة رساله بذلك بإستخدام الداله Message Box ( ) فى السطر رقم 3.

* فى السطر رقم 9 جملة if لإختيار قيمه nChar إذا كانت الحرف a أو A يتم طباعة رساله بذلك.

* فى السطور السابقة استعملنا الثابت مثل VK - LEFT وهو معرف لمفتاح السهم الشمال وكل مفتاح له ثابت ،وقبل متابعة الفقرة التاليه نعرض جدول بالثوابت المعرفه لمفاتيح لوحه المفاتيح وهى كما فى الجدول رقم 8-1 وهى خاصه بمفاتيح الوظائف والمفاتيح الخاصة.

الثابت

المفتاح المقابل

VK - Shift

Shift

VK - Control

Ctrl

VK - PAUSE

Pause

VK - CAPTAL

Caps Lock

VK - PRIOR

Page Up

VK - NEXT

Page Down

VK - END

End

VK - Home

Home

VK - LEFT

Left - Arraw

VK - RIGHT

Right - Arraw

VK - INSERT

Insert

VK - DELETE

Delete

VK - F1

F1

VK - F2

F2

VK - F3

F3

VK - F4

F4

VK - F5

F5

VK - F6

F6

VK - F7

F7

VK - F8

F8

VK - F9

F9

VK - F10

F10

VK - F11

F11

VK - F12

F12

VK - NUMLOCK

Num Lock

VK - SCROLL

Scroll Lock

جدول 8-1 ثوابت لوحة المفاتيح

ترجمة وتنفيذ البرنامج

· يمكن لك أن تترجم وتنفذ البرنامج وذلك بالضغط على مفتاحى Ctrl+F5 تحصل على رساله بعدم وجود ملف EXE إضغط OK يتم الترجمه وتحصل على نتيجه التنفيذ.

· جرب إستعمال البرنامج وذلك بالضغط على مفتاح السهم الشمال (Left Arraw) تحصل على رساله بذلك وجرب الضغط على مفتاح السهم الأيمن وكذلك مفتاح الحرف A،وبهذا رأينا كيفية استعمال حدث الضغط على لوحة المفاتيح وكيفية تحديد المفتاح الذى ضغط عليه المستخدم وكيفية توظيفه .

ملحوظة : يمكن لك تعديل البرنامج السابق وذلك بإختيار أى مفتاح من لوحه المفاتيح بإستعمال الثوابت المعرفة بجدول لوحه المفاتيح.

إختبار ضغط مفتاحين

فى الخطوه رقم 5 فى البرنامج السابق وهى كتابة سطور الدالة استبدل السطور السابقه بالسطور التاليه :(أو افتح ملف البرنامج)

// To Do Add Your

1: Switch (nChar)

{

2: Case VK - HOME :

3: if (Get Key State (VK - CONTROL) & VK - CONTROL)

{

4: Message Box (“You Pressed Ctrl+Home”);

}

5: else

{

6: Message Box (“You Pressed Home”);

}

break ;

7: Case VK - END :

if (Get Key State (VK - CONTROL) & VK - CONTROL)

8: Message Box (“You Pressed Ctrl+END”);

9: else

10: Message Box (“You Pressed END”);

break ;

}

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

فى السطر رقم 1 يتم إختبار قيمه المتغير nChar بإستعمال كلمه Switch فى السطر رقم 2 جملة Case تحدد إذا كانت قيمه المتغير nChar هى VK-HOME إى أن المستخدم ضغط على المفتاح HOME يتم تنفيذ السطر رقم 3.

فى السطر رقم 3 جمله if تختبر شرط وهو أن نتيجه الداله GetKeyState( ) (التى تحدد حاله المفتاح Ctrl فى هذه الحاله) مع الثابت VK - CONTROL إذا كانت النتيجه صحيحه ينفذ السطر رقم 4 وهو ظهور الرسالة You Pressed Ctrl+Home والا ينفذ السطر رقم 6 وهو ظهور الرساله You Pressed Home بالمثل السطور 7 ، 8 ، 9 ، 10.

ملاحظات

* فى هذه السطور فى السطر 2 جملة Case تحدد أن المستخدم ضغط على المفتاح HOME والسطر رقم 3 جملة if تختبر حالة المفتاح Ctrl عندما ضغط المستخدم على المفتاح HOME وبهذه الطريقه تستطيع توظيف مفتاحى Ctrl+HOME بالمثل باقى سطور البرنامج.

* يمكن لك استبدال ثوابت المفاتيح (..... , Control , End , Home) بأى ثوابت من الجدول وبالتالى تستطيع توظيف أى مفاتيح.

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

وللاحداث دور مهم فى البرمجة فى بيئة النوافذ سوف نلتقى بها بشكل موسع فى الجزء الثانى من الكتاب.

تعليقات

المشاركات الشائعة من هذه المدونة

المؤثرات الحسابية في C++

الرسم Graphics

دوال النمط الرسومي في ++C