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
تحياتي :)
بسم الله الرحمن الرحيم
السلام عليكم...
الطريقة 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
تحياتي :)