Voici comment réaliser un progressbarVoiture.
vous pouvez changer de couleur line et la route et pouvez déplacer avec la souris la voiture.
ma classes :
Public Class ProgressbarVoiture : Inherits ProgressBar
Private _Voiture As String = "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"
Private _VoitureImage As Image = Nothing
Private Moving As Boolean = False
Private rect As New Rectangle
Public Sub New()
Me.SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.UserPaint, True)
Me._ColorRoute = Color.FromArgb(144, 144, 144)
Me._ColorLine = Color.White
Me._VoitureImage = CodeToImage(_Voiture, 40, 40)
Me.Size = New Size(360, 40)
End Sub
Public _ColorLine As Color
Public Property ColorLine As Color
Get
Return _ColorLine
End Get
Set(value As Color)
If value = Color.Transparent OrElse value = _ColorRoute Then
Return
Else
_ColorLine = value
MyBase.Invalidate()
End If
End Set
End Property
Public _ColorRoute As Color
Public Property ColorRoute As Color
Get
Return _ColorRoute
End Get
Set(value As Color)
If value = Color.Transparent OrElse value = _ColorLine Then
Return
_ColorRoute = value
MyBase.Invalidate()
End If
End Set
End Property
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)
rect = New Rectangle(0, 0, Me.Width, Me.Height)
FillRectangle(e.Graphics, New SolidBrush(_ColorRoute), rect.X + 10, (rect.Y - 10) + rect.Height - 20, rect.Width - 40, rect.Height - 20, 8)
Using Pen As New Pen(New SolidBrush(Color.White), 4)
Pen.DashStyle = Drawing2D.DashStyle.Dash
Dim Height As Integer = rect.Height / 2
e.Graphics.DrawLine(Pen, rect.X + 15, rect.Y + Height + 10, rect.Width - 35, Height + 10)
End Using
Dim progressWidht As Integer = CInt(((rect.Width - 70) / (Maximum - Minimum)) * Value)
If _VoitureImage Is Nothing Then Return
e.Graphics.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
e.Graphics.DrawImage(_VoitureImage, progressWidht - (_VoitureImage.Width - 40), rect.Height - (_VoitureImage.Height + 1))
e.Graphics.DrawString(Value & " %", New Font("Microsoft Sans Serif", 10, FontStyle.Bold), Brushes.Black, New Rectangle((rect.X + 30) + progressWidht, rect.Y - 15, rect.Width, rect.Height), New StringFormat With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Center})
End Sub
Public Sub FillRectangle(ByVal g As Graphics, ByVal brush As Brush, ByVal x As Int32, ByVal y As Int32, ByVal width As Int32, ByVal height As Int32, ByVal radius As Int32)
Dim area As Rectangle = New Rectangle(x, y, width, height)
Dim path As Drawing2D.GraphicsPath = New Drawing2D.GraphicsPath
path.AddArc(area.Left, area.Top, radius * 2, radius * 2, 180, 90)
path.AddArc(area.Right - (radius * 2), area.Top, radius * 2, radius * 2, 270, 90)
path.AddArc(area.Right - (radius * 2), area.Bottom - (radius * 2), radius * 2, radius * 2, 0, 90)
path.AddArc(area.Left, area.Bottom - (radius * 2), radius * 2, radius * 2, 90, 90)
g.FillPath(brush, path)
End Sub
Private Function CodeToImage(code As String, width As Integer, Height As Integer) As Image
Dim _image As Image = Image.FromStream(New System.IO.MemoryStream(Convert.FromBase64String(code)))
Return New Bitmap(_image, New Size(width, Height))
End Function
Protected Overrides Sub OnResize(ByVal e As EventArgs)
MyBase.OnResize(e)
If Me.Height <> 50 Then
Me.Height = 50
End If
End Sub
Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseDown(e)
If Rect.Contains(e.Location) OrElse e.Button = Windows.Forms.MouseButtons.Left Then
Moving = True
End If
End Sub
Protected Overrides Sub OnMouseup(ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseUp(e)
Moving = False
End Sub
Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Forms.MouseEventArgs)
If Moving AndAlso e.X > -1 AndAlso e.X < CInt(Rect.Width + 2) Then
Value = CInt((Maximum - Minimum) * (e.X / Rect.Width))
End If
MyBase.OnMouseMove(e)
End Sub
Protected Overrides Sub OnMouseEnter(e As System.EventArgs)
MyBase.OnMouseEnter(e)
If Cursor.Equals(Cursors.Arrow) Then
Me.Cursor = Cursors.Hand
End If
End Sub
Protected Overrides Sub OnMouseLeave(e As System.EventArgs)
MyBase.OnMouseLeave(e)
If Cursor.Equals(Cursors.Hand) Then
Me.Cursor = Cursors.Arrow
End If
End Sub
End Class
Aucun commentaire:
Enregistrer un commentaire