برمجة أوتوكاد - الدرس الثامن - الحصول على إدخالات من المستخدم 2
النقاط الأساسية
- مقدمة
- شرح مختصر للبرنامج المشروح في هذا الدرس
- إضافة نموذج جديد وإضافة الأدوات إليه
- برمجة الزر (إغلاق)
- برمجة الزر (موافق)
- برمجة الزر (...)
- إضافة الماكرو الأساسي
- خاتمة
مقدمة
تعرفنا في الدرس السابق على بعض طرق الحصول على إدخالات من المستخدم، ثم قمنا بعمل مثال على ذلك، وسنقوم في هذا الدرس بالحصول على إدخالات المستخدم من خلال نماذج VBA وذلك بعمل برنامج يقوم بنفس مهمة المثال في الدرس السابق ولكن بواجهة رسومية.
شرح مختصر للبرنامج
بعد الانتهاء من البرنامج سيبدو بالشكل التالي:
حيث تحوي نافذة البرنامج الأجزاء التالية:
- إطار يحوي ثلاثة خيارات لاختيار اللون.
- إطار يحوي خانات نص لإضافة إحداثيات المركز ونصف القطر بالإضافة إلى زر أوامر يمكننا من الحصول على هذه المعطيات باستخدام الماوس.
- زري موافق وإغلاق.
قم بإدخال إحداثيات المركز ونصف القطر أو انقر الزر (...) ثم اختر المركز ونقطة من الدائرة ثم اضغط زر الإدخال Enter فيتم نقل الإحداثيات تلقائياً إلى مربعات النص الخاصة بها، واختر اللون المطلوب، ثم اضغط موافق.
إضافة نموذج جديد وإضافة الأدوات إليه
قم أولاً بالبدء بمشروع جديد، ثم أضف نموذجاً (نافذة) جديداً كما تعلمت في الدرس الثاني، فتحصل على نموذج فارغ كما في الشكل التالي:
قم بتغيير الخصائص التالية له من نافذة الخصائص (راجع الدرس الأول والثاني لمزيد من التفاصيل حول نافذة الخصائص):
اسم الخاصية | القيمة الجديدة | شرح مبسط حولها |
---|---|---|
Name | frmDraw | تستخدم هذه الخاصية من أجل الدلالة على النموذج في أثناء البرمجة. |
Caption | إدراج الشكل | تستخدم هذه الخاصية لتغيير عنوان النموذج (النافذة). |
Width | 311 | لتعيين عرض النموذج. |
Height | 144 | لتعيين ارتفاع النموذج. |
قم بإدراج أداة إطار Frame ليحوي أدواة اختيار الألوان ثم غير خصائصه كما في الجدول التالي:
اسم الخاصية | القيمة الجديدة | شرح مبسط حولها |
---|---|---|
Name | Frame1 | لا داعي لتغييرها لأننا لن نحتاجها أثناء كتابة البرنامج. |
Caption | اللون | ستخدم هذه الخاصية لتغيير عنوان الإطار. |
Width | 108 | لتعيين عرض الإطار. |
Height | 81 | لتعيين ارتفاع الإطار. |
Left | 192 | لتعيين موقع الزاوية العلوية اليسرى للإطار بالنسبة ليسار الأداة الحاوية له وهي هنا النموذج الأصلي. |
Top | 6 |
لتعيين موقع الزاوية العلوية اليسرى للإطار بالنسبة لقمة الأداة الحاوية له وهي هنا النموذج الأصلي. |
الآن أدرج ثلاثة أدوات اختيار OptionButton ضمن الإطار السابق مستعيناً بالشكل التالي، ثم غير خصائصها مستعيناً بالجدول المرفق:
اسم الخاصية | الأداة الأولى | الأداة الثانية | الأداة الثالثة |
---|---|---|---|
Name | optBlue | optRed | optGreen |
Caption | أزرق | أحمر | أخضر |
Value | True | False | False |
Alignment | 0 | 0 | 0 |
TextAlign | 3 | 3 | 3 |
لاحظ أننا قمنا بإضافة أدوات الاختيار تلك ضمن أداة إطار لسبب مهم جداً وسأوضحه في مثال بسيط (لا علاقة له ببرنامجنا الأصلي):
لنفرض أننا نريد مجموعتين من الخيارات مثلاً:
- اللون: ويحوي الخيارات التالية (أزرق – أحمر – أخضر)
- الشكل: (نقطة – دائرة – مستطيل)
ثم وضعنا هذه الخيارات كما في الشكل التالي:
في هذه الحالة فإننا لن نستطيع اختيار اللون الأحمر مثلاً مع المستطيل، لأنه لا يمكن اختيار إلا زر واحد فقط، فما الحل؟
نقوم بتجميع مجموعة الأزرار المتعلقة ببعضها ضمن حاوية خاصة بها (الحاوية قد تكون أداة إطار Frame أو أداة صورة Picture) كما في الشكل التالي:
نعود للموضوع الأصلي.
الآن أدرج إطاراً آخراً وضع فيه ثلاث أدوات عنوان وثلاث أدوات نص وأداة زر أوامر واستعن بالشكل التالي لمعرفة مكان توضعها، ثم غير خصائصها كما في الجداول المرفقة:
اسم الخاصية | أداة العنوان الأولى | أداة العنوان الثانية | أداة العنوان الثالثة |
---|---|---|---|
Caption | X | Y | R |
AutoSize | True | True | True |
اسم الخاصية | أداة النص الأولى | أداة النص الثانية | أداة النص الثالثة |
---|---|---|---|
Name | txtX | txtY | txtR |
Text | (فارغ) | (فارغ) | (فارغ) |
TextAlign | 1 | 1 | 1 |
أما بالنسبة لأداة زر الأوامر فغير الخصائص التالية له:
اسم الخاصية | القيمة الجديدة | شرح مبسط حولها |
---|---|---|
Name | cmdPointer | تستخدم هذه الخاصية من أجل الدلالة على زر الأوامر في أثناء البرمجة. |
Caption | ... | تستخدم هذه الخاصية لتغيير عنوان زر الأوامر. |
Width | 18 | لتعيين عرض الزر. |
Height | 57 | لتعيين ارتفاع الزر. |
الآن أضف زري أوامر آخرين وضعهما على النافذة كما هو مبين في الشكل ثم غير خصائصهما كما في الجدول المرفق:
اسم الخاصية | الزر الأول | الزر الثاني |
---|---|---|
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.
خاتمة
تعلمت في هذا الدرس كيفية الحصول على إدخالات المستخدم من خلال واجهة تعامل سهلة الاستخدام، وكذلك تعلمت كيفية تخصيص أوتوكاد عن طريق إضافة نوافذ جديدة إليه.
هاتف: +963-31-2220008
جوال: +963-999-824193
سوريا - حمص