04-10-12, 09:55 AM
كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .
السؤال :
كيف أقوم برسم بعض الأشكال على الفورم ؟
الإجابة :
قبل البداية معظم الأوامر المستخدمة في عمليات الرسم تقع ضمن هذه الفئة :
System.Drawing
لذا قم بعمل Import لهذه الفئة في أول البرنامج .
الخطوة الثانية هي إنشاء كائن الرسم من نوع Graphics ، ولكن لا يمكنك انشاءه مباشرة بل لا بد من استخدامه من مكان آخر ، بالشكل التالي مثلاً :
أو استخدام PaintEventArgs في حدث Form1_Paint بالشكل التالي مثلاً :
هناك نقطة أخرى وهي نقطة Pen وهو القلم المستخدم في عملية الرسم ويمكن استخدامه من خلال اللون فقط كما في الأمثلة التالية ، وله خصائص أخرى سنتطرق لها بعد الانتهاء من هذا الجزء .
الخطوة الثالثة هي استخدام أحد الطرق في Graphics ، فمثلاً لرسم خط مستقيم :
ولرسم مستطيل مثلاً :
وبالنسبة لرسم المنحنيات المعقدة يمكننا استخدام الطريقة DrawBezier() على سبيل المثال ، حيث نعطيه مجموعة من النقاط يقوم على أساسها برسم منحنى بالشكل التالي مثلاً :
والآن نعود مرة أخرى إلى القلم Pen وننشئ Object منه بالشكل التالي .
حيث اننا في الخطوة السابقة انشأنا Pen بلون أزرق وبخط عرض 2 ، ويمكننا بعد ذلك استخدامه مباشرة بالشكل التالي مثلاً :
ليس هذا فقط ، بل هناك مجموعة كبيرة من خصائص القلم مثل نوع الخط DashStyle والتي تتحكم في كون الخط متصل ، نقط ، متقطع ، وهكذا ...
الخاصية StartCap تحدد شكل البداية والنهاية للخط ، الأمر التالي يجعلها على شكل سهم مثلاً :
myPen.StartCap = LineCap.ArrowAnchor
طريقة أخرى للرسم وهي استخدام GraphicsPath لرسم أشكال معقدة ، ويمكن استخدامها بالشكل التالي مثلاً - مثال لرسم خطين في نفس الخطوة ، ويستخدم في رسم مثلث على سبيل المثال :
وبعد ذلك نقوم برسم المسار كاملاً في خطوة واحدة اعتماداً على الكائن Graphics بالشكل التالي :
والآن سننتقل إلى الكائن Brush والذي يستخدم في التلوين والتعبئة ، لإنشاء فرشة مثلاً نستخدم الأمر التالي .
أو لاستخدام تعبئة غير مصمتة Not Solid نستخدم HatchBrush بالشكل التالي :
ونستخدمها الفرشة التي أنشأناها في تلوين الأشكال بعد ذلك بالشكل التالي :
وعموماً فما زال هناك الكثير والكثير في رسوميات .net والخاصة بالتدرجات ، التعامل مع الصور ، التحريك والقلب والدوران للأشكال ، النصوص وخلافه ، ولكنها جميعاً تقع تحت ما يسمى بـ GDI+ .
*** وقبل النهاية أنوه إلى أنني استفدت الكثير من كتاب الأستاذ تركي العسيري (نحو برمجة كائنية التوجه .net ) .
في ختام هذا الجزء الأول ، أنا في انتظار السؤال الذي ستتم الاجابة عليه الأسبوع المقبل والذي سيتم اختياره بناء على رغبة الأعضاء ، في انتظار المقترحات .
والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
السلام عليكم ورحمة الله وبركاته .
السؤال :
كيف أقوم برسم بعض الأشكال على الفورم ؟
الإجابة :
قبل البداية معظم الأوامر المستخدمة في عمليات الرسم تقع ضمن هذه الفئة :
System.Drawing
لذا قم بعمل Import لهذه الفئة في أول البرنامج .
الخطوة الثانية هي إنشاء كائن الرسم من نوع Graphics ، ولكن لا يمكنك انشاءه مباشرة بل لا بد من استخدامه من مكان آخر ، بالشكل التالي مثلاً :
كود :
Dim myGraphic As Graphics = Form1.CreateGraphics()
كود :
Dim myGraphic As Graphics = e.Graphics
الخطوة الثالثة هي استخدام أحد الطرق في 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)
كود :
Dim myPen As New Pen(Color.blue, 2)
كود :
myGraphic.DrawLine(myPen, 20, 20, 100, 100)
الخاصية 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()
كود :
myGraphic.DrawPath(myPen, myGraphicPath)
كود :
Dim myBrush As New SolidBrush(Color.Yellow)
كود :
Dim myBrush As New HatchBrush(HatchStyle.BackwardDiagonal _
, Color.Green, Color.White)
كود :
myGraphic.FillEllipse(myBrush, 20, 20, 100, 100)
*** وقبل النهاية أنوه إلى أنني استفدت الكثير من كتاب الأستاذ تركي العسيري (نحو برمجة كائنية التوجه .net ) .
في ختام هذا الجزء الأول ، أنا في انتظار السؤال الذي ستتم الاجابة عليه الأسبوع المقبل والذي سيتم اختياره بناء على رغبة الأعضاء ، في انتظار المقترحات .
والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .