Graphique type "area" dynamique [Résolu]

Signaler
Messages postés
7
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
5 juillet 2012
-
cs_benj11
Messages postés
7
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
5 juillet 2012
-
Salut tous le monde,

J'aimerai intégrer dans mon application un graphique type area. J'ai vu des sujets sur le composant "MSCHART" cependant il ne me convient pas, car il ne prend pas "toute la place" (même en effacant les textes etc ...).
De plus je voudrai pouvoir définir le nombres de points maximum sur l'axe X et qu'il soit dynamique.

Ce graphique doit correspondre aux variations de températures sur 1h (1 point par minute).
Si vous utilisez JDownloader, quand vous avez des fichiers en cours de téléchargement, il a le graphique que j'aimerai avoir qui apparaît en haut à droite de la fenêtre.

J'ai trouvé un OCX appellé "SpeedGraph" qui pourrait me convenir, mais il est impossible d'enlever le texte "speed: x Ko/s Speed Average: x Ko/s" :s

Si vous connaissez d'autres OCX qui correspondrait à ce que je recherche je vous en sera reconnaissant de me les partager ^^

Merci d'avoir lu

Tchao~

4 réponses

Messages postés
7
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
5 juillet 2012

Salut,

Merci pour vos réponses, effectivement, je parlais du VB6, autant pour moi j'ai pas fais gaffe que le VB6 était séparé du VB.net ... :s

En farfouillant loin sur le net j'ai trouvé une source sur planetsource

http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=73383&lngWId=1</code>


J'ai modifié pour ne gardé que la partie graphique (le module "clsLineGraph" est suffisant)

'===============================================================
'Il faut au préalable sur votre Form au moins 1 PictureBox
'Ne pas oublier d'ajouter le module de classe clsLineGraph
'===============================================================

Option Explicit

Dim NOMGRAPHIQUE As New Collection  '//Ou seront stocké les différents point de la courbe de votre graphique
Dim DRWGRAPH As New clsLineGraph  '//Ou seront stocké les infos pour votre graphique

Privat Sub Form_Load()
Do: NOMGRAPHIQUE.Add 0: Loop While NOMGRAPHIQUE.Count < 100 '//Mise à zéro du graphique
DRWGRAPH.PicBackground = vbBlack '//Couleur de fond du graphique
DRWGRAPH.PicForeground = vbGreen '//Couleur de la courbe du graphique
DRWGRAPH.GridColor = &H408000 '//Couleur de la grille du graphique
DRWGRAPH.GridVisible = True '//Afficher la grille

End Sub

'====================================================================================
'Il ne reste plus qu'à ajouter des points à votre graphique et de le redessiner
'Exemple avec un Timer ci dessous                                              
'====================================================================================

Private Sub Timer1_Timer()

Set DRWGRAPH.PictureBox = Picture1 '//Selection de la PictureBox sur laquelle sera dessiné le graphique
Set DRWGRAPH.DataCollection = NOMGRAPHIQUE '//Choix de la "collection" (Liste des différents points de la courbe)

NOMGRAPHIQUE.Add Int(rnd*10) '//Ajouter un point à la "collection" (ici un random, mais cela peut etre n'importe quelle chiffres évidement ^^)

DRWGRAPH.Draw '//Dessiner le graphique

End Sub

'=======================================================================================
'Un point d'un valeur aléatoire comprise entre 0 et 10 devrait alors normalement  
'se dessiner sur la PictureBox toutes les X ms (en fonction bien sûr de l'interval
'donné au Timer.                                                                  
'=======================================================================================


Voilà, désolé encore pour la mauvaise section, décidément je n'ai pas les yeux en face des trous ><
J'espère en tout cas que ce bout de source de planetsourcecode.com en aidera certains

Merci de vos réponses
Tchao ~

Bonsoir,
J'ai trouvé un OCX appellé "SpeedGraph" qui pourrait me convenir,
Es-tu sûr d'avoir posté dans la bonne section ? (peut-être est-ce du vb6 ?)

Sinon, pourquoi ne pas le créer toi même ce graphique ?

