none
Customizar Botão RRS feed

  • Pergunta

  • Ola galera, estou fazendo uma aplicação e gostaria de saber como personaliza-lo,

    deixar as pontas arredondadas e deixar a imagem em stresch no botão.

    grato e fico no aguardo.

    terça-feira, 9 de agosto de 2011 17:45

Respostas

  • Então Junior,

    Essa SuArredondaRect é a Primeira Função da Lista de Funções.

    Ela é a Função base para todas as sobrecargas, inclusive essa que arredonda o Botão.

    Ela que faz o arredondamento dos cantos. Para fazer a Chamada dela basta você fazer assim:

     

    Arredonda(SeuBotão,Tamanho do canto,Arredondar o TOPO, Arredondar a BASE);

     

    obs.: No Tamanho do canto, quanto menor o valor, menor sera a curva do arredondamento.


    " É Melhor ficar calado e parecer um Idiota do que Abrir a boca e dar toda a Certeza! "
    Developer
    Twitter: @JuniorGodLike
    Msn: deus_omelhor@hotmail.com
    • Marcado como Resposta junior_quemanda sábado, 13 de agosto de 2011 05:42
    quarta-feira, 10 de agosto de 2011 10:12

Todas as Respostas

  • Cara, eu criei várias funções de arredondamento, veja:

    #region Arredondamento
    
        private static GraphicsPath SuArredondaRect(Rectangle pRect, int pCanto, bool pTopo, bool pBase)
        {
          GraphicsPath gp = new GraphicsPath();
    
          if (pTopo)
          {
            gp.AddArc(pRect.X - 1, pRect.Y - 1, pCanto, pCanto, 180, 90);
            gp.AddArc(pRect.X + pRect.Width - pCanto, pRect.Y - 1, pCanto, pCanto, 270, 90);
          }
          else
          {
            // Se não arredondar o topo, adiciona as linhas para poder fechar o retangulo junto com
            // a base arredondada
            gp.AddLine(pRect.X - 1, pRect.Y - 1, pRect.X + pRect.Width, pRect.Y - 1);
          }
    
          if (pBase)
          {
            gp.AddArc(pRect.X + pRect.Width - pCanto, pRect.Y + pRect.Height - pCanto, pCanto, pCanto, 0, 90);
            gp.AddArc(pRect.X - 1, pRect.Y + pRect.Height - pCanto, pCanto, pCanto, 90, 90);
          }
          else
          {
            // Se não arredondar a base, adiciona as linhas para poder fechar o retangulo junto com
            // o topo arredondado. Adiciona da direita para esquerda pois é na ordem contrária que 
            // foi adicionado os arcos do topo. E pra fechar o retangulo tem que desenhar na ordem :
            //  1 - Canto Superior Esquerdo
            //  2 - Canto Superior Direito
            //  3 - Canto Inferior Direito 
            //  4 - Canto Inferior Esquerdo.
            gp.AddLine(pRect.X + pRect.Width, pRect.Y + pRect.Height, pRect.X - 1, pRect.Y + pRect.Height);
          }
    
          return gp;
        }
    
        /// <summary>
        /// Arredonda os cantos do Formulário passado como parâmetro (pFormulario).
        /// </summary>
        /// <param name="pCanto">Tamanho arredondamento do canto (Altura x Largura) em pixels.</param>
        /// <param name="pTopo">Indica se faz o arredondamento dos cantos superiores.</param>
        /// <param name="pBase">Indica se faz o arredondamento dos cantos inferiores.</param>
        public static void Arredonda(Form pFormulario, int pCanto, bool pTopo, bool pBase)
        {
          // pCanto -> Tamanho do Canto
          // pTopo -> Arredonda o Topo
          // pBase -> Arredonda a Base
          Rectangle r = new Rectangle();
          r = pFormulario.ClientRectangle;
    
          pFormulario.Region = new System.Drawing.Region(SuArredondaRect(r, pCanto, pTopo, pBase));
        }
    
        /// <summary>
        /// Arredonda os cantos do PictureBox passado como parâmetro (pPicture).
        /// </summary>
        /// <param name="pCanto">Tamanho arredondamento do canto (Altura x Largura) em pixels.</param>
        /// <param name="pTopo">Indica se faz o arredondamento dos cantos superiores.</param>
        /// <param name="pBase">Indica se faz o arredondamento dos cantos inferiores.</param>
        public static void Arredonda(PictureBox pPicture, int pCanto, bool pTopo, bool pBase)
        {
          // pCanto -> Tamanho do Canto
          // pTopo -> Arredonda o Topo
          // pBase -> Arredonda a Base
          Rectangle r = new Rectangle();
          r = pPicture.ClientRectangle;
    
          pPicture.Region = new System.Drawing.Region(SuArredondaRect(r, pCanto, pTopo, pBase));
        }
    
        /// <summary>
        /// Arredonda os cantos do Painel passado como parâmetro (pPanel).
        /// </summary>
        /// <param name="pCanto">Tamanho arredondamento do canto (Altura x Largura) em pixels.</param>
        /// <param name="pTopo">Indica se faz o arredondamento dos cantos superiores.</param>
        /// <param name="pBase">Indica se faz o arredondamento dos cantos inferiores.</param>
        public static void Arredonda(Panel pPainel, int pCanto, bool pTopo, bool pBase)
        {
          // pCanto -> Tamanho do Canto
          // pTopo -> Arredonda o Topo
          // pBase -> Arredonda a Base
          Rectangle r = new Rectangle();
          r = pPainel.ClientRectangle;
    
          pPainel.Region = new System.Drawing.Region(SuArredondaRect(r, pCanto, pTopo, pBase));
        }
    
        /// <summary>
        /// Arredonda os cantos do Botão passado como parâmetro (pButton).
        /// </summary>
        /// <param name="pCanto">Tamanho arredondamento do canto (Altura x Largura) em pixels.</param>
        /// <param name="pTopo">Indica se faz o arredondamento dos cantos superiores.</param>
        /// <param name="pBase">Indica se faz o arredondamento dos cantos inferiores.</param>
        public static void Arredonda(Button pButton, int pCanto, bool pTopo, bool pBase)
        {
          // pCanto -> Tamanho do Canto
          // pTopo -> Arredonda o Topo
          // pBase -> Arredonda a Base
          Rectangle r = new Rectangle();
          r = pButton.ClientRectangle;
    
          pButton.Region = new System.Drawing.Region(SuArredondaRect(r, pCanto, pTopo, pBase));
        }
    
        #endregion
    
    


    OBS.: certifique-se de ter essas referências em seu projeto:

    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Drawing.Drawing2D;
    

    Espero ter ajudado


    " É Melhor ficar calado e parecer um Idiota do que Abrir a boca e dar toda a Certeza! "
    Developer
    Twitter: @JuniorGodLike
    Msn: deus_omelhor@hotmail.com
    • Sugerido como Resposta Breno Riba terça-feira, 9 de agosto de 2011 20:04
    terça-feira, 9 de agosto de 2011 17:54
  • entao junior, me explica uma coisa, nessa função:

     

    public static void Arredonda(Button pButton, int pCanto, bool pTopo, bool pBase)
            {
                // pCanto -> Tamanho do Canto
                // pTopo -> Arredonda o Topo
                // pBase -> Arredonda a Base
                Rectangle r = new Rectangle();
                r = pButton.ClientRectangle;

                pButton.Region = new System.Drawing.Region(SuArredondaRect(r, pCanto, pTopo, pBase));
            }

     

    o que seria o SuArredondaRect ? eu não entendi =/

    quarta-feira, 10 de agosto de 2011 03:03
  • Então Junior,

    Essa SuArredondaRect é a Primeira Função da Lista de Funções.

    Ela é a Função base para todas as sobrecargas, inclusive essa que arredonda o Botão.

    Ela que faz o arredondamento dos cantos. Para fazer a Chamada dela basta você fazer assim:

     

    Arredonda(SeuBotão,Tamanho do canto,Arredondar o TOPO, Arredondar a BASE);

     

    obs.: No Tamanho do canto, quanto menor o valor, menor sera a curva do arredondamento.


    " É Melhor ficar calado e parecer um Idiota do que Abrir a boca e dar toda a Certeza! "
    Developer
    Twitter: @JuniorGodLike
    Msn: deus_omelhor@hotmail.com
    • Marcado como Resposta junior_quemanda sábado, 13 de agosto de 2011 05:42
    quarta-feira, 10 de agosto de 2011 10:12