منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : سؤال وجواب - الأسبوع الأول - كيف أقوم برسم بعض الأشكال الهندسية
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
كاتب الموضوع : أحمد جمال

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

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

الإجابة :
قبل البداية معظم الأوامر المستخدمة في عمليات الرسم تقع ضمن هذه الفئة :
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 ) .

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

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

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