PDA

View Full Version : سوال: چه طوری میشه یک مستطیل لبه گرد رسم کرد؟



EhsanTC
یک شنبه 16 فروردین 1388, 10:52 صبح
سلام به دوستان عزیز

من می خواهم برای فرمم یک حاشیه بذارم که لبه هاش گرد باشه و از تکه کد زیر استفاده کردم

Graphics g = e.Graphics;
Pen pen = new Pen(Color.Blue, 2F);

Point[] lines = new Point[]{ new Point(10,2),new Point(Width-10,2),
new Point(2 , 10) , new Point(2 , Height-10),
new Point(10,Height-2) , new Point( Width-10,Height-2 ),
new Point( Width-2 , 10) , new Point(Width-2 , Height-10)
};

for ( int i=0 ; i<lines.Length ; i+=2)
{
Point[] partialLine = new Point[2];
Array.Copy( lines , i , partialLine , 0 , 2 );

g.DrawLines(pen, partialLine);
}

Rectangle curveRects = new Rectangle();
curveRects.Width = 10;
curveRects.Height = 10;

//draw first curve
curveRects.X = 2;
curveRects.Y = 2;
g.DrawArc(pen, curveRects, 180, 90);

//second
curveRects.X = Width-12;
curveRects.Y = 2;
g.DrawArc(pen, curveRects, -90, 90);
.
.

اما نتیجه کار اصلا جالب نبود و بین خط ها و ربع دایره ها فاصله می افتاد.
آیا روش بهتر و کم دردسر تری شما می دونید؟

با تشکر

Sorenaa_s
یک شنبه 16 فروردین 1388, 14:13 عصر
می تونید از این تابع استفاده کنید:




public static void DrawRoundedRectangle(Graphics g, Rectangle r, int d, Pen p)
{
g.FillRectangle(Brushes.White, r);

g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();

gp.AddArc(r.X, r.Y, d, d, 180, 90);
gp.AddArc(r.X + r.Width - d, r.Y, d, d, 270, 90);
gp.AddArc(r.X + r.Width - d, r.Y + r.Height - d, d, d, 0, 90);
gp.AddArc(r.X, r.Y + r.Height - d, d, d, 90, 90);
gp.AddLine(r.X, r.Y + r.Height - d, r.X, r.Y + d / 2);

g.DrawPath(p, gp);
}

EhsanTC
سه شنبه 18 فروردین 1388, 12:07 عصر
سلام
دستت درد نكنه.اما اگه در كد از اين خاصيت استفاده كنيم كيفيت بهتر ميشه

g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality ;