الدرس الثامن : Direct Input لتعامل مع المدخلات بشكل أفضل
بسم الله الرحمن الرحيم
السلام عليكم...
الطريقة KeyDown والتي نستخدمها حالياً مملة وغير عملية
لذا خطرت لي فكرة استخدام Direct Input سواءاً عملنا على Direct Graphics أم لا
وحالياً نحن لا نعرف شيئاً عن DX لذا لن أشرح الأكواد فهي للحفظ (أو النسخ) في الوقت الحالي
هل غضبت؟ لا تقلق فهل تعرف كيف تمت برمجة KeyDown في الأصل ؟ إعتبر DI نفسه ولكن الكود ضاهر لديك
حسناً .. مالذي سنفعله الان
أولاً نربط visual Basic بالمكتبة directX7
إختر Project ثم References ثم DirectX7
ثانياً :
فقط ستضيف موديل وتنسخ فيه الكود التالي :
مع ملاحظة أن الفورم هنا هي Form1كود:Option Explicit Public dx As New DirectX7 Public di As DirectInput Public diDEV As DirectInputDevice Public di_KeyBoard As DIKEYBOARDSTATE Public 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 Form1.hWnd, DISCL_BACKGROUND Or DISCL_NONEXCLUSIVE diDEV.Acquire DI_Init = True Exit Function Err1: Exit Function End Function
وفي الحدث Load ضع هذا الكود :
هذه الدالة تقوم بتشغيل Direct Input و إختبارها وعندما تفشل تخبرك بذلككود:If DI_Init = False Then MsgBox "خطاء في التعرف على لوحة المفاتيح", vbExclamation End End If
والان إحفظ المشروع بإسم التطبيق (8 - 1)
اضف Timer واجعل ال interval = 1
كيف سنعرف الزر المضغوط من الكيبورد ؟؟
داخل Timer1
نتكب الكود التالي
diDEV.GetDeviceStateKeyboard di_KeyBoardكود:diDEV.GetDeviceStateKeyboard di_KeyBoard If di_KeyBoard.Key(DIK_ESCAPE) Then MsgBox "لقد ضغطت زر الهروب" If di_KeyBoard.Key(DIK_UP) Then MsgBox "لقد ضغطت الزر الأعلى" If di_KeyBoard.Key(DIK_DOWN) Then MsgBox "لقد ضغت الزر الأسفل"
هذا الأمر يقوم بتخزين رقم الزر المضغوط
حمل التطبيق (8 - 1 ) لكي ترى النتيجة
تجده في موقعي في قسم الدروس
ملاحظة هذه الأكواد مأخوذة من الموقع :
http://www.dx4arab.com/dx_lesson_di_01.htm
تحياتي![]()






























؟ لا تقلق فهل تعرف كيف تمت برمجة KeyDown في الأصل ؟ إعتبر DI نفسه ولكن الكود ضاهر لديك