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: Dicas de Programação #13

ReadOnly NumericUpDown

O controlo NumericUpDown, na propriedade ReadOnly, não tem um comportamento perfeito no seu funcionamento, pois embora esteja definido como ReadOnly, é possível alterar os números através das setas (Up e Down).

Uma das formas de resolver este problema é criar um novo controlo, que herda o controlo base, e que faz o Override ao UpButton e DownButton de modo a ignorar as setas, caso a propriedade ReadOnly esteja definida.

Como a definição desta propriedade altera também a cor de fundo (BackColor), foi criada uma Shadow Property para não fazer esta alteração e podes personalizar o controlo a gosto.

O resultado é esta classe que após compilada ficará disponível na Toolbox

Class ReadOnlyNumericUpDown
    Inherits NumericUpDown

    Private m_ReadOnly As Boolean

  
'''<summary>
  
''' Cria uma propriedade para definir o NumericUpDown como ReadOnly
    ''' e como já existe uma propriedade com este nome é necessário criar
    ''' uma Shadows Property. Além disso como é uma palavra reservada tem
    ''' de ser colocada entre chavetas rectas []
    '''
</summary>
  
Public Shadows Property [ReadOnly]() As Boolean
        Get
            Return
m_ReadOnly
        End Get
        Set
(ByVal value As Boolean)
            m_ReadOnly = value
        End Set
    End Property


  
'''<summary>
  
''' Ao ser carregado no botão para cima e se for ReadOnly ignora a acção
    '''
</summary>
  
'''<remarks></remarks>
  
Public Overrides Sub UpButton()
        If Not Me.ReadOnly Then
            MyBase
.UpButton()
        End If
    End Sub


  
'''<summary>
  
''' Ao ser carregado no botão para baixo e se for ReadOnly ignora a acção
    '''
</summary>
  
'''<remarks></remarks>
  
Public Overrides Sub DownButton()
        If Not Me.ReadOnly Then
            MyBase
.DownButton()
        End If
    End Sub


  
'''<summary>
  
''' Ao ser pressionada uma tecla e se for ReadOnly ignora a acção
    '''
</summary>
   
''' <remarks></remarks>
   
Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)
        If Not Me.ReadOnly Then
            MyBase
.OnKeyDown(e)
        Else
           
e.SuppressKeyPress = True
        End If
    End Sub

End Class


Alterar o Wallpaper do Sistema Operativo

A alteração do wallpaper (ambiente de trabalho) do sistema operativo é sempre uma acção muito utilizada e que muitos aproveitam para criar pequenos aplicativos para o fazer (embora já existam várias ferramentas disponíveis).

A alteração do wallpaper pode-se fazer muito simplesmente através da API SystemParametersInfo. Um dos problemas que normalmente se vê em alguns códigos para alterar o wallpaper do computador, é a utilização de ficheiros *.jpg, *.png, etc, sem a conversão para um formato bmp (que o sistema aceita).

Fica um exemplo de como fazer esta alteração:

' Declaração da API que irá alterar o wallpaper
Private Declare Function SystemParametersInfo Lib "user32"Alias"SystemParametersInfoA"(ByVal uAction As Integer, ByVal uParam As Integer, ByVal lpvParam As String, ByVal fuWinIni As Integer) As Integer

' Definição das constantes
Private Const SPI_SETDESKWALLPAPER = 20
Private Const SPIF_UPDATEINIFILE = &H1


'''<summary>
''' Muda o wallpaper do computador
'''
</summary>
'''<param name="imagePath">Endereço completo da imagem</param>
'''<remarks></remarks>
Private Sub SetWallpaper(ByVal imagePath As String)

    ' Verifica se o ficheiro existe
  
If Not IO.File.Exists(imagePath) Then
        Throw New
Exception("O ficheiro indicado não existe!")
    End If

    Try

        Dim
imgName As String

      
' Caso o ficheiro indicado não seja um *.bmp é necessário
        ' converter para tal, de modo a que este funcione
      
If IO.Path.GetExtension(imagePath) <> ".bmp"Then

          
' Cria o ficheiro *.bmp
          
imgName = IO.Path.ChangeExtension(imagePath, "bmp")

            ' Cria uma nova image e grava como *.bmp
          
Using bm AsBitmap = Image.FromFile(imagePath)
                bm.Save(imgName, Imaging.ImageFormat.Bmp)
            End Using

        Else
          
imgName = imagePath
        End If

      
' Define o novo wallpaper
      
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, imgName, _
                                SPIF_UPDATEINIFILE)

    Catch ex AsException
        Throw New Exception(ex.Message)
    End Try

End Sub


Para alterar o wallpaper é apenas necessário fazer:

SetWallpaper("c:\imagem.jpg")

 

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

0 comentários:

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