Voici comment realiser un progressbar laser.
vous pouvez changer la couleur du laser.
ma classe :
Public Class ProgressbarLaser : Inherits ProgressBar
Public _Laser As String = "R0lGODlh0gAuAFUAACH5BAEAADYALAAAAADSAC4Ahf7+/iYmJlFRUcbGxri4uDk5OTc3N2FhYWpqaklJSb29vf8zM/u9M3p6eqysrKOjo0tLS2lpaaurq7Kysi0tLVNTUygoKIqKijQ0NHd3d1tbW1hYWG1tbVpaWmBgYIyMjGdnZ1VVVa+pqX19fZKSkjMzM4eHh0dHR3h4eJmZmSsrK8HBwV5eXiwsLHZ2dqCgoMDAwF9fX8rKyj4+Pm5ubkBAQP7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb/QJtwSCwaj8ikcslsOp9QpGFKrVqv2Gp0y+16v+CwM0Aum8/otFnMbrvf8KZ6Tq/b72RafM/vj/GAgYIBNUUSCVmJiouMjQYKkJGSk5GOlouUmZAEg52eaCpFDwUFn6afBKmqq6yqp4Ktsa6vtHcpRKOktbt1sr6cvL2/rMHFZSy4pLrGzMOxzGrOq9C8BkQSysvUvNLE22bdqd+vFitE2drjr+Gz6uzqpiZF6KXw6+zA7uH2nRVG9PxO4cs37l1AQCWO0BvIsKHDafAeDqQ2QSE6iRgz/rKnsRs0FEgWdhypkSPJjcZOJBF5siVDky5bGWuhBOBBTxMjxpRZ7EFN/3Q3ceKDubPdrghLbAaFNVRnUaO0ZjBRuhRQTn1Pxe2yIIPJga9gBYgdS7as2bNo06pNO6Ct27dw3a6dS5ds3LgNEDSAm3fv3b8D6tZ90QRsWMGIEwsGDFix47GM2yKYDHcygshxH5914cTwV82gNWPOHBoxZsuVKY+WW1pAjCeeD7SeTXf1W9q1IyNYwLt378u2A7eGAdtz8OPIk2PGPfe07+fAbbcmASW28uvYkzNfe5qB9+/fo68uzSGK9ezo0zfezla3areog4fesOW8+vv32bdnHB/++/GgcRGbfvohR+BZp/03QH8APnaBgJ4duJ2BEtoVWV986XWcZkhBaMxYhbhRCKIA+C3nWAheIBDhiK2JCGKJkT0mghcTrMhiaC5WCCNjjo0ABggf3ojjhizuCBgEiXkgRpBCikbkiEb+VQBi/rDxAQIdNAlajhJGGZcNFCDmx5hkrkTPmWimWUCZRgSAQV0ZsClnmWrWWeecQ5BBQQFIpqUBnoDyYeegZwZq6KGAEoqAAw4gQCiikEbaB6EOpOLAo5JmqmkYlFqK6aaghuqEoow6OqioqKZqEaGsrqnqq6m22iqstIaawK245qrrrrzmWisYQQAAOw=="
Public _Image As Bitmap
Public _Color As Color
Public Property ColorLaser As Color
Get
Return _Color
End Get
Set(value As Color)
If value = Color.Transparent Then
Throw New ArgumentException(String.Format("La couleur {0} ne peut étre utiliser dans le laser.", Color.Transparent))
Return
Else
_Color = value
Me.Invalidate()
End If
End Set
End Property
Public Sub New()
Me.SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.UserPaint, True)
Me.Size = New Size(450, 30)
Me._Image = CodeToImage(_Laser)
Me._Color = Color.Red
End Sub
Protected Overrides Sub OnResize(ByVal e As EventArgs)
MyBase.OnResize(e)
If Me.Height <> 30 Then
Me.Height = 30
ElseIf Me.Width <> 450 Then
Me.Width = 450
End If
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim rect As New Rectangle(0, 0, Me.Width, Me.Height)
e.Graphics.FillPath(New SolidBrush(_Color), RoundedRectangle(rect.X / 2 + _Image.Width / 2 - 18, rect.Y + 4, CInt((Value / Maximum) * (rect.Width - 95)), rect.Height / 1.5))
e.Graphics.SmoothingMode = SmoothingMode.HighQuality
e.Graphics.DrawImage(_Image, New Rectangle(rect.X, rect.Y, _Image.Width / 2, rect.Height))
End Sub
Public Function CodeToImage(ByVal Code As String) As Image
Return Image.FromStream(New System.IO.MemoryStream(Convert.FromBase64String(Code)))
End Function
Private Function RoundedRectangle(x As Integer, y As Integer, ProgressWidth As Integer, height As Integer) As Drawing2D.GraphicsPath
Return RoundRect(New Rectangle(x, y, ProgressWidth, height))
End Function
Private Function RoundRect(rectangle As Rectangle) As Drawing2D.GraphicsPath
RoundRect = New GraphicsPath()
If rectangle.Left Then
RoundRect.AddArc(New Rectangle(rectangle.X, rectangle.Y, rectangle.Height, rectangle.Height), -260, 180)
Else
RoundRect.AddLine(rectangle.X, rectangle.Y + rectangle.Height, rectangle.X, rectangle.Y)
End If
If rectangle.Right Then
RoundRect.AddArc(New Rectangle(rectangle.X + rectangle.Width - rectangle.Height, rectangle.Y, rectangle.Height, rectangle.Height), -90, 180)
Else
RoundRect.AddLine(rectangle.X + rectangle.Width, rectangle.Y, rectangle.X + rectangle.Width, rectangle.Y + rectangle.Height)
End If
RoundRect.CloseAllFigures()
Return RoundRect
End Function
End Class
Aucun commentaire:
Enregistrer un commentaire