Bargraphe pour vumetre

Soyez le premier à donner votre avis sur cette source.

Vue 9 641 fois - Téléchargée 687 fois

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

Ajouter un commentaire Commentaires
Messages postés
28
Date d'inscription
dimanche 16 octobre 2005
Statut
Membre
Dernière intervention
28 mars 2010

Le projet pour lequel j'ai fait ce bargraphe est disponible ici:

http://www.vbfrance.com/codes/CONTROL-UTILISER-PLUS-FACILEMENT-FMODEX-DLL_51542.aspx
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
tiens te prends pas la tête est bosse la dessus :
http://www.vbfrance.com/codes/AMELIORATION-VU-METRE-LUCIOL44_51519.aspx
@++
Messages postés
28
Date d'inscription
dimanche 16 octobre 2005
Statut
Membre
Dernière intervention
28 mars 2010

Merci ADN56, je viend de voir ca je ne contrend pas non plus cette dent de scie. Si non pour le VBarGraphe (VingtBarGraphe) je vais en faire un modulable en nb de bar. Mais le code n'est pas trop compliqué a rectifier pour passer de 20 a 10. Il faut redim les tableaux, redim la bitmap et redim les boucle k. Je vais te faire ca dans la soirée.

Merci a++
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
avec :
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
ou sans d'ailleur (fonction supprimée)
je tombe à 1% de cpu, mais à chaque fois que la form est cachée le fichier d'échange monte !
je bosse dessus....
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
je viens de tester ta nouvelle source :
8% utilisation maxi de la cpu, en revanche le fichier d'échange monte à plus de 300mo (de 700 à 1Go chez moi) lorsque la form est caché et ce en dent de scie.
étrange....
Pour finir revois ta form principal car chez moi elle fonctionne, mais avec un plantage sur le designer.
une fois compilé c'est OK

amélioration pour le Vbar :
redimensionnement complet, pas seulement la hauteur
nombre de colonne réglable, ici 20 mais si j'ai que 10 bandes de fréquences ?

Bon boulot, continu.
Afficher les 21 commentaires

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.