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

مشاهدة النسخة كاملة : الدرس الثامن : Direct Input لتعامل مع المدخلات بشكل أفضل



PRG of RPG
26-02-2003, 12:48 AM
الدرس الثامن : Direct Input لتعامل مع المدخلات بشكل أفضل

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

السلام عليكم...

الطريقة KeyDown والتي نستخدمها حالياً مملة وغير عملية

لذا خطرت لي فكرة استخدام Direct Input سواءاً عملنا على Direct Graphics أم لا

وحالياً نحن لا نعرف شيئاً عن DX لذا لن أشرح الأكواد فهي للحفظ (أو النسخ) في الوقت الحالي

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

حسناً .. مالذي سنفعله الان

أولاً نربط visual Basic بالمكتبة directX7
إختر Project ثم References ثم DirectX7

ثانياً :

فقط ستضيف موديل وتنسخ فيه الكود التالي :



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



مع ملاحظة أن الفورم هنا هي Form1

وفي الحدث Load ضع هذا الكود :



If DI_Init = False Then
MsgBox "خطاء في التعرف على لوحة المفاتيح", vbExclamation
End
End If


هذه الدالة تقوم بتشغيل Direct Input و إختبارها وعندما تفشل تخبرك بذلك

والان إحفظ المشروع بإسم التطبيق (8 - 1)

اضف Timer واجعل ال interval = 1

كيف سنعرف الزر المضغوط من الكيبورد ؟؟

داخل Timer1
نتكب الكود التالي


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 "لقد ضغت الزر الأسفل"



diDEV.GetDeviceStateKeyboard di_KeyBoard
هذا الأمر يقوم بتخزين رقم الزر المضغوط

حمل التطبيق (8 - 1 ) لكي ترى النتيجة
تجده في موقعي في قسم الدروس

ملاحظة هذه الأكواد مأخوذة من الموقع :
http://www.dx4arab.com/dx_lesson_di_01.htm

تحياتي :)