Bargraphe pour vumetre

Description

Voila un petit control qui vous fait un Bargraphe facon Vumetre. C'est un projet que j'ai fait pour une apli mais la ou je bute c'est que c trop gourmand en resource (faire le teste quand on en pose une dizaine). Je pense que va viend de la methode de dissin que j'utilise donc si quelqu'un trouve la solution ou une piste pour que ce soi light en resource, je suis preneur.

Le control a ete corrigé pour utiliser moin de resource

Source / Exemple :


Option Strict On
Option Explicit On

Imports System.ComponentModel
Imports System.Drawing.Drawing2D

Public Class BarGraphe
#Region "Variable local"
    Private mNiveau As Integer = 0                                      'niveau courant du bargraphe
    Private mCouleurBasGris As Color = Color.FromArgb(&HFF00A500)       'couleur des bars du bas éteintes
    Private mCouleurBas As Color = Color.FromArgb(&HFF00FF00)           'couleur des bars du bas allumées
    Private mCouleurMilieuGris As Color = Color.FromArgb(&HFFA5A500)    'couleur des bars du milieu éteintes
    Private mCouleurMilieu As Color = Color.FromArgb(&HFFFFFF00)        'couleur des bars du milieu allumées
    Private mCouleurHautGris As Color = Color.FromArgb(&HFFA50000)      'couleur des bars du haut éteintes
    Private mCouleurHaut As Color = Color.FromArgb(&HFFFF0000)          'couleur des bars du haut allumées
    Private mBloquage As Boolean = True                                 'indique s'il y a maintiend du niveau max
    Private mTempMaintiend As Integer = 30                              'temps du maintiend du niveau max
    Private Pique As Integer = 28                                       'valeur courante du niveau max

    Private Maintiend As Integer
#End Region

#Region "Propriété"
    <Description("Niveau de BarGraph, de 0 à 1000"), Category("Etat")> _
    Property Niveau() As Integer
        Get
            Return mNiveau
        End Get
        Set(ByVal value As Integer)
            Select Case value
                Case Is < 0
                    mNiveau = 0
                Case Is > 1000
                    mNiveau = 1000
                Case Else
                    mNiveau = value
            End Select
            Timer1.Enabled = mBloquage
            Invalidate()
        End Set
    End Property

    <Description("Active le maintiend du niveau max"), Category("Etat")> _
    Property Bloquage() As Boolean
        Get
            Return mBloquage
        End Get
        Set(ByVal value As Boolean)
            Timer1.Enabled = value
            mBloquage = value
            Invalidate()
        End Set
    End Property

    <Description("Temps de maintiend du niveau max, en centième de seconde"), Category("Etat")> _
    Property TempMaintiend() As Integer
        Get
            Return mTempMaintiend
        End Get
        Set(ByVal value As Integer)
            mTempMaintiend = value
            Invalidate()
        End Set
    End Property

    <Description("Couleur des bars du bas éteintes en ARGB"), Category("Apparence")> _
    Property CouleurBasGris() As Color
        Get
            Return mCouleurBasGris
        End Get
        Set(ByVal value As Color)
            mCouleurBasGris = value
            Invalidate()
        End Set
    End Property

    <Description("Couleur des bars du bas allumées en ARGB"), Category("Apparence")> _
    Property CouleurBas() As Color
        Get
            Return mCouleurBas
        End Get
        Set(ByVal value As Color)
            mCouleurBas = value
            Invalidate()
        End Set
    End Property

    <Description("Couleur des bars du milieu éteintes en ARGB"), Category("Apparence")> _
    Property CouleurMilieuGris() As Color
        Get
            Return mCouleurMilieuGris
        End Get
        Set(ByVal value As Color)
            mCouleurMilieuGris = value
            Invalidate()
        End Set
    End Property

    <Description("Couleur des bars du milieu allumées en ARGB"), Category("Apparence")> _
    Property CouleurMilieu() As Color
        Get
            Return mCouleurMilieu
        End Get
        Set(ByVal value As Color)
            mCouleurMilieu = value
            Invalidate()
        End Set
    End Property

    <Description("Couleur des bars du haut éteintes en ARGB"), Category("Apparence")> _
    Property CouleurHautGris() As Color
        Get
            Return mCouleurHautGris
        End Get
        Set(ByVal value As Color)
            mCouleurHautGris = value
            Invalidate()
        End Set
    End Property

    <Description("Couleur des bars du haut allumées en ARGB"), Category("Apparence")> _
    Property CouleurHaut() As Color
        Get
            Return mCouleurHaut
        End Get
        Set(ByVal value As Color)
            mCouleurHaut = value
            Invalidate()
        End Set
    End Property
