Rechercher dans ce blog

mercredi 29 décembre 2021

PorogressbarVoiture

 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