بسم الله الرحمن الرحيم
DirectInput الكائن دايركت انبت
دايركت انبت سهل جدا لذلك لن نحتاج الى اكثر من درس واحد فقط
ماهو دايركت انبت ( DirectInput )
دايركت انبت هي مجموعة اوامر مخصصة للتحكم في الفارة ، لوحة المفاتيح ، عصا الالعاب ، و جميع الاجهزة الادخال الاخرى مثل مقود السيارة الخ...
لماذا نستخدم دايركت انبت ( DirectInput )
لان دايركت انبت تدعم خصائص للادخال لا تدعمها اوامر Win32 API ، وايضا دايركت انبت يعطينا سرعة عالية للوصول الى بيانات اجهزة الادخال وذلك لاتصالة المباشر مع مشغلات تلك الاجهزة ، دايركت انبت يسمح لبرنامجك باستقبال البيانات من اجهزة الادخال حتى وان كان برنامجك ليس هو النشط .
وهو يتعرف تلقائياً على الاجهزة الجديدة التي تضيفها الى جهازك ويتعامل مع كامل قدراتها حسب ما هو معرف في برنامج التشغيل
الخطوة الاولى: انشاء مشروع جديد
انشئ مشروع جديد واربطة بمكتبة دايركت اكس وقد اشرنا كيف نربط مشروعنا بهذه المكتبة في درس تجهيز فيجول بيسك لبرمجة دايركت اكس ، اجعل هذا المشروع يحتوي على فورم واحد فقط ، لا نحتاج الى اكثر من ذلك
الخطوة الثانية: اعداد المتغيرات الخاصة بـ دايركت انبت
ضع هذا الكود في قمة الفورم:
Option Explicit
Dim dx As New DirectX7
Dim di As DirectInput
Dim diDEV As DirectInputDevice
Dim di_KeyBoard As DIKEYBOARDSTATE
شرح هذا الكود:
dx
الكائن الرئيسي لدايركت اكس ويتم تعريفة مرة واحدة في البرنامج
di
الكائن الرئيسي لدايركت انبت ويتم تعريفة مرة واحدة
diDEV
الجهاز الذي سوف نتعامل معة - قد يكون لوحة مفاتيح او فارة او اي جهاز اخر
di_KeyBoard
متغير يحمل حالة لوحة المفاتيح
بقراءة هذا المتغير يمكنك معرفة حالة جميع المفاتيح
هل هي مضغوطة او غير مضغوطة
الخطوة الثالثة: انشاء نداء تعريف دايركت انبت
ضع هذا الكود في الفورم:
Function DI_Init() As Boolean
On Local Error GoTo Err1
Set di = dx.DirectInputCreate()
Set diDEV = di.CreateDevice("GUID_SysKeyboard")
diDEV.SetCommonDataFormat DIFORMAT_KEYBOARD
diDEV.SetCooperativeLevel Me.hWnd, DISCL_BACKGROUND Or DISCL_NONEXCLUSIVE
diDEV.Acquire
DI_Init = True
Exit Function
Err1:
Exit Function
End Function
شرح هذا الكود:
Set di = dx.DirectInputCreate()
تعريف الكائن الرئيسي لدايركت درو ويجب ان نعرف هذا العنصر
لنتمكن من خلق الكائنات التالية
Set diDEV = di.CreateDevice("GUID_SysKeyboard")
بعد ان خلقنا الكائن الرئيسي يجب ان نخلق الجهاز الذي سوف نقوم بأستخدامة
وهو هنا في هذه الحالة لوحة المفاتيح ويمكن تغيرة الى عصا التحكم او اي جهاز اخر
diDEV.SetCommonDataFormat DIFORMAT_KEYBOARD
هذا الامر لتعريف نوع البيانات التي سوف نستلمها من الجهاز الذي خلقناه (diDEV)
و نحن هنا نعرف نوع البيانات كـ بيانات من لوحة المفاتيح
diDEV.SetCooperativeLevel Me.hWnd, DISCL_BACKGROUND Or DISCL_NONEXCLUSIVE
نعرف الطريقة التي سوف يتصرف بها هذا الجهاز ونحن هنا نخبرة بأن يرسل لنا معلومات عن
لوحة المفاتيح حتى لو كان برنامجنا يعمل في الخلفية - غير نشط
diDEV.Acquire
الاوامر السابقة فقط لتجهيز صفات جهازنا المسمى (diDEV) اما هذا الامر
فانه يخلق هذا الجهاز ونكون قادرين على استعماله الان
الخطوة الرابعة: استدعاء نداء تعريف دايركت انبت
ضع هذا الكود في الفورم:
Private Sub Form_Load()
If DI_Init = False Then
MsgBox "خطاء في التعرف على لوحة المفاتيح", vbExclamation
End
End If
End Sub
شرح هذا الكود:
هذا الكود لا يحتاج الى شرح لانة من اساسيات فيجول بيسك
و على كل حال فاننا نستدعي الدالة (DI_Init) في بداية تشغيل برنامجنا لخلق كائن وجهاز دايركت انبت وشرحنا ذلك في الفقرة السابقة
هذه الدالة اذا ارجعت قيمة (True) فهذا يعني بأن كل شئ تم على ما يرام ام اذا ارجعت قيمة (False) فان هناك مشكلة ولا يمكنك الاستمرار او محاولة استخدام الكائن (diDEV)
الخطوة الاخيرة: معرفة حالة المفاتيح
والان يمكنك معرفة حالة اي مفتاح من لوحة المفاتيح بأستدعاء هذا الاوامر والتي ظللتها باللون الاحمر ، من اي مكان في برنامجك وحسب متطلباتك ، اذا احتجت الى مساعدة اكثر ، راجع ملف المشروع.
diDEV.GetDeviceStateKeyboard di_KeyBoard
لتعبئة المتغير (di_KeyBoard) بأحدث المعلومات عن حالة لوحة المفاتيح
وكأننا نعمل ReFresh لـ لوحة المفاتيح
If di_KeyBoard.Key(DIK_ESCAPE) Then End
هنا نختبر مفتاح واحد فقط هو (DIK_ESCAPE) وهو مفتاح الهروب
او الخروج ويمكنك اختبار اي مفتاح اخر بأن تضع اسمة بدل DIK_ESCAPE
انهينا درس دايركت انبت و لم يبقى لنا الا الدروس المتقدمة والتي سوف تكون اسهل ولن نرى هذا الكود ، فقط سنرى سطر واحد لمعرفة حالة المفتاح ، الا اني فضلت في هذه الدروس تعلم دايركت اكس بشكل مباشر لمعرفة الاساسيات