المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : سلسلة دروس المحاكاة ( لوحة المفاتيح , الفأرة ,التشفير ) للمبتدئين


عبسي الحمديني
2011-09-13, 06:27 PM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته

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

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

KeyDown(KeyCode As Integer, Shift As Integer)


ينطلق هذا الحدث فور ضغطك إي زر من أزرار الكيبود وهو يحتوي على المتغير KeyCode
الذي سوف يقوم بحمل القيمة التي من خلالها سوف نعرف إي زر قد ضغط المستخدم فهو يحمل نوع المفتاح لكن بصورة خاصة حيث يحفظ النوع عن طريق أرقام تسجل فيه ولكل مفتاح رمز أو رقم معين سوف أعلمك بعد قليل كيفية قراءة ومعرفة كل رقم مفتاح إما بالنسبة للمتغيرShift فهذا المتغير وظيفته أيضا نفس الوظيفة لكنه يخزن بعض المفاتيح الأخرى التي لا يخزنها المتغير السابق ولا يتعامل معها وهو أزرار Shift و Tab وغيرها إلى الخ ...

ألان لتجربه الحدث السابق افتح برنامج فيجوال بيسك واختر الحدث السابق من إحداث الفورم واكتب الكود الأتي داخله

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
MsgBox ""
End Sub

شغل البرنامج ولاحظ ان البرنامج سوف يعطي رسالة فور ضغطك اي زر من الازرار على الفورم فور ضغطك للزر لان الحدث يتفجر في ذلك الوقت او ينفذ حسنا استطعنا تنفيذ حدث لكن الحدث لا ينفع لانه ينفذ مع كل زر كيف استطيع تخصيص كود معين للازرار معينه هل يمكن ذلك هل يمكن استخدام F1 و F2 وغيرها الى الخ .. في برنامجي بكل تاكيد تستطيع فعل ذلك واكثر سوف اشرحها كل بالتفصيل ان شاء الله اولا كيف تعرف الـ KeyCode او الرمز الخاص لكل مفتاح فانه من غير المعقول ان تحفظ ارقامها بذهنك لذا سوف نقوم بالاتي لو اردنا معرفة الرمز الخاص لمفتاح ما نقوم بالاتي وفي نفس الحدث نكتب الكود الاتي

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
MsgBox KeyCode
End Sub

شغل البرنامج واضغط على زر من الازرار لاحظ ان البرنامج يقوم بعرض قيمة ما حسنا جرب مفتاح اخر نعم تخمينك صحيح هذا هو الرمز الخاص بالمفتاح لكن كيف حصلنا عليه ؟ ! ألم اذكر فيما سبق ان المتغير هذا يقوم بحمل قيمة وهي رمز المفتاح المضغوط والمتغير يمكن قرائة بسهوله قمنا بكتابة كود يعرض لنا رساله فيها قيمة المتغير التي تحمل الرمز الخاص للمفتاح المضغوط الان قمنا بمعرفة الطريقة التي من خلالها نحصل على الرمز الخاص بالمفتاح ما الفائده فكر قليلا بذهنك لو استخدمنا الاف الشرطية ونحن بحوزتنا قيمة رمز المفتاح وكتبنا لو كان الرمز فلان اعمل كذا الن يجدي نفعها جرب مثلا الحصول على رمز زر انتر وهو 13 اكتب الكود الاتي

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
MsgBox "you Click On Enter Button"
End If
End Sub

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

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If Chr(KeyCode) = "A" Then
MsgBox "you Click On A"
End If
End Sub


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

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

الحدث :

KeyPress(KeyAscii As Integer)

ينفجر بنفس الوقت الذي ينفجر فيه الحدث السابق ومن الجدير بالذكر ان هذا الحدث يتعامل بالرموز عن طريق المتغير KeyAscii لكن الامر لا يفرق يمكن عمل كل الذي سبق بنفس الشكل عليه ومن الجدير بالذكر ايضا ان هذا الحدث لا يتنفذ اذا ما كان الحدث السابق موجود وبداخله كود معين الا ان هذا الحدث لا يسمح لك باالتعامل مع كافة الازرار كالـ Shift و غيرها وهذا هو اختلافه

الان الحدث الاخير وهو حدث :

KeyUp(KeyCode As Integer, Shift As Integer)

نفس خصائص اول حدث ونفس الطريقه بالتعامل الا انه يختلف عنه بانه يتفجر عند رفم المستخدم يده عن الزر

