Rechercher dans ce blog

mercredi 29 décembre 2021

Progressbar Rainbow

 Voici comment realiser un progressbar rainbow avec un gif.


Vous pouvez choisir entre 2 gif ou pas.

ma classes :

Public Class ProgressbarRainbow
    Inherits ProgressBar

    Private _Gif1 As String = "R0lGODlhHgASAPYAAAAAAAkJCQkSDhMTExwcHBIlHS8mHCUQMyQgJiQkJCYmJj8vLD8zJj8mPzY2Njc1OTk5OV9gJi43VDg+UUlCQkhBTElBTUlETEpHTExMTFlMTFlMWV9fX2RHTH9MTG9ZQnJfTGxfX39mTGZMZnJMcn9Mf25ubnhlbWxicm1ic3Jycnx8fIx2f6Vycn5yhZ9fn79Zpb9yv/9Msv9fxf9mzP9y2P9/5YWFhY+Pj5GDmZKSkpmZmZ+ZmZ+fn6WZmbKZmaKioqWlpaysrMyZmf+Zmf+/sv/Mmf/In//Fpd+F3/+fzP+1xf+yzP+s2P+F6/+M8v+S+P+Z//+i69nZ2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFQALAAAAAAeABIAAAf+gFSCg1QAhoeIiYSLiwxGR0WRkpNFSEYfjIwAj0tRnlFOnqGeTUdGAJmEm0tQo1EznrCfS0eoqYKbUU81n59JJTE2NlFFqCwYJ5m5vb0kGSMww8U5GBkYKJpGzDOjCjs3Gy/EAAgrOxkW2cxOUJ7e3xsNCwAqO+cV6lE2NMzv9v//0BGKYEgbMxlRANgLouMGQCDmMmCjooDDjk02EDJTuEMIhwz26uHwJpEKhxsqVCwT1S4hjx8hKtrzpoDCDw0oSAoosElKq1ejAPwgMiTlDotHh3pAISHDBFxGkCjh1atEiCE/MijIMCCDVh8tOrhYBEBEVCZo0zIBYVGF17c2J68tOpCSgd27dw0EUMC3L98HY8nONEFABQEThExAUAHBhIKUCnooMyQIiCEgi0xcnmLIAaFAADs="
    Private _Gif2 As String = "R0lGODlhGAAYAPcAAAAAAEs/TlBEU1NGU1VIVVpNV1ZLWVpNWFtOWVhOW2BSXF1TYGBWYmRaZ351f4JGQYNHQoVIQoRIQ4VJQ4ZKRIZLRIdLRIZKRYhMRYlMRohNRolNRolORopOR4tOR4tPR4tRSYxSSo5SSo9TS5BUTJJWTZRYTpRYT5VZT5ZbT5VZUJZZUJZaUJZaUZdaUZhcUoNubIByc6NvYKNwYahzY6l1ZOhncON3eJSDfKaMfriKdbyOeL6Qer6Rer6Se7+UfcOXfoZ/ifp7gvh9g5CJkpiSmq+ci7Gdi7eciMiehOyEgv+Ah86ni8+ojNSrj8Crlcutk9SvkcaxmNayk9aylNi0ldi1ltu4mNG8oNa/odjCo9zFpdzFpuPEoeTFoubHpObIpOfJpejJpujKpunLp+nMp+LLqePMqufPrOrNqOvOqevPqevPquzOqevRquzQqu3Rq+vTru3RrO7SrO/UrezUr+3Vr+/UrvDVrvLXsPDYsfLYsPPZsvPas/Tbs/Xbs/bbs/TbtPTctPXctPXdtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAAIf8LWE1QIERhdGFYTVA8P3hwYWNrZXQgYmVnaW49J++7vycgaWQ9J1c1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCc/Pgo8eDp4bXBtZXRhIHhtbG5zOng9J2Fkb2JlOm5zOm1ldGEvJyB4OnhtcHRrPSdJbWFnZTo6RXhpZlRvb2wgMTIuMzInPgo8cmRmOlJERiB4bWxuczpyZGY9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMnPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6dGlmZj0naHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8nPgogIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiA8L3JkZjpEZXNjcmlwdGlvbj4KPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0ndyc/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACwAAAAAGAAYAAAI/gABCBxIsKDBgxg2HDTIwuCFBx9Y6BATaJDFi4PcyNhwgkVDgRsebGDBIw3GkxZnPPD48cGFFC+88EF5cs6DER4BhMRZwyRNjIFGTGAZAYJHHnB+npTxIIXHDSNZNLmjFOOPByQ+lvB4haoWLijNYLFYRWQKgR5fgJmjhUgQsBfROCjyZBAfCBBeoGVBIwycIwYYGMEoRUADHBZBQFAIwCOTMHO4DEAQB2OcAgTg8sAr0KmYMG4G2dFDyI+fi3yoXpxwgWCbMGEsEipt5ozFmRcJGYQDeyahOwQWKHDQ5+TCMmHS4AmDRECBBQughMlzcSGAz1WiRIEhQEEO7VX+OAyyLrDLFO3oz0eZkob8QPVRnDhJ754gkCQ3bNi4kQRI/YI7DCGEEEPs8J9BSiyxhBIHNujgfwEBADs="

    Private _ModeImage As ProgressBarGIF
    Property ProgressBarModeGIF As ProgressBarGIF
        Get
            Select Case _ModeImage
                Case (ProgressBarGIF.NoGif)
                    _image = Nothing
                Case (ProgressBarGIF.Gif1)
                    _image = CodeToImage(_Gif1)
                Case (ProgressBarGIF.Gif2)
                    _image = CodeToImage(_Gif2)
            End Select
            Return _ModeImage
        End Get
        Set(value As ProgressBarGIF)
            _ModeImage = value
            Me.Invalidate()
        End Set
    End Property

    Dim _image As Image = Nothing
    Property ProgressbarImage As Image
        Get
            Return _image
        End Get
        Set(value As Image)
            _image = value
        End Set
    End Property

    Public Sub New()
        Me.SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.UserPaint, True)
        Me.DoubleBuffered = True
    End Sub

    Protected Overrides Sub OnResize(ByVal e As EventArgs)
        MyBase.OnResize(e)
        If Me.Height <> 23 Then
            Me.Height = 23
        End If
    End Sub

    Private Sub ProgressBar_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles MyBase.Paint
        Dim rect As New Rectangle(0, 0, Me.Width, Me.Height)
        If ProgressBarRenderer.IsSupported Then
            ProgressBarRenderer.DrawHorizontalBar(e.Graphics, rect)
        End If
        rect.Inflate(-1, -1)
        rect.Width = (rect.Width / (Me.Maximum - Me.Minimum) * Value)
        If rect.Width < 0 Then Return
        Dim brushArray As Brush() = New Brush() {Brushes.Red, Brushes.Orange, Brushes.Yellow, Brushes.Green, Brushes.Blue, Brushes.Indigo, Brushes.Violet}
        For i = 0 To 6
            Dim brush As Brush = brushArray(i)
            e.Graphics.FillRectangle(brush, 0, (1 + 4 * i), rect.Width, rect.Height)
        Next i
        If _image IsNot Nothing Then
            Dim bm_source As New Bitmap(_image, New Size(_image.Width, rect.Height))
            e.Graphics.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
            e.Graphics.DrawImage(bm_source, rect.Width - bm_source.Width + 12, rect.Height - bm_source.Height + 1)
        End If
    End Sub

    Public Function CodeToImage(ByVal Code As String) As Image
        Return Image.FromStream(New System.IO.MemoryStream(Convert.FromBase64String(Code)))
    End Function

    Public Enum ProgressBarGIF
        NoGif
        Gif1
        Gif2
        'les dimensions du gif maxi 30x30
    End Enum
End Class


Aucun commentaire:

Enregistrer un commentaire