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
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.