none
Imitar botón. RRS feed

  • Pregunta

  • 

    Buenas, tengo estos dos botones. El primero es el botón que he hecho y el segundo el que quiero imitar, pero no hay manera de que me quede igual. Los problemas están en degradado del color de fondo (LinearGradientBrush linGrBrush = new LinearGradientBrush(rect2, Color.White, System.Drawing.Color.DimGray, LinearGradientMode.Vertical); )    y con la sombra del borde que tampoco se como hacerlo. 

    Si me podéis ayudar os los agradezco. 

    Saludos.


    • Cambiado webJoseModerator miércoles, 31 de octubre de 2012 23:26 (De:Lenguaje C#)
    miércoles, 31 de octubre de 2012 8:35

Respuestas

  • ejemplo:

    Codigo Paint:

            protected override void OnPaint(PaintEventArgs pevent)
            {
                //base.OnPaint(pevent);
                pevent.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                pevent.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
                Rectangle bounds = new Rectangle(0, 0, this.Width, this.Height);
                using (LinearGradientBrush brush = new LinearGradientBrush(bounds, SystemColors.Control, SystemColors.ControlDarkDark, LinearGradientMode.Vertical))
                {
                    Blend blend = new Blend();
                    blend.Positions = new float[] { 0.0f, 0.1f, 0.1f, 0.2f, 0.4f, 0.5f, 1.0f };
                    blend.Factors = new float[]   { 0.0f, 0.1f, 0.1f, 0.4f, 0.6f, 0.8f, 1.0f };
                    brush.Blend = blend;
                    pevent.Graphics.FillRectangle(brush, bounds);
                }
    
                using (Pen pen = new Pen(SystemColors.ControlDarkDark, 4))
                {
                    pevent.Graphics.DrawRectangle(pen, bounds);
                }
    
                TextRenderer.DrawText(pevent.Graphics, this.Text, this.Font, bounds, this.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter);
            }
    

    no lo redondie porque lo es de ejemplo ;-)

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    • Marcado como respuesta Aivalo miércoles, 31 de octubre de 2012 16:50
    miércoles, 31 de octubre de 2012 16:37

Todas las respuestas

  • hola

    estas usando GDI para armar el estilo del boton?

    porque por lo que veo el texto cuando realices un DrawText() deverias indicarle la posicione

    How to: Draw Text with GDI

    has validaod el Rectangle , si lo cambias como varia

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 31 de octubre de 2012 11:56
  • Lo del texto es lo de menos, porque le pongo un label encima de momento. Pero lo que más me interesa es poder controlar el degradado y hacer un borde similar. Del degradado no entiendo como queda tan arriba y queda como si fuera un poco de brillo. Y el borde no termina de quedar bien como podéis ver.


    miércoles, 31 de octubre de 2012 13:02
  • Os paso el link que he estado consultando:

    http://www.codeproject.com/Articles/42968/Pulse-Button

    miércoles, 31 de octubre de 2012 13:03
  • ¿seguro que el efecto está hecho con degradados y colores? Lo mismo está hecho como en las web y demás, que salen a partir de imagenes que usan como fondo, lo digo porque lo mismo es más fácil abordar el tema a partir de ahí, usando una imagen con el degradado que buscas como fondo del botón.

    Un saludo.


    • Editado fjbgcmbsgr miércoles, 31 de octubre de 2012 13:28
    miércoles, 31 de octubre de 2012 13:28
  • En teoría, es parte de un proyecto de winforms, no tiene nada que ver con web, pero claro, no tenemos el código. Como se haría para poder coger el degradado del fondo de esa imagen?
    miércoles, 31 de octubre de 2012 14:37
  • la clase LinearGradientBrush tiene una propiedad llamada Blend, con esta puedes indicar la posición y el factor de los colores a aplicar al degradado, seguro en el codigo del ejemplo ha de estar pero no lo has notado... tambien he visto que se puede utilizar la propiedad InterpolationColors. deberias de leer la ayuda de la clase.

    ademas, tienes que suavisar los bordes para que se vean mas nitidos.

    mi duda tambien es? debe de quedar tu control igual al que tratas de imitar?...

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    miércoles, 31 de octubre de 2012 16:04
  • jajajaja.... acabo de descargar el ejemplo... y para el codigo que utilizas para giarte el aplica los efectos de modo manual, pintando Circulos con transparencia.... pero el que tu quieres imitar debe de estar utilizando Blend o InterpolationColors.

    debes de pintar el Background usando Blend o InterpolationColors y el borde pintarlo por aparte, aplicando tu creatividad...

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    miércoles, 31 de octubre de 2012 16:10
  • ejemplo:

    Codigo Paint:

            protected override void OnPaint(PaintEventArgs pevent)
            {
                //base.OnPaint(pevent);
                pevent.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                pevent.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
                Rectangle bounds = new Rectangle(0, 0, this.Width, this.Height);
                using (LinearGradientBrush brush = new LinearGradientBrush(bounds, SystemColors.Control, SystemColors.ControlDarkDark, LinearGradientMode.Vertical))
                {
                    Blend blend = new Blend();
                    blend.Positions = new float[] { 0.0f, 0.1f, 0.1f, 0.2f, 0.4f, 0.5f, 1.0f };
                    blend.Factors = new float[]   { 0.0f, 0.1f, 0.1f, 0.4f, 0.6f, 0.8f, 1.0f };
                    brush.Blend = blend;
                    pevent.Graphics.FillRectangle(brush, bounds);
                }
    
                using (Pen pen = new Pen(SystemColors.ControlDarkDark, 4))
                {
                    pevent.Graphics.DrawRectangle(pen, bounds);
                }
    
                TextRenderer.DrawText(pevent.Graphics, this.Text, this.Font, bounds, this.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter);
            }
    

    no lo redondie porque lo es de ejemplo ;-)

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    • Marcado como respuesta Aivalo miércoles, 31 de octubre de 2012 16:50
    miércoles, 31 de octubre de 2012 16:37
  • Perfecto! Muchisimas gracias por tu tiempo.
    miércoles, 31 de octubre de 2012 16:51