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")
0 comentários:
Enviar um comentário