اشكر اخي (أحمد فراس نبيل)

عبسي الحمديني
2011-09-13, 06:32 PM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته



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


الحدث :

MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

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


كود PHP:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
MsgBox "Your Text"
End Sub

جرب تشغيل البرنامج بالنقر على زر F5 بالكيبورد وبعد ذلك اضغط إي زر من الأزرار على واجهة الفورم لتلاحظ تنفيذ الحدث مباشرة وتنفيذ الكود الذي كتبنه الذي يعرض الرسالة بالحال حسنا ألان نود إن نتعرف على المتغيرات الموجودة داخل هذا الحدث وما وظيفة كل متغير وما عمله أولا المتغير Button يعمل هذا المتغير وضيفه المتغيران KeyCode و KeyAscii في إحداث الكيبورد فهو يقوم بخزن رمز معين للزر الذي تم ضغطه بالفائر وإما بالنسبة للمتغير Shift فهو يقوم بخزن قيمة ما لتعلمنا إذا ما كان المستخدم ضاغط زر Shift إثناء الضغط بالفائر أم لا وبالنسبة للمتغيران X و Y فهما متغيران لخزن موقع الفائرة فالمتغير X يقوم بخزن الموقع الأفقي للمكان الموجودة فيه الفائرة وبالنسبة للمتغير Y فهو يخزن الموقع ألعامودي التي توجد فيه الفائرة ألان كيفية نستطيع معرفة رمز كل زر من أزرار الفائرة الجواب سهل نستخدم نفس الطريقة في الشرح السابق نقوم بكتابة أمر لعرض رسالة لنا بقيمة المتغير Button الذي يحمل رمز الزر المضغوط وبهذه الطريقة نقوم قد حصلنا على رمز كل زر نبدأ بكتابة الكود كآلاتي

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single(
MsgBox Button
End Sub

جرب تشغيل البرنامج وأضغط زر ألأيمن وبعدها الأيسر ولاحظ القيم كيف نستطيع استخدامها بعد أن عرفنا رمز كل زر سوف نستطيع أن ننفذ أجراء معين حسب الزر الذي قد يضغطه المستخدم فمثلا لو أردنا إن يقوم البرنامج بعرض رسالة فقط لو قام المستخدم بضغط الزر الأيمن نقوم بالأتي أولا نتحقق من رمز زر الفائرة الأيمن الذي هو = 2 وبعد ذلك نبدأ بكتابة جملة ألاف إذا كان المتغير Button الذي يحمل قيمة وهي رمز المفتاح المضغوط بالفائرة = 2 فقم بالاتي يكون الكود هكذا
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single(
If Button = 2 Then
MsgBox "Ahmed Feras "
End If
End Sub



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

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single(
MsgBox Shift
End Sub

نجرب في المرة الأولى ضغط الزر من دون ضغط زر Shift بالكيبورد معه لنلاحظ أن القيمة تكون صفر دائما بغض النظر عن الزر المضغوط بعد ذلك نضغط زر Shift سواء الأيمن أو الأيسر في الكيبورد مع استمرار الضغط وبعدها نضغط أي زر من أزرار الفائرة على الفورم لنلاحظ ظهور رسالة تخبرنا بان القيمة قد تغيرت وأصبحت = 1 وهذه ميزة يمكن استخدامها لبرنامجك ويمكنك كتابة الكود بنفس الصور السابقة إليك مثال بسيط

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single(
If Shift = 1 Then
MsgBox "You Click Shift Button"
Else
MsgBox "You Did not Click Shift Button"
End If
End Sub

الفكرة كالسابق أذا كانت قيمة المتغير = كذا قم ببالاتي وإذا لم تكن كذا قم بالاتي ألان انتهينا من أول متغيران وهما Button و ألــ Shift ألان بقى المتغيران البسيطان X وألــ Y اللذان يعطيان موقع الفائرة لن أشرح عنهما لأنهما بغاية البساطة كل ما فيهما أنهما يعطيان قيم تمثل موقع الفائرة داخل الفورم ( واجهة البرنامج ) جرب الكود ألأتي وسوف تفهم بإذن الله

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single(
MsgBox X
MsgBox Y
End Sub


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

الحدث :
MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

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

الحدث الأخير الحدث :

MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

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

شكر خاص الي (أحمد فراس نبيل)
وللموضوع بقية