بسم الله الرحمن الرحيم ...
إخواني الأفاضل..
لقد بحثت كثيرا عن هذا الموضوع وعن طرق عرضه على شبكة المنتديات ..إلا أنني لم أجد الكثير من المعلومات حول هذا الموضوع ...وقد عملت عليه لمدة أكثر من عشر سنوات حتى توصلت بإذن الله إلى خوارزمية صحيحة تمكن المستخدم من التحكم ببرنامج أتوكاد كاملا من خلال لغة فجوال 6 .. وقررت بحول الله نشر الموضوع في منتداكم الكريم وبعض المنتديات البرمجية الأخرى حرصا غلى وصول المعلومة بسهولة ولكي تعم الفائدة على الجميع ...
أرجو من الأخوة الأفاضل ..تقبل موضوعي وبيان طرح هذا الموضوع سابقا وهل هذا مكانه الصحيح ..وأرجو التفاعل معي من خلال أي استفسار أو تصحيح أو فكرة ترونها مناسبة ...ولكم جزيل الشكر
بحول الله نبدأ بالدرس الأول ....
الدرس الأول
•افتح مشروع فجوال بيزك جديد يحوي إطاراً واحداً Form 1 وموديول واحد Module1 وخزنه في أي مكان تختاره وسمه VBcad .
•حيث سنعتمد في دروسنا القادمة على تطوير هذا المثال خطوة بخطوة ليكون شاملاً بإذن الله .
•الآن قم بعمل زر Command1 وأضفه للفورم وقم بتغيير خاصية caption ليصبح (Open New Drawing) . وقم بعمل زر Command2 وأضفه للفورم وقم بتغيير خاصية caption ليصبح (Close New Drawing ) وقم بعمل زر Command3 وأضفه للفورم وقم بتغيير خاصية caption ليصبح (Exit) .
•يجب الآن تحميل مكتبة كائن الأوتوكاد ضمن المشروع ونقوم بعمل ذلك من قائمة Project نختار References ، ثم نبحث في مربع الحوار الذي يظهر لدينا عن مكتبة الأتوكاد ذات الإصدار المرتبط بالنسخة المحملة على جهازك (2000-2004-2007-2009....) ونفعل هذا الخيار Autocad 2009 Type Library ثم موافق .
•نفتح صفحة الموديول Module1 ونكتب السطر التالي :
Public Acadapp As AcadApplication
حيث Acadapp متحول تم تعريفه ليمثل تطبيق أو كائن الأتوكاد ...أي أن هذا المتحول وكأنه برنامج الأتوكاد نفسه سنتعامل مع الأتوكاد من خلاله (وإن كان التعبير غير دقيق).
•الآن في حدث النقر Click على زر Command1 (Open New Drawing) نكتب السطر التالي :
Private Sub Command1_Click()
Set Acadapp = CreateObject("AutoCAD.Application.17")
Acadapp.Documents.Add
Acadapp.Visible = True
Acadapp.WindowState = acMax
End Subالشرح :
-نقوم أولا بفتح تطبيق أو كائن أتوكاد (Object) من خلال وظيفة CreateObject وإسناد هذا الكائن إلى المتحول Acadapp من خلال وظيفة Set . وهنا أصبح المتحول Acadapp يمثل التطبيق المفتوح وسنتعامل مع التطبيق أو الكائن من خلاله . وهنا نلاحظ الجملة "AutoCAD.Application.17" وهي لنسخ الكاد بعد 2004 أما قبل 2004 نكتب "AutoCAD.Application.16"
-من خلال هذا المتحول (الذي سنتعامل معه وكأنه تطبيق الأتوكاد ) نقوم بفتح ملف جديد من خلال السطر
Acadapp.Documents.Add
-نقوم بعد ذلك بجعل تطبيق الأتوكاد ظاهراً على الشاشة من خلال
Acadapp.Visible = True
-يمكن التحكم بنافذة برنامج الأتوكاد من خلال :
Acadapp.WindowState = acMax
الآن إحفظ العمل وشغل البرنامج واضغط زر (Open New Drawing) ولاحظ النتيجة .
ولكن :
ماذا لو كان برنامج الأتوكاد مفتوحاً عند تشغيل البرنامج ؟
عندها سيقوم بتشغيل برنامج الأتوكاد مرة ثانية ... هنا نستطيع اختبار كون أتوكاد مفتوحأ أم لا كما يلي :
سنعدل الكود السابق بشكل كامل ليصبح على الشكل :
Private Sub Command1_Click()
On Error Resume Next
Set Acadapp = GetObject(, "AutoCAD.Application.17")
Acadapp.Documents.Add
Acadapp.Visible = True
Acadapp.WindowState = acMax
If Err.Number <> 0 Then
Set Acadapp = CreateObject("AutoCAD.Application.17")
Acadapp.Documents.Add
Acadapp.Visible = True
Acadapp.WindowState = acMax
Err.Clear
End If
End Subشرح :
نقوم أولاً باختبار كون أتوكاد مفتوحاً أو لا من خلال وظيفة GetObject وإسناد التطبيق المفتوح إلى المتحول Acadapp من خلال وظيفة set . لو كان أتوكاد غير مفتوحأ سنحصل على خطأ Error .
نختبر قيمة الخطأ فإذا كانت مختلفة عن الصفر معنى ذلك وقوع خطأ وهو كون التطبيق مغلق عندها نستخدم وظيفة CreateObject لفتح التطبيق وغسناده للمتحول acadapp من خلال set
الآن إحفظ العمل وشغل البرنامج واضغط زر (Open New Drawing) ولاحظ النتيجة .
----------------------------------------
ملاحظة: لاحظ أنه في كل استعمال لتعليمة Acadapp.Documents.Add نكون قد فتحنا ملف جديد ..أي أنه يمكن فتح عدة ملفات باستخدام هذه التعليمة إلا أن الملف الأخير يكون هو الفعال ActiveDocument وعند إرسال أي أمر إلى البرنامج سيتم التعامل مع هذا الملف .
كيف نغلق ملف أتوكاد وننهي البرنامج ؟
قم بكتابة الكود التالي في حدث النقر على زر Close New Drawing على الشكل :
Private Sub Command2_Click()
Acadapp.ActiveDocument.Close (False)
Acadapp.Quit
Set Acadapp = Nothing
End Subالشرح :
- السطر الأول إغلاق الملف الحالي(الفعال) باستخدام Close ولاحظ كتابة كلمة False وهي تعني أغلق الملف بدون حفظ التغييرات (فمثلا لو قمت بإجراء تعديلات على الملف الرسومي وقمت بمحاولة الإغلاق بدون كلمة false ستعترضك رسالة للسؤال هل تريد الحفظ أم لا ).
- نقوم بعد ذلك بإنهاء البرنامج بتعليمة Quit .
- نفرغ المتحول Acadapp من ارتباطه بكائن الأتوكاد من خلال إسناد Nothing إليه من خلال وظيفة Set .
لكن ماذا لو أردنا إغلاق الملف الحالي وحفظ التغييرات ؟
بما أنه قد قمنا بفتح ملف جديد فارغ فإذا أردنا حفظه عند إغلاقه يجب استخدام SaveAs وسنشرح ذلك كما يلي :
- قم بعمل زر Command4 وأضفه للفورم وقم بتغيير خاصية caption ليصبح (SaveAs) .
- في حدث النقر على الزر Command4 نكتب :
Private Sub Command4_Click()
Dim Path0 As String
Path0 = "D:/VBcad.dwg"
Acadapp.ActiveDocument.SaveAs Path0, ac2009_dwg
End Subلقد قمنا بعمل نسخة عن الملف الحالي باستخدام الأمر SaveAs حيث يمثل Path0 إسم ومسار الملف كاملاً و ac2007_dwg يدل على حفظ الملف بصيغة 2009 كملف رسومي (يمكن مثلا حفظه 2004 ويمكن حفظه بتنسيق dxf ) .
ماذا لو أردنا فتح ملف رسومي موجود ؟
- قم بعمل زر Command5 وأضفه للفورم وقم بتغيير خاصية caption ليصبح (OpenExsistDrwing) .
- في حدث النقر على الزر Command5 نكتب :
Private Sub Command5_Click()
On Error Resume Next
Set Acadapp = GetObject(, "AutoCAD.Application.17")
Path0 = "D:/VBcad.dwg"
Acadapp.Documents.Open Path0
Acadapp.Visible = True
Acadapp.WindowState = acMax
If Err.Number <> 0 Then
Set Acadapp = CreateObject("AutoCAD.Application.17")
Path0 = "D:/VBcad.dwg"
Acadapp.Documents.Open Path0
Acadapp.Visible = True
Acadapp.WindowState = acMax
Err.Clear
End If
End Subلاحظ أننا نقوم بفتح الملف المخزن سابقا من خلال تعليمة Open حيث نكتب بعها مسار الملف كاملا Path0 .
ماذا لو أردنا حفظ التغييرات في هذا الملف ؟
- قم بعمل زر Command6 وأضفه للفورم وقم بتغيير خاصية caption ليصبح (Save Changes) .
- في حدث النقر على الزر Command6 نكتب :
Private Sub Command6_Click()
Acadapp.ActiveDocument.Save
End Subلاحظ استخدام تعليمة Save لحفظ التغييرات على ملف مخزن سابقاً .
--------------------------------------------
بعد هذا نستطيع الآن تجربة ما قمنا بعملة بالترتيب التالي :
1-فتح ملف جديد من خلال النقر على زر Open New Drawing .
2-عمل نسخة عن الملف (حفظ لأول مرة ) بتحديد اسم الملف ومساره كاملاً (تستطيع إظهار رسالة للمستخدم ليسأله فيها عن تحديد المسار واسم الملف ولكن هذا ليس المهم هنا فهدفنا البساطة في الشرح وليس التعقيد ) بالضغط على زر Save As .
3-إغلاق الملف الحالي بالضغط على زر Close New Drawing .
4-فتح الملف الذي قمنا بتخزينه سابقاً بالضغط على زر Open Exists Drawing .
5-حفظ التغييرات عليه بالضغط على زر Save Changes .
6-إغلاق الملف الحالي وإنهاء برنامج أتوكاد بالضغط على زر Close New Drawing .
إلى هنا نكون قد أنهينا الدرس الأول ....
دمتم بخير
م.حسام
-----------------------------------------------------