تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
سؤال وجواب - الأسبوع الأول - كيف أقوم برسم بعض الأشكال الهندسية
#1
كاتب الموضوع : أحمد جمال

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

السؤال :
كيف أقوم برسم بعض الأشكال على الفورم ؟

الإجابة :
قبل البداية معظم الأوامر المستخدمة في عمليات الرسم تقع ضمن هذه الفئة :
System.Drawing
لذا قم بعمل Import لهذه الفئة في أول البرنامج .

الخطوة الثانية هي إنشاء كائن الرسم من نوع Graphics ، ولكن لا يمكنك انشاءه مباشرة بل لا بد من استخدامه من مكان آخر ، بالشكل التالي مثلاً :


كود :
Dim myGraphic As Graphics = Form1.CreateGraphics()
أو استخدام PaintEventArgs في حدث Form1_Paint بالشكل التالي مثلاً :


كود :
Dim myGraphic As Graphics = e.Graphics
هناك نقطة أخرى وهي نقطة Pen وهو القلم المستخدم في عملية الرسم ويمكن استخدامه من خلال اللون فقط كما في الأمثلة التالية ، وله خصائص أخرى سنتطرق لها بعد الانتهاء من هذا الجزء .
الخطوة الثالثة هي استخدام أحد الطرق في Graphics ، فمثلاً لرسم خط مستقيم :


كود :
myGraphic.DrawLine(Pens.Blue, 20, 20, 100, 100)
ولرسم مستطيل مثلاً :


كود :
myGraphic.DrawRectangle(Pens.Blue, New Rectangle(20, 20, 100, 100))

وبالنسبة لرسم المنحنيات المعقدة يمكننا استخدام الطريقة DrawBezier() على سبيل المثال ، حيث نعطيه مجموعة من النقاط يقوم على أساسها برسم منحنى بالشكل التالي مثلاً :


كود :
myGraphic.DrawBezier(Pens.Blue, 10, 20, 50, 80, 10, 80, 100, 50)
والآن نعود مرة أخرى إلى القلم Pen وننشئ Object منه بالشكل التالي .


كود :
Dim myPen As New Pen(Color.blue, 2)
حيث اننا في الخطوة السابقة انشأنا Pen بلون أزرق وبخط عرض 2 ، ويمكننا بعد ذلك استخدامه مباشرة بالشكل التالي مثلاً :


كود :
myGraphic.DrawLine(myPen, 20, 20, 100, 100)
ليس هذا فقط ، بل هناك مجموعة كبيرة من خصائص القلم مثل نوع الخط DashStyle والتي تتحكم في كون الخط متصل ، نقط ، متقطع ، وهكذا ...
الخاصية StartCap تحدد شكل البداية والنهاية للخط ، الأمر التالي يجعلها على شكل سهم مثلاً :

myPen.StartCap = LineCap.ArrowAnchor

طريقة أخرى للرسم وهي استخدام GraphicsPath لرسم أشكال معقدة ، ويمكن استخدامها بالشكل التالي مثلاً - مثال لرسم خطين في نفس الخطوة ، ويستخدم في رسم مثلث على سبيل المثال :


كود :
Dim myGraphicPath As New GraphicsPath()
myGraphicPath.StartFigure()

myPath.AddLine(10, 10, 30, 60)
myPath.AddLine(30, 60, 60, 10)
myPath.AddLine(60, 10, 10, 10)

myGraphicPath.CloseFigure()
وبعد ذلك نقوم برسم المسار كاملاً في خطوة واحدة اعتماداً على الكائن Graphics بالشكل التالي :


كود :
myGraphic.DrawPath(myPen, myGraphicPath)
والآن سننتقل إلى الكائن Brush والذي يستخدم في التلوين والتعبئة ، لإنشاء فرشة مثلاً نستخدم الأمر التالي .


كود :
Dim myBrush As New SolidBrush(Color.Yellow)
أو لاستخدام تعبئة غير مصمتة Not Solid نستخدم HatchBrush بالشكل التالي :


كود :
Dim myBrush As New HatchBrush(HatchStyle.BackwardDiagonal _
, Color.Green, Color.White)
ونستخدمها الفرشة التي أنشأناها في تلوين الأشكال بعد ذلك بالشكل التالي :


كود :
myGraphic.FillEllipse(myBrush, 20, 20, 100, 100)
وعموماً فما زال هناك الكثير والكثير في رسوميات .net والخاصة بالتدرجات ، التعامل مع الصور ، التحريك والقلب والدوران للأشكال ، النصوص وخلافه ، ولكنها جميعاً تقع تحت ما يسمى بـ GDI+ .

*** وقبل النهاية أنوه إلى أنني استفدت الكثير من كتاب الأستاذ تركي العسيري (نحو برمجة كائنية التوجه .net ) .

في ختام هذا الجزء الأول ، أنا في انتظار السؤال الذي ستتم الاجابة عليه الأسبوع المقبل والذي سيتم اختياره بناء على رغبة الأعضاء ، في انتظار المقترحات .

والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
}}}}
تم الشكر بواسطة:
#2
كاتب المشاركة : Samarah

عذرا اخ حمد اتوقع ان الكود
كود :
myGraphic.DrawRectangle(Pens.Blue, New Rectangle(20, 20, 100, 100))
يقوم برسم مربع وليس مستطيل, لرسم المستطيل نكتب التالي
كود :
myGraphic.DrawRectangle(Pens.Blue, New Rectangle(20, 30, 100, 150))
وشكرا لك
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مقال- كيفية الاستغناء عن الداتا بيز التقليدية في برامجنا – ألجزء الأول RaggiTech 1 1,245 06-10-12, 12:23 AM
آخر رد: RaggiTech
  مقال- Custom EventHandler & Classes - الجزء الأول RaggiTech 6 648 05-10-12, 11:48 AM
آخر رد: RaggiTech
  مقال- أفكار في الجرافكس ....... الجزء الأول RaggiTech 3 693 05-10-12, 11:22 AM
آخر رد: RaggiTech
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - الجزء الأول RaggiTech 1 1,041 02-10-12, 03:06 PM
آخر رد: RaggiTech
  التعامل مع Registry - الجزء الأول ( شرح الدوال ) RaggiTech 1 1,335 02-10-12, 10:37 AM
آخر رد: RaggiTech
  إكتشاف الأخطاء والمشكلات ومعالجتها- الجزء الأول RaggiTech 0 700 02-10-12, 01:06 AM
آخر رد: RaggiTech
  (الدرس الأول) شرح الـ console الادخال - الإخراج - المتغيــرات 3 في 1 RaggiTech 0 472 01-10-12, 03:07 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم