الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

مغلق
بدأه الكتكوت في 15 أبريل 2003 · 1 رد · 1,039 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

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

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

#2

شكرا على الكود (gift) وربنا يوفقك

هذا الموضوع مغلق.

مواضيع مشابهة