Voici un exemple que j'ai proposé il y a un moment.
L'optimisation du code est à revoir mais peut déjà te donner une idée sur la façon de procéder :
Option Strict On
Public Class Form1
    Private p As clsCourbeTemperature
    Private rd As Random = New Random
    Private WithEvents tmr As New System.Windows.Forms.Timer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'c'est ici qu'on instancie la classe en fournissant des paramètres
        p = New clsCourbeTemperature(Me, Color.GreenYellow, Color.Black, 1000, 20, 12, "0°C", "100°C")
        tmr.Interval = 1000
        tmr.Start()
    End Sub

    Private Sub tmr_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmr.Tick
        'simulation d'une température entre 0 et 100 degrés
        'tu peux fournir à la classe, des valeurs issues d'un capteur par exemple.
        p.Temperature = rd.Next(0, 100)
    End Sub


    Public Class clsCourbeTemperature
        Inherits PictureBox
        Dim m_EcartEntrePoints, m_NombrePointsMax As Integer
        Dim m_NombreHautEchelle, m_NombreBasEchelle As String
        Dim m_CouleurFond, m_CouleurTrait As Color
        Dim m_Temperature As Double
        Dim m_col As New List(Of Integer)
        Dim b As Bitmap
        Dim g As Graphics
        Dim ft As New Font("Arial", 13, FontStyle.Regular, GraphicsUnit.Pixel)

        Public Sub New(ByVal ParentForm As Form, _
                       ByVal CouleurTrait As Color, _
                       ByVal CouleurFond As Color, _
                       ByVal TempsRafraichissement As Double, _
                       ByVal EcartEntrePoints As Integer, _
                       ByVal NombrePointsMax As Integer, _
                       ByVal NombreBasEchelle As String, _
                       ByVal NombreHautEchelle As String)
            Me.Width = ParentForm.ClientRectangle.Width
            Me.Height = ParentForm.ClientRectangle.Height
            Me.Parent = ParentForm
            m_EcartEntrePoints = EcartEntrePoints
            m_NombrePointsMax = NombrePointsMax
            m_CouleurFond = CouleurFond
            m_CouleurTrait = CouleurTrait
            m_NombreHautEchelle = NombreHautEchelle
            m_NombreBasEchelle = NombreBasEchelle
            b = New Bitmap(Me.Width, Me.Height)
            g = Graphics.FromImage(b)
        End Sub

        Public WriteOnly Property Temperature() As Double
            Set(ByVal value As Double)
                m_Temperature = value
                If m_col.Count - 1 >= m_NombrePointsMax Then m_col.RemoveAt(0)
                m_col.Add(Convert.ToInt32(((100 - m_Temperature) / 100) * Me.Height))
                g.FillRectangle(New SolidBrush(m_CouleurFond), New Rectangle(0, 0, b.Width, b.Height))
                g.DrawString(m_NombreBasEchelle, ft, New SolidBrush(Color.White), 5, Me.Height - 20)
                g.DrawString(m_NombreHautEchelle, ft, New SolidBrush(Color.White), 5, 5)
                For x = 0 To Me.Height - 1
                    If x Mod Convert.ToInt32((Me.Height / 4)) = 0 Then
                        g.DrawLine(New Pen(Color.FromArgb(70, 0, 220, 0)), 0, x, Me.Width, x)
                    End If
                Next
                For x = 1 To m_col.Count - 1
                    g.DrawLine(New Pen(m_CouleurTrait, 2), _
                               New Point(x * m_EcartEntrePoints, m_col.Item(x - 1)), _
                               New Point((x * m_EcartEntrePoints) + m_EcartEntrePoints, m_col.Item(x)))
                    If x = m_col.Count - 1 Then
                        g.DrawString(m_Temperature.ToString & " °C", _
                                     ft, _
                                     New SolidBrush(Color.Orange), _
                                     (x * m_EcartEntrePoints) + m_EcartEntrePoints, _
                                     m_col.Item(x))
                    End If
                Next
                Me.Image = CType(b.Clone, Image)
            End Set
        End Property
    End Class
End Class
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Perso j'utilise ZEDGRAPH voir mes sources pour les exemples (pas sur qu'il marche en VBA)

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches. Merci