این پروژه با زبان برنامه نویسی سی شارپ نوشته شده است.
توضیح :
اساس کار این برنامه بدین صورت می باشد که یک Image بررروی صفحه نقش کاغذ نقاشی را بازی می کند و نقاشی بر روی آن صورت می گیرد. انجام این عملیات به صورت زیر است:
در رویداد کلیک Image کد مراحل زیر را طی می کند:
· ابتدا چک می شود که کاربر چه عملیاتی را می خواهد انجام بدهد. عملیات انتخابی در متغیر action ذخیره شده است. عملیات انتخابی موقعی تغییر می کند که کاربر روی دکمه های زیر کاغذ نقاشی کلید کند. مثلا اگر کاربر روی علامت مربع کلیک کند، متغیر action برابر با شروع مربع می شود. حال اگر روی کاغذ نقاشی کلیکی از طرف کاربر صورت بگیرد ابتدا چک می شود که کدام دکمه موس فشرده شده است و سپس اگر دکمه سمت چپ کلیک شده باشد کد زیر اجرا می شود:
start_pnt = new Point(e.X, e.Y);
action = "عرض مربع";
break;
در این کد مختصات نقطه کلیک شده در متغیر start_pnt ذخیره می شود و مقدار متغیر action برابر با عرض مربع می شود و با دستور break از switch خارج می شود.
همچنین با توجه به اینکه موس در حال حرکت است رویداد MouseMove اجرا می شود:
همانطور که مشاهده می شود در این کد مقدار Image کاغذ نقاشی برابر با bmp_image که در حقیقت همان بیت مپی است که با فشردن کلید فایل جدید با کد زیر ایجاد شده است:
سپس شی g که از نوع گرافیک می باشد به اندازه این بیت مپ با رنگ سفید پر می شود. حال تا موقعی که کاربر کلیک نکرده خطی رسم می شود.با کلیک دیگر کاربر روی کاغذ نقاشی دوباره برنامه وارد switch می شود و با توجه به مقدار action وارد کد زیر می شود:
start_pnt = new Point(e.X, e.Y);
action = "طول مربع";
break;
دوباره نقطه کلیک شده در متغیر start_pnt ذخیره می شود و action به طول مربع تغییر پیدا می کند، حال دوباره با تکان دادن موس، رویداد OnMouseMove با مقدار action =طول مربع اجرا می شود:
linearBr = new LinearGradientBrush(new Rectangle(0, 0, bmp_image.Width, bmp_image.Height),
front_def_color.BackColor, front_def_color.BackColor, LinearGradientMode.BackwardDiagonal);
temp_g3.FillRectangle(linearBr, new Rectangle(start_pnt_X, start_pnt_Y, width, height)); }حال مقدار متغیر fill چک می شود. این متغیر برای توپر بودن شکل کشیده شده در نظر گرفته شده است. در با کلیک برروی شکل دایره توپر مقدار true می گیرد و با کلیک برروی دایره توخالی مقدار این متغیر false می شود. اگر این مقدار true باشد وارد شرط می شویم. در این شرط مربعی با استفاده از رنگ انتخاب شده و همچنین مقادیری که هنگام کلیک کردن در متغیرهای مربوط ثبت می شد کشیده می شود. تمامی مشخصات رنگ و اندازه قلم در رویداد Onclick شکل های روی صفحه تغییر می کند.
قسمت دوم برنامه وقتی است که کاربر قصد اضافه کردن متن را به نقاشی دارد. این کار با استفاده از فرم جدیدی به شکل زیر صورت می پذیرد. کد فرم به صورت زیر است:
دکمه تغییر قلم، با نشان دادن دیالوگ انتخاب فونت از کاربر فوت جدیدی را درخواست می کند و این فونت را به جعبه متن موجود برروی فرم اختصاص می دهد.
با زدن دکمه تایید متن داریم:
Main f = this.Tag as Main;
f.font = fontDialog1.Font;
f.text = textBox1.Text;
Close();
شی f از کلاس فرم اصلی ساخته می شود. سپس فونت انتخاب شده و همچنین نوشته به شی f احتصاص می یابد. با دستور Close فرم حاضر بسته می شود. حال با تغییر موس رویداد Onmousemove برانگیخته می شود با مقدار متغیر action برابر با متن. وارد کد زیر می شویم:
linearBr = new LinearGradientBrush(new Rectangle(0, 0, (int)size.Width, (int)size.Height),
Color.FromArgb(147, front_def_color.BackColor), Color.FromArgb(147, front_def_color.BackColor),
LinearGradientMode.BackwardDiagonal);
temp_g0.DrawString(text, font, linearBr, e.X, e.Y); pictureBox1.Image = temp_bmp0;در کدزیر مقدار نوشته موجود در فرم قبلی بروی کاغذ نقاشی و در جایی که موس قرار دارد کشیده می شود. دوباره با حرکت موس این تابع اجرا شده و کاغذ نقاشی دوباره نقاشی که تا حالا در متغیر bmp_image ذخیره شده بود را برروی خود رسم می کند. یعنی نوشته با حرکت موس تنها برروی نشانگر موس جابجا می شود و برروی صفحه به طور دائم نقش نمی بندد.
حال با کلیک برروی کاغذ نقاشی این نوشته در جایی که کلیک انجام شده است نقش می بندد:
pictureBox1.Image = bmp_image;
linearBr = new LinearGradientBrush(new Rectangle(0, 0, bmp_image.Width, bmp_image.Height), front_def_color.BackColor, front_def_color.BackColor, LinearGradientMode.BackwardDiagonal);
g.DrawString(text, font, linearBr, e.X, e.Y);
پروژه برنامه نقاشی با زبان سی شارپ