JWDStructure

دروس VBA AutoCAD 

برمجة أوتوكاد - الدرس الثامن - الحصول على إدخالات من المستخدم 2

النقاط الأساسية

  • مقدمة
  • شرح مختصر للبرنامج المشروح في هذا الدرس
  • إضافة نموذج جديد وإضافة الأدوات إليه
  • برمجة الزر (إغلاق)
  • برمجة الزر (موافق)
  • برمجة الزر (...)
  • إضافة الماكرو الأساسي
  • خاتمة

مقدمة

تعرفنا في الدرس السابق على بعض طرق الحصول على إدخالات من المستخدم، ثم قمنا بعمل مثال على ذلك، وسنقوم في هذا الدرس بالحصول على إدخالات المستخدم من خلال نماذج VBA وذلك بعمل برنامج يقوم بنفس مهمة المثال في الدرس السابق ولكن بواجهة رسومية.

شرح مختصر للبرنامج

بعد الانتهاء من البرنامج سيبدو بالشكل التالي:

الشكل (8-1)
الشكل (8-1):نافذة البرنامج النهائية

حيث تحوي نافذة البرنامج الأجزاء التالية:

  • إطار يحوي ثلاثة خيارات لاختيار اللون.
  • إطار يحوي خانات نص لإضافة إحداثيات المركز ونصف القطر بالإضافة إلى زر أوامر يمكننا من الحصول على هذه المعطيات باستخدام الماوس.
  • زري موافق وإغلاق.

قم بإدخال إحداثيات المركز ونصف القطر أو انقر الزر (...) ثم اختر المركز ونقطة من الدائرة ثم اضغط زر الإدخال Enter فيتم نقل الإحداثيات تلقائياً إلى مربعات النص الخاصة بها، واختر اللون المطلوب، ثم اضغط موافق.

إضافة نموذج جديد وإضافة الأدوات إليه

قم أولاً بالبدء بمشروع جديد، ثم أضف نموذجاً (نافذة) جديداً كما تعلمت في الدرس الثاني، فتحصل على نموذج فارغ كما في الشكل التالي:

الشكل (8-2)
الشكل (8-2): نموذج فارغ

قم بتغيير الخصائص التالية له من نافذة الخصائص (راجع الدرس الأول والثاني لمزيد من التفاصيل حول نافذة الخصائص):

اسم الخاصية القيمة الجديدة شرح مبسط حولها
Name frmDraw تستخدم هذه الخاصية من أجل الدلالة على النموذج في أثناء البرمجة.
Caption إدراج الشكل تستخدم هذه الخاصية لتغيير عنوان النموذج (النافذة).
Width 311 لتعيين عرض النموذج.
Height 144 لتعيين ارتفاع النموذج.

قم بإدراج أداة إطار Frame ليحوي أدواة اختيار الألوان ثم غير خصائصه كما في الجدول التالي:

اسم الخاصية القيمة الجديدة شرح مبسط حولها
Name Frame1 لا داعي لتغييرها لأننا لن نحتاجها أثناء كتابة البرنامج.
Caption اللون ستخدم هذه الخاصية لتغيير عنوان الإطار.
Width 108 لتعيين عرض الإطار.
Height 81 لتعيين ارتفاع الإطار.
Left 192 لتعيين موقع الزاوية العلوية اليسرى للإطار بالنسبة ليسار الأداة الحاوية له وهي هنا النموذج الأصلي.
Top 6

لتعيين موقع الزاوية العلوية اليسرى للإطار بالنسبة لقمة الأداة الحاوية له وهي هنا النموذج الأصلي.

الآن أدرج ثلاثة أدوات اختيار OptionButton ضمن الإطار السابق مستعيناً بالشكل التالي، ثم غير خصائصها مستعيناً بالجدول المرفق:

الشكل (8-3)
الشكل (8-3): النموذج بعد إضافة الإطار وأدوات الاختيار
اسم الخاصية الأداة الأولى الأداة الثانية الأداة الثالثة
Name optBlue optRed optGreen
Caption أزرق أحمر أخضر
Value True False False
Alignment 0 0 0
TextAlign 3 3 3

لاحظ أننا قمنا بإضافة أدوات الاختيار تلك ضمن أداة إطار لسبب مهم جداً وسأوضحه في مثال بسيط (لا علاقة له ببرنامجنا الأصلي):

لنفرض أننا نريد مجموعتين من الخيارات مثلاً:

  • اللون: ويحوي الخيارات التالية (أزرق – أحمر – أخضر)
  • الشكل: (نقطة – دائرة – مستطيل)

ثم وضعنا هذه الخيارات كما في الشكل التالي:

الشكل (8-4)
الشكل (8-4): نموذج يحوي عناصر اختيار غير مجمعة

في هذه الحالة فإننا لن نستطيع اختيار اللون الأحمر مثلاً مع المستطيل، لأنه لا يمكن اختيار إلا زر واحد فقط، فما الحل؟

نقوم بتجميع مجموعة الأزرار المتعلقة ببعضها ضمن حاوية خاصة بها (الحاوية قد تكون أداة إطار Frame أو أداة صورة Picture) كما في الشكل التالي:

الشكل (8-5)
الشكل (8-5): نموذج يحوي عناصر اختيار مجمعة

نعود للموضوع الأصلي.

الآن أدرج إطاراً آخراً وضع فيه ثلاث أدوات عنوان وثلاث أدوات نص وأداة زر أوامر واستعن بالشكل التالي لمعرفة مكان توضعها، ثم غير خصائصها كما في الجداول المرفقة:

الشكل (8-6)
الشكل (8-6): النموذج بعد إضافة إطار (إحداثيات المركز ونصف القطر)
اسم الخاصية أداة العنوان الأولى أداة العنوان الثانية أداة العنوان الثالثة
Caption X Y R
AutoSize True True True
اسم الخاصية أداة النص الأولى أداة النص الثانية أداة النص الثالثة
Name txtX txtY txtR
Text (فارغ) (فارغ) (فارغ)
TextAlign 1 1 1

أما بالنسبة لأداة زر الأوامر فغير الخصائص التالية له:

اسم الخاصية القيمة الجديدة شرح مبسط حولها
Name cmdPointer تستخدم هذه الخاصية من أجل الدلالة على زر الأوامر في أثناء البرمجة.
Caption ... تستخدم هذه الخاصية لتغيير عنوان زر الأوامر.
Width 18 لتعيين عرض الزر.
Height 57 لتعيين ارتفاع الزر.

الآن أضف زري أوامر آخرين وضعهما على النافذة كما هو مبين في الشكل ثم غير خصائصهما كما في الجدول المرفق:

الشكل (8-7)
الشكل (8-7): النموذج بعد الانتهاء من تصميمه
اسم الخاصية الزر الأول الزر الثاني
Name cmdOK cmdClose
Caption موافق إغلاق

الآن أصبحت النافذة جاهزة للبدء بالبرمجة، وحقيقة لدينا ثلاثة برامج فرعية تتوضع خلف الأزرار الثلاثة الموجودة على النافذة.

برمجة الزر (إغلاق)

انقر نقراً مزدوجاً على الزر (إغلاق) فتظهر نافذة إدخال البرنامج وتحوي السطرين التاليين:

Private Sub cmdClose_Click()

End Sub

وقد تم شرحهما في درس سابق.

الآن أضف السطر التالي بين السطرين السابقين ليصبح الكود كما يلي:

Private Sub cmdClose_Click()
    Unload Me
End Sub

إن السطر الذي تمت إضافته يؤدي إلى إغلاق النافذة وقد تم وضعه ضمن الحدث Click للزر cmdClose.

برمجة الزر (موافق)

يشبه البرنامج هنا البرنامج الذي تم استعراضه في الدرس السابق مع الاختلافات التالية:

  • يتم الحصول على إحداثيات المركز ونصف القطر من صناديق النص وليس من بيئة أوتوكاد.
  • يتم الحصول على اللون من أدوات الاختيار وليس من سطر أوامر أوتوكاد.

ونص البرنامج كما يلي (راجع الملاحظات في نص البرنامج لمزيد من التوضيح):

Private Sub cmdOk_Click()
    'تعريف بعض المتحولات
    Dim clr As Integer
    Dim pnt(0 To 2) As Double, r As Double
    Dim CircleObj As AcadCircle, LineObj1 As AcadLine, LineObj2 As AcadLine
    Dim pnt1(0 To 2) As Double, pnt2(0 To 2) As Double

    'الحصول على اللون من أدوات الاختيار
    If optBlue.Value = True Then
        clr = acBlue
    ElseIf optRed.Value = True Then
        clr = acRed
    ElseIf optGreen.Value = True Then
        clr = acGreen
    End If

    'الحصول على الاحداثيات ونصف القطر
    pnt(0) = Val(txtX.Value)
    pnt(1) = Val(txtY.Value)
    r = Val(txtR.Value)

    'رسم الشكل
    With ThisDrawing.ModelSpace
        Set CircleObj = .AddCircle(pnt, r)
        CircleObj.Color = clr

        pnt1(0) = pnt(0) - r: pnt1(1) = pnt(1)
        pnt2(0) = pnt(0) + r: pnt2(1) = pnt(1)
        Set LineObj1 = .AddLine(pnt1, pnt2)
        LineObj1.Color = clr

        pnt1(0) = pnt(0): pnt1(1) = pnt(1) - r
        pnt2(0) = pnt(0): pnt2(1) = pnt(1) + r
        Set LineObj2 = .AddLine(pnt1, pnt2)
        LineObj2.Color = clr
    End With
    Unload Me
End Sub

برمجة الزر (...)

مهمة هذا الزر هي مساعدتنا في الحصول على إحداثيات المركز ونصف القطر عن طريق الماوس والاختيار من بيئة أوتوكاد بدلاً من كتابة القيم في مربعات النص.

إن البرنامج المتوضع خلف هذا الزر هو كالتالي وهو يشبه البرنامج المشروح في الدرس السابق:

Private Sub cmdPointer_Click()
    Dim pnt As Variant, r As Double

    Me.Hide
    With ThisDrawing.Utility
        pnt = .GetPoint(, vbCrLf & "Specify the center of the shape : ")
        r = .GetDistance(pnt, "Specify the radius : ")
    End With
    txtX.Value = pnt(0)
    txtY.Value = pnt(1)
    txtR.Value = r
    Me.Show
End Sub

إضافة الماكرو الأساسي

الآن سنقوم بإضافة الماكرو الأساسي الذي سيقوم بإظهار النافذة السابقة والذي سيظهر ضمن قائمة الماكروات.

أضف أولاً وحدة نمطية جديدة واكتب فيها الماكرو التالي:

Sub DrawCircleWithLines()
    frmDraw.Show
End Sub

لتشغيل البرنامج اضغط ALT + F8 فتظهر نافذة الماكروات، نفذ الماكرو DrawCircleWithLines.

خاتمة

تعلمت في هذا الدرس كيفية الحصول على إدخالات المستخدم من خلال واجهة تعامل سهلة الاستخدام، وكذلك تعلمت كيفية تخصيص أوتوكاد عن طريق إضافة نوافذ جديدة إليه.

تحميل