بسم الله الرحمن الرحيم
تحية طيبة لكل زوار هذه المدونة .. بالطبع أغلب المبرمجين تحت Dot Net Framework يعرف ما هي اساسيات تقنية الرسم GDI+ التي تحمل بها العديد من المكتبات الرائعة لتحولك من مبرمج إلى فنان في الرسم ولكن ليس أي رسم هذا رسم عن طريق الكود , وليس للمستخدم أي فكرة عما تعانيه من كتابة كود لرسمك أداة جديدة من أدوات Windows Forms حتى تعرض بالشكل المطلوب ويتمتع هو برفاهية ما يعكسه برنامجك من مظهر ..
في لحظة خطرت ببالي فكرة بسيطة وهي جعل المستخدم يرسم عن طريق برنامجك , يعني برنامج شبيه بذلك المرفق مع الويندوز ((برنامج الرسام)) ..
سأقوم بسرد الطريقة باختصار :
من ضمن أدوات Windows Control توجد أداة اسمها Panel وهي الأفضل للرسم عليها , قمت باستعمالها وجس الحدث Mouse Move و Mouse Down و Mouse Up لاستقبل أوامر المستخدم وبعدها أقوم برسم الخط الذي رسمه المستخدم بحركة الماوس أثناء نقره على زر الماوس الايسر .. اضافة الى التحكم في اللون وعرض الخط..
ويتم ذلك بشكل اكثر وضوح بتخزين جميع النقاط التي قام المستخدم بالمرور عليها في مصفوفة من نوع Point أو PointF حيث تختلف الاخيرة على الأولى انها تقبل قيم كسرية أي من نوع float .. ثم ارسالها إلى كائن الرسم الخاص بنا Graphics سواء كان من Panel أو حتى Bitmap باستدعاء الطريقة أو الاجراء DrawLines الذي يقبل تلك المصفوفة بمعلومية الكائن Pen ذلك الذي يمثل صفات لون و عرض الخط ..
بشكل عملي عن طريق الكود :
تكوين قائمة من نوع PointF
List<PointF> MyPointes = new List<PointF>();
نقوم بقراءة النقاط في الحدث Mouse Move .. مع التأكد من أن تم نقر زر الماوس الأيسر ثم نقوم برسمها كما أسلفت الذكر , ليكون إجراء الماوس موف الخاص بنا كما يلي :
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
MyPoints.Add(new PointF(e.Location.X, e.Location.Y));
Graphics Gr = DrawPanel.CreateGraphics();
Pen MyPen = new Pen(MyColor, LineW);
if (MyPoints.Count > 1)
{
Gr.DrawLines(MyPen, MyPoints.ToArray());
}
}
}
حيث LineW متغير Integer يمثل عرض الخط و MyColor كائن من نوع Color يمثل لون الخط .. هكذا سيتم رسم المسار المطلوب كما في برنامج الرسام تماما .. في نفس الوقت تسطيع تطبيق عملية الرسم أيضا وفي نفس الوقت على كائن من نوع Bitmap وذلك ليسهل عليك عملية تخزين الصورة المرسومة ولكن –وراء الكواليس – ولا ننسى تفريغ قائمة أو مصفوفة النقاط عند الحدث Mouse Up حتى لا يتم رسم الخط الجديد متصلا بالقديم ...
حقيقتا أرغب في التعمق في البرنامج واضافة أوامر أخرى كتلك الموجودة في الرسام من رسم أشكال هندسية إلى تعبئة تلك الاشكال بالألوان ,, و التفنن بإنشاء فرش خاصة مدرجة الألوان ,, ولكن لا يسعفني الوقت لذلك .. فسأترك لك التفكير و التحليلي و التطبيق بداية بهذه الفكرة لتنميها وتنشئ برنامج رسام خاص بك ..
ومن الجدير بالذكر , ان أداة أو كائن Panel يتمتع بخاصية الحضن أي باستطاعته احتضان كائنات أخرى أو Panels أخرى ,, قد تساعدك هذه الخاصية لتبدع أكثر ومن يدري ربما تنافس الفوتوشوب في يوم ما J ..
كل ما استطيع تزويدك به هو مثال مفتوح المصدر –استلطفته - واستغرق مني حوالي نصف ساعة لتطبيق الفكرة المطروحة .. وهذه واجهته:

لتحميل المثال مع الكود من هنا
المثال بلغة VB.Net
في النهاية أتمنى أن ينال هذا الموضوع رضائكم واستحسانكم ..
ونلتقي بإذن الله في مواضيع أخرى ... إلى ذلك الحين تقبلوا مني أطيب التحيات
مهند بندق...