Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

VB.NET: Criando uma Label com sombra

No VB.NET não está disponível uma label que permita criar um sombreado no texto de modo a tornar-lo com mais destaque. Esta propriedade é muito comum em ambiente Office, em programas como o Excel, Word, etc, mas está disponível também em muitos outros programas.


Para criar uma label que permita criar um sombreado é preciso desenhar o texto através do namespace System.Drawing. O conceito é bastante simples: a label escreve um texto, que será a sombra, e através do evento onPaint() desenha-se o texto que fica por cima.

Depois é escondida a propriedade ForeColor (que define a cor do texto) porque esta não será a cor do texto mas sim da sombra e são criadas algumas novas propriedades:

  • OffsetX (define o offset, ou desvio, na vertical face ao texto inicial)
  • OffsetY (define o offset, ou desvio, na horizontal face ao texto inicial)
  • ForeColorFront (define a cor que fica por cima)
  • ForeColorBack (define a cor que fica por baixo – sombra)

É necessário então criar uma nova classe e utilizar o seguinte código:

Imports System.Drawing
Imports System.ComponentModel

Public Class ShadowLabel
    Inherits Label   

#Region "Properties"

    Private m_offsetX As Integer
    Private m_offsetY As Integer
    Private m_ForeColorFront As Color

    ''' <summary>
    ''' Definição do offset em X
    ''' </summary>
    <DefaultValue(0)> _
    <Category("Shadow")> _
    <Description("Definição do offset em X")> _
    Public Property OffsetX() As Integer
        Get
            Return m_offsetX
        End Get
        Set(ByVal value As Integer)
            m_offsetX = value
            Me.Invalidate()
        End Set
    End Property

    ''' <summary>
    ''' Definição do offset em Y
    ''' </summary>
    <DefaultValue(-1)> _
    <Category("Shadow")> _
    <Description("Definição do offset em Y")> _
    Public Property OffsetY() As Integer
        Get
            Return m_offsetY
        End Get
        Set(ByVal value As Integer)
            m_offsetY = value
            Me.Invalidate()
        End Set
    End Property

    ''' <summary>
    ''' Definição da cor da frente
    ''' </summary>
    <DefaultValue(GetType(Color), "RoyalBlue")> _
    <Category("Shadow")> _
    <Description("Definição da cor da frente")> _
    Public Property ForeColorFront() As Color
        Get
            Return m_ForeColorFront
        End Get
        Set(ByVal value As Color)
            m_ForeColorFront = value
            Me.Invalidate()
        End Set
    End Property

    ''' <summary>
    ''' Definição da cor de sombreado
    ''' </summary>
    <DefaultValue(GetType(Color), "White")> _
    <Category("Shadow")> _
    <Description("Definição da cor de sombreado")> _
    Public Property ForeColorBack() As Color
        Get
            Return Me.ForeColor
        End Get
        Set(ByVal value As Color)
            Me.ForeColor = value
            Me.Invalidate()
        End Set
    End Property



   
' Serve apenas para definir que a propriedade ForeColor
    ' não está disponível para alterar no editor e no design
    <Browsable(False), EditorBrowsable(EditorBrowsableState.Never)> _
    Public Overrides Property ForeColor() As System.Drawing.Color
        Get
            Return MyBase.ForeColor
        End Get
        Set(ByVal value As System.Drawing.Color)
            MyBase.ForeColor = value
        End Set
    End Property   

#End Region


   
' Define algumas propriedades por defeito
    Public Sub New()

        ' Definição dos valores iniciais de offset
        Me.OffsetX = 0
        Me.OffsetY = -1

        ' Definição das cores iniciais do texto
        Me.ForeColorFront = Color.RoyalBlue
        Me.ForeColorBack = Color.White   

    End Sub


   
' No evento Paint desenha o texto
    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)

        MyBase.OnPaint(e)

        ' Desenha o texto que fica na frente
        Dim BackBrush As New SolidBrush(Me.ForeColorFront)
        e.Graphics.DrawString(Me.Text, Me.Font, BackBrush, OffsetX, OffsetY, StringFormat.GenericDefault)
        BackBrush.Dispose()

    End Sub


End
Class


No final é preciso compilar a aplicação e o controlo estará disponível na toolbar.

Este é um exemplo que pretende mostrar como criar uma label com uma sombra, mas também como utilizar algumas funcionalidades do namespace Drawing.

 

PS: Como sempre, qualquer dúvida, comentário ou correcção ao artigo é sempre bem vinda!

2 comentários:

Alisson disse...

Estou achando muito bacana essas dicas, estou gostando cada vez mais do VB. Gostaria de fazer um programa para gravar dados de uma agenda em um banco de dados mas não tenho nem noção de como fazer. Fiz a interface gráfica toda mas agora falta código e como fazer o banco de dados, não sei fazer.

jpaulino disse...

Olá,

Recomendo começar por estes artigos que mostram como inserir, modificar, apagar e ler dados no SQL Server:

VB.NET: Gestão de Dados em SQL Server - Parte I
VB.NET: Gestão de Dados em SQL Server - Parte II

Mensagens Recentes



Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico