Как анимировать нажатие кнопки? - Visual Basic .NET
Формулировка задачи:
Всем здравствуйте.
Есть изображение, соответствующее нажатому состоянию и изображение, соответствующее отпущенному состоянию кнопки.
Когда-то в VB-6 я вставлял в коде в события MouseUp и MouseDown элемента управления Image команды загрузки соответствующих изображений. Получалась довольно наглядная анимация процесса нажатия кнопки. В VB.Net на эту тему есть что-либо более продвинутое?
Решение задачи: «Как анимировать нажатие кнопки?»
textual
Листинг программы
- Public Class Form1
- #Region " Скин кнопки 1"
- Private Sub Button1_MouseLeave(sender As Object, e As System.EventArgs) Handles Button1.MouseLeave, MyBase.Load
- Button1.BackgroundImage = GetButtonSkin(Image.FromFile("1.png"), 1, True)
- End Sub
- Private Sub Button1_MouseEnter(sender As Object, e As System.EventArgs) Handles Button1.MouseEnter, Button1.MouseUp
- sender.backgroundimage = GetButtonSkin(Image.FromFile("1.png"), 1)
- End Sub
- Private Sub Button1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
- sender.backgroundimage = GetButtonSkin(Image.FromFile("1.png"), 3)
- End Sub
- #End Region
- Public Function GetButtonSkin(SourceImage As Image, Optional Return_Skin As Integer = Nothing, Optional ToGray As Boolean = False) As Image
- Dim NewButtonImage As New Bitmap(CInt(SourceImage.Width / 3), SourceImage.Height)
- Dim myGraphics As Graphics = Graphics.FromImage(NewButtonImage)
- Dim ButtonSize As New Rectangle(0, 0, SourceImage.Width / 3, SourceImage.Height)
- Dim getState As Rectangle
- If Return_Skin = 1 Then ' Normal State
- getState = New Rectangle(0, 0, SourceImage.Width / 3, SourceImage.Height)
- ElseIf Return_Skin = 2 Then ' Hover State
- getState = New Rectangle(SourceImage.Width / 3, 0, SourceImage.Width / 3, SourceImage.Height)
- ElseIf Return_Skin = 3 Then ' Dowm State
- getState = New Rectangle(SourceImage.Width / 3 * 2, 0, SourceImage.Width / 3, SourceImage.Height)
- Else ' If not Indicated - return Normal State
- getState = New Rectangle(0, 0, SourceImage.Width / 3, SourceImage.Height)
- End If
- myGraphics.DrawImage(SourceImage, ButtonSize, getState, GraphicsUnit.Pixel)
- Dim PixelColor As Color : Dim PaintToGray As Byte
- If ToGray Then
- For x As Integer = 0 To NewButtonImage.Width - 1
- For y As Integer = 0 To NewButtonImage.Height - 1
- PixelColor = NewButtonImage.GetPixel(x, y)
- 'Если пиксель непрозрачный, то перекрашиваем его в серый цвет
- If PixelColor <> Color.FromArgb(0) Then
- PaintToGray = 0.3 * PixelColor.R + 0.59 * PixelColor.G + 0.11 * PixelColor.B
- PixelColor = Color.FromArgb(PaintToGray, PaintToGray, PaintToGray)
- NewButtonImage.SetPixel(x, y, PixelColor)
- End If
- Next
- Next
- End If
- Return NewButtonImage
- End Function
- End Class
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д