#End Region

#Region "fonction local"
    Private Sub BarGraphe_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'affiche l'image du bargraphe dans le picture box au chargemeent du control

    End Sub

    Private Sub BarGraphe_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim Niv As Integer
        Dim i As Integer
        Dim BrushDraw As New SolidBrush(Color.FromArgb(0))
        Dim objBitMap2 As New Bitmap(20, 172)
        Dim objGraphics2 As Graphics = Graphics.FromImage(objBitMap2)

        '+++++++++++++++++preparation de l'image tempon+++++++++++++++++
        objGraphics2.Clear(Color.Black)
        '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        Niv = ((-28 * mNiveau) \ 1000) + 28   'calcule du nb de bar a afficher a 65%
        For i = 0 To 27
            If i < Niv Then
                '++++++++++++++++++++++affichage de bar éteinte+++++++++++++++
                Select Case i
                    Case Is < 6
                        'rouge a 65%
                        BrushDraw.Color = mCouleurHautGris
                    Case 6 To 11
                        'Jaune a 65%
                        BrushDraw.Color = mCouleurMilieuGris
                    Case Else
                        'vert a 65%
                        BrushDraw.Color = mCouleurBasGris
                End Select
                objGraphics2.FillRectangle(BrushDraw, 3, i * 6 + 3, 14, 4)
            Else
                '+++++++++++++++++affichage de bar allumé++++++++++++++++++
                Select Case i
                    Case Is < 6
                        'rouge a 100%
                        BrushDraw.Color = mCouleurHaut
                    Case 6 To 11
                        'Jaune a 100%
                        BrushDraw.Color = mCouleurMilieu
                    Case Else
                        'vert a 100%
                        BrushDraw.Color = mCouleurBas
                End Select
                objGraphics2.FillRectangle(BrushDraw, 3, i * 6 + 3, 14, 4)
            End If
            '++++++++++++++++gestion du pique+++++++++++++++++++++++++++
            If mBloquage Then
                If i = Pique Then
                    Select Case Pique
                        Case Is < 6
                            'rouge a 100%
                            BrushDraw.Color = mCouleurHaut
                        Case 6 To 11
                            'Jaune a 100%
                            BrushDraw.Color = mCouleurMilieu
                        Case Else
                            'vert a 100%
                            BrushDraw.Color = mCouleurBas
                    End Select
                    objGraphics2.FillRectangle(BrushDraw, 3, i * 6 + 3, 14, 4)
                End If
            End If
            '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        Next
        '+++affichage du bargraphe dans le picturebox et liberation de l'image tempon++++++
        picBarGraphe.Image = objBitMap2
        '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    End Sub

    Private Sub BarGraphe_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        'redimensionnement du picture box en meme temps que le control
        picBarGraphe.Width = Me.Width - 5
        picBarGraphe.Height = Me.Height - 5
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        'calcule et generation des piques
        Dim tNiveau As Integer

        tNiveau = ((-28 * mNiveau) \ 1000) + 28
        If Pique > tNiveau Then
            Pique = tNiveau
            Maintiend = mTempMaintiend
        Else
            If Maintiend = 0 Then
                If Pique <> 28 Then
                    Pique += 1
                    Maintiend = 0
                End If
            Else
                Maintiend -= 1
            End If
        End If
        If Pique = 28 Then
            Timer1.Enabled = False
        End If
        Invalidate()
    End Sub

    Private Sub BarGraphe_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.VisibleChanged
        'quand il est pas visible on coupe les timers
        Timer1.Enabled = Me.Visible
    End Sub
#End Region
End Class

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.