PDA

View Full Version : سوال: رسم مستطیل با استفاده از کلاس روی picturebox و ذخیره آن چطوریه؟؟؟



hasan1500
پنج شنبه 23 خرداد 1392, 01:20 صبح
سلام
من دارم یک پروژه paint رو با استفاده از اصول شی گرایی می نویسم.
تا یه جاهایی از پروژه رو انجام دادم به 2 تا مشکل بر خوردم که از شوال بالا ناشی میشه:
1- هر موقع یک مستطیل می کشم و بعدش از قلمو استفاده می کنم مستطیل از بین میره!
2- موقع ذخیره کردن عکس فقط چیزهایی که با قلمو کشیده شدند ذخیره میشه!

فایل پروژه که با 2010 نوشته شده ضمیمه تاپیک شده. ببینید و خواهشا راهنماییم کنید.:ناراحت:
ممنون

khokhan
پنج شنبه 23 خرداد 1392, 09:33 صبح
سلام
من دارم یک پروِژه paint رو با استفاده از اصول شی گرایی می نویسم.
تا یه جاهایی از پروژه رو انجام دادم به 2 تا مشکل بر خوردم که از شوال بالا ناشی میشه:
1- هر موقع یک مستطیل می کشم و بعدش از قلمو استفاده می کنم مستطیل از بین میره!
2- موقع ذخیره کردن عکس فقط چیزهایی که با قلمو کشیده شدند ذخیره میشه!

فایل پروژه که با 2010 نوشته شده ضمیمه تاپیک شده. ببینید و خواهشا راهنماییم کنید.:ناراحت:
ممنون

.................................................. .........:لبخند:

hasan1500
پنج شنبه 23 خرداد 1392, 12:58 عصر
[QUOTE=khokhan;1792697].................................................. .........:لبخند:[/QUOTE
ممنون
ولی من اینو داشتم
می خواستم اگه میشه یه نگاهی به برنامه ای که خودم نوشتم بندازید ببینید اشکالش کجاست؟؟

a-t-e-f-e-h
پنج شنبه 23 خرداد 1392, 17:23 عصر
سلام
منم دقیقا دارم یه پروژه paint با شی گرایی مینویسم
شکل گرافیکی رو روی فرم ایجاد میکنم ولی Save نمیشه
چطور میشه یه شکل گرافیکی(مثل مستطیل) روی فرم رو save و بعد باز کرد؟؟
اصلا میشه شکلی که روی فرم کشیدم رو Save کرد یا حتما باید picture Box باشه؟!

hasan1500
پنج شنبه 23 خرداد 1392, 19:27 عصر
سلام
منم دقیقا دارم یه پروژه paint با شی گرایی مینویسم
شکل گرافیکی رو روی فرم ایجاد میکنم ولی Save نمیشه
چطور میشه یه شکل گرافیکی(مثل مستطیل) روی فرم رو save و بعد باز کرد؟؟
اصلا میشه شکلی که روی فرم کشیدم رو Save کرد یا حتما باید picture Box باشه؟!

سلام
نکنه تو هم این ترم شی گرا(یداللهی) داشتی؟؟؟؟
اولا به هیچ وجه نمیشه شکل روی فرم روی Save کرد.
دوما حتما باید تویpicture Box یاPanel باشه که picture Box به مراتب راحت تر از panel هست.
سوما: شما تازه اول کاری . من تونستم از یه روش های دیگه این کار رو انجام بدم اما چون پروِژه شی گرایی هست حتما حتما باید از کلاس استفاده بشه.

اگه احیانا به جوابی توی این زمینه رسیدید از همین طریق اطلاع بدید.... منتظرم

a-t-e-f-e-h
پنج شنبه 23 خرداد 1392, 23:26 عصر
خسته نباشید!!!!
منم میدونم از روش های دیگه انجام میشه
مشکل همین شی گرا بودنشه
من از یکی شنیدم میشه داخل فرم Save کرد
من با picture box هم امتحان کردم ولی برنامه باید طوری باشه که اگه شکل save شده رو باز کنیم عکس رو به شکل picturebox نشون نده،چون باید قابلیت تغییر دوباره رو داشته باشه
وقتی هم از picturebox استفاده کردم شکل پشت picture box روی فرم کشیده میشد!!! با اینکه همه کدها رو داخل picturebox نوشتم!!!

hasan1500
جمعه 24 خرداد 1392, 00:08 صبح
خسته نباشید!!!!
منم میدونم از روش های دیگه انجام میشه
مشکل همین شی گرا بودنشه
من از یکی شنیدم میشه داخل فرم Save کرد
من با picture box هم امتحان کردم ولی برنامه باید طوری باشه که اگه شکل save شده رو باز کنیم عکس رو به شکل picturebox نشون نده،چون باید قابلیت تغییر دوباره رو داشته باشه
وقتی هم از picturebox استفاده کردم شکل پشت picture box روی فرم کشیده میشد!!! با اینکه همه کدها رو داخل picturebox نوشتم!!!
تو باید توی قسمت Graphics مربوط به کشیدن مربع بگی روی picture box من بکش.
بطور مثال اگه کلاس کشیدن مربع این طور باشه:



{protected int x;
protected int Ghalam;
public Square(int a, Point s, Color d, Graphics q,int b) // this Class int X only is New.
: base(s, q, d)
{
x = a;
Ghalam = b;
}
public virtual void ReSize(int a, int b)
{
x+=a;
}
public override void Draw() // Draw Square
{
g.DrawRectangle(new Pen(dcolor,Ghalam), Start.X, Start.Y, x, x);
}


وقتی بخوایم از کلاس مربع توی فرم استفاده کنیم با اینطور بنویسیم:




private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
Sx = e.X - pictureBox1.Location.X;
Sy = e.Y - pictureBox1.Location.Y;
{

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
Ex = e.X - pictureBox1.Location.X; // point end x in picturebox 1
Ey = e.Y - pictureBox1.Location.Y; ; // point end y in picturebox 1

h = pictureBox1.CreateGraphics();
temp = new Square(x, new Point(sx, sy), front_def_color.BackColor, h, ShapeWith / 2);
temp.Draw();
}


در قسمت بالا به جای اینکه از یک Graphics معمولی استفاده کنیم از pictureBox1.CreateGraphics استفاده کردیم.
امیدوارم یاد گرفته باشی.

البته اینم بگم که اسم برنامه ای که شما می خواید بنویسید نمیشه Paint گذاشت. چرا؟ چون با سابقه چند ساله ای که من توی طراحی با فتوشاپ دارم باید اسمو گذاشت Mini Photoshop.
بهتر نیست؟!