Dibujar rectángulos con esquinas redondeadas

07/09/2008 - 23:44 por Alberto | Informe spam
Un saludo a todos. Quisiera plantear la siguiente pregunta,
Estoy trabajando con VS 2008 en un WinForm.
Debo dibujar rectángulos con las esquinas redondeadas (el mismo shape que
los 'GroupBox')
He estado investigando en la clase System.Drawing.Graphics pero no lo
consigo. Me podéis orientar por favor? Hasta ahora dibujo los rectángulos
del siguiente modo:

{
System.Drawing.Graphics areaToPaint = this.CreateGraphics();
System.Drawing.Pen myPenRectangle = new System.Drawing.Pen(
System.Drawing.Color.Blue );
areaToPaint.DrawRectangle( myPenRectangle, 250, 50, 325, 100 );
}

Es posible dibujar las esquinas redondeadas partiendo de lo que tengo o debo
usar una clase diferente?

Aprecio vuestra ayuda, y os doy las gracias de antemano,

Alberto

Preguntas similare

Leer las respuestas

#6 Alberto Poblacion
14/09/2008 - 21:13 | Informe spam
"Alberto" wrote in message
news:
[...]
El caso es que estoy estancado con las esquinas del rectángulo, consigo
dibujar los arcos, pero es obvio que tengo que pasarle las coordenadas
tomadas de las variables del rectángulo y me estoy haciendo un lio; me
puedes echar una mano por favor.

ESTO ES LO QUE TENGO:
protected override void OnPaint( PaintEventArgs e )
{
System.Drawing.Graphics areaToPaint = this.CreateGraphics();
System.Drawing.Pen myPen = new System.Drawing.Pen(
System.Drawing.Color.MediumSlateBlue );
System.Drawing.Rectangle myRect = new System.Drawing.Rectangle( 50, 50,
500, 100 );
ExtensionesGraficas.RectRoundCorner( areaToPaint, myPen, myRect, 8 );
}
public static void RectRoundCorner( this Graphics g, Pen pen, Rectangle
rect, int radio )
{
g.DrawLine( pen, rect.Left + radio, rect.Top, rect.Right - radio,
rect.Top );
g.DrawLine( pen, rect.Left + radio, rect.Bottom, rect.Right - radio,
rect.Bottom );
g.DrawLine( pen, rect.Left, rect.Top + radio, rect.Left, rect.Bottom -
radio );
g.DrawLine( pen, rect.Right, rect.Top + radio, rect.Right, rect.Bottom -
radio );
//(aquí tengo que dibujar las cuatro esquinas)



Por ejemplo, para la esquina superior izquierda:

g.DrawArc(pen, rect.Left, rect.Top, radio*2, radio*2, 180, 90);

Te lo he puesto de memoria; igual me equivoco en el ángulo de partida
(180 grados) y el de barrido (90), pero te darás cuenta inmediatamente en
cuanto lo pruebes. Si te sale descolocado, cambia los ángulos para que quede
en la posición correcta.
Los otros cuatro valores (rect.Left, rect.Top, radio*2, radio*2) son las
coordenadas del vértice, y la anchura y altura, del cuadrado imaginario en
cuyo interior se dibuja la circunferencia de la cual estamos pintando un
arco.
Respuesta Responder a este mensaje
#7 Alberto
14/09/2008 - 23:46 | Informe spam
"Alberto Poblacion" wrote
in message news:%
"Alberto" wrote in message
news:
[...]
El caso es que estoy estancado con las esquinas del rectángulo, consigo
dibujar los arcos, pero es obvio que tengo que pasarle las coordenadas
tomadas de las variables del rectángulo y me estoy haciendo un lio; me
puedes echar una mano por favor.

ESTO ES LO QUE TENGO:
protected override void OnPaint( PaintEventArgs e )
{
System.Drawing.Graphics areaToPaint = this.CreateGraphics();
System.Drawing.Pen myPen = new System.Drawing.Pen(
System.Drawing.Color.MediumSlateBlue );
System.Drawing.Rectangle myRect = new System.Drawing.Rectangle( 50, 50,
500, 100 );
ExtensionesGraficas.RectRoundCorner( areaToPaint, myPen, myRect, 8 );
}
public static void RectRoundCorner( this Graphics g, Pen pen, Rectangle
rect, int radio )
{
g.DrawLine( pen, rect.Left + radio, rect.Top, rect.Right - radio,
rect.Top );
g.DrawLine( pen, rect.Left + radio, rect.Bottom, rect.Right - radio,
rect.Bottom );
g.DrawLine( pen, rect.Left, rect.Top + radio, rect.Left, rect.Bottom -
radio );
g.DrawLine( pen, rect.Right, rect.Top + radio, rect.Right, rect.Bottom -
radio );
//(aquí tengo que dibujar las cuatro esquinas)



Por ejemplo, para la esquina superior izquierda:

g.DrawArc(pen, rect.Left, rect.Top, radio*2, radio*2, 180, 90);

Te lo he puesto de memoria; igual me equivoco en el ángulo de partida
(180 grados) y el de barrido (90), pero te darás cuenta inmediatamente en
cuanto lo pruebes. Si te sale descolocado, cambia los ángulos para que
quede en la posición correcta.
Los otros cuatro valores (rect.Left, rect.Top, radio*2, radio*2) son las
coordenadas del vértice, y la anchura y altura, del cuadrado imaginario en
cuyo interior se dibuja la circunferencia de la cual estamos pintando un
arco.



Muchas gracias Alberto,
Ya lo tengo, estoy muy satisfecho con el resultado!
Recibe un atento saludo,
Alberto
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida