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

أريد شرح جزئيات بسيطة من هذا الكود وليس الكود كله

مغلق
بدأه moh_mou في 27 يناير 2008 · 3 رد · 1,486 مشاهدة · في DirectX
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أنا حقيقة بتعلم برمجة دايركت أكس عن

Direct Draw

عن طريق ربطها بالفيجوال بيسك فالهمه صدفنى هذا الكود وهو يتكلم عن السطوح الخلفى والرئيسى إلخ

المهم ده الكود

الكود

Option Explicit
Dim Dx As New DirectX7
Dim Dd As DirectDraw7
Dim Ddsd As DDSURFACEDESC2
Dim Primary As DirectDrawSurface7
Dim Back_Buffer As DirectDrawSurface7
Private Sub Command1_Click()
Set Dd = Dx.DirectDrawCreate("")
Dd.SetCooperativeLevel Me.hWnd, DDSCL_EXCLUSIVE Or DDSCL_FULLSCREEN Or DDSCL_ALLOWREBOOT
Dd.SetDisplayMode 800, 600, 16, 0, DDSDM_DEFAULT
Show
With Ddsd
 .lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT
 .ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX
 .lBackBufferCount = 1
End With
Set Primary = Dd.CreateSurface(Ddsd)
Ddsd.ddsCaps.lCaps = DDSCAPS_BACKBUFFER
Set Back_Buffer = Primary.GetAttachedSurface(Ddsd.ddsCaps)
Do
Back_Buffer.setDrawWidth 1
Back_Buffer.SetForeColor RGB(0, 0, 0)
Back_Buffer.SetFillColor RGB(0, 20, 100)
Back_Buffer.DrawBox 0, 0, 800, 600

Primary.Flip Nothing, DDFLIP_WAIT
DoEvents
Loop
End Sub

اللى انا أريد إن أفهمه أولاً

Set Dd = Dx.DirectDrawCreate("")
Dd.SetCooperativeLevel Me.hWnd, DDSCL_EXCLUSIVE Or DDSCL_FULLSCREEN Or DDSCL_ALLOWREBOOT
Dd.SetDisplayMode 800, 600, 16, 0, DDSDM_DEFAULT
Show

أنا عارف أنه هذه الجزئية خاصة بربط الديركت أكس بكرت العرض واللى هو رمزه فارغ

والسطر الثانى

Form وهي 1 Direct Draw تحديد الشاشة الرئيسية التي يستخدمها

وجعله ملئ الشاشة وأن يكون كارت العرض مقتصر فقط على البرنامج

والسماح بأظهار الشاشة end task

اللى انا مش فهمه يعنى ايه DDSCL

التى تم ذكرها أكثر من مرة

أما فى السطر

Dd.SetDisplayMode 800, 600, 16, 0, DDSDM_DEFAULT

أيه فائدة الصفر هنا أنا عارف أنه أول رقمين دقة عرض الشاشة والتانى الألوان وكمان يعنى ايه

DDSDM_DEFAULT

وفى السطر الاخير ما فائدة وضع show

وعندما حذفتها الكود لم يعمل

أما هذا الجزء

With Ddsd
 .lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT
 .ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX
 .lBackBufferCount = 1
End With
Set Primary = Dd.CreateSurface(Ddsd)
Ddsd.ddsCaps.lCaps = DDSCAPS_BACKBUFFER
Set Back_Buffer = Primary.GetAttachedSurface(Ddsd.ddsCaps)

أنا مش فهمه خالص وحاولت أحذف من الكود وأعدل ولكن مفهمتش ياريت حد يفهونى بشئ من التفصيل

أما بقيت الكود أنا فهمه ولكن أريد إن أفهم

Back_Buffer.DrawBox 0, 0, 800, 600

Primary.Flip Nothing, DDFLIP_WAIT
DoEvents
Loop
17.gifالحياة حقنة فصبر عليها 17.gif

Syringe.gif

#2

يا شباب أنا أنتظرت يومين طيب لو فى حاجة مش وضحة فى سؤالى أنا ممكن أكتب بطريقة ابسط من كده :rolleyes:

17.gifالحياة حقنة فصبر عليها 17.gif

Syringe.gif

#3

DDSCL هي اختصار لـ (DirectDraw.SetCooperativeLevel)، باعتبار أنك تستخدم هذا الإجراء، فقد تم تسمية الخيارات الممكن تمريرها له باسمه كي تتضح الأمور لك.

الرقم صفر في سؤالك الثاني يشير إلى تردد العرض (Refresh Rate) وتركه صفراً يتيح لـ DDraw اختيار أول رقم مدعوم في كرت الشاشة ضمن نظام العرض المحدد.

DDSDM_DEFAULT هو مجرد قيمة عامة لا تعني شيئاً بحد ذاتها، يجب أن تقرأ توثيق هذا النداء كي تعرف ماذا يعني وجود هذه القيمة في البارامتر الأخير.

فائدة وضع Show في النهاية لإظهار نافذة البرنامج، لأنه على ما يبدو أنها لا تكون ظاهرة عند إنشائها في بداية برنامجك.

موضوع الكود الذي لم تفهمه، هو كود ضروري جداً لتحديد مواصفات السطح الذي سيتم إظهاره للمستخدم (Primary Surface). فكما ترى في البداية نجهز معلومات السطح في البنية Ddsd، ومن ثم نعطيها للدالة CreateSurface، وفي النهاية نأخذ السطح المخفي الذي نرسم عليه عملياً أثناء إظهار السطح الآخر للمستخدم.

النداء Back_Buffer.DrawBox 0, 0, 800, 600 كما يظهر من اسمه يقوم برسم مربع أسود مصمت بأبعاد 800 بـ 600.

النداء Primary.Flip Nothing, DDFLIP_WAIT يقوم بإظهار ما كنت ترسمه في السطح المخفي إلى المستخدم، ويحول السطح الذي كان يراه المستخدم إلى سطح مخفي (خلفي) لترسم عليه اللقطة القادمة.

النداء DoEvents مشهور في عالم بيسك، حيث أنه يتيح للبرنامج فرصة استقبال رسائل ويندوز ومعالجتها كي تبقى نافذة البرنامج فعالة.

-------

زوريل

وزير العلوم الأعلى لقوات فيجا المتحالفة

ومخطط الهجمات التكنولوجية

قاعدة جمجمة القمر

#4

الف شكر بجد أنت فعلا وزيررررر :rolleyes:

17.gifالحياة حقنة فصبر عليها 17.gif

Syringe.gif

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…