Bonjour,
J'avais réalisé une petite classe qui permet d'afficher une température en fonction du temps dans un graphe.
Tu pourra peut-être t'en inspirer pour ton projet.
Voici le code qu'il suffit de coller dans un nouveau projet :
Option Strict On
Public Class Form1
Dim rd As Random = New Random
'déclaration de la classe qui hérite d'un picturebox standard
Dim p As clsCourbeTemperature
'ajout d'un timer
Dim tmr As New System.Timers.Timer(1000)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'instanciation de la classe
p = New clsCourbeTemperature(Me.ClientRectangle, Color.GreenYellow, Color.Black, Color.Orange, _
1000, 20, 12, "0°C", "100°C", Color.Green, True)
Me.Controls.Add(p)
'ajout d'un événement au timer
AddHandler tmr.Elapsed, AddressOf tmr_Elapsed
tmr.Start()
End Sub
Private Sub tmr_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs)
'simulation d'une donnée aléatoire (entre 10 et 90 degrés) à fournir à la classe
p.Temperature = rd.Next(10, 90)
End Sub
Public Class clsCourbeTemperature
'classe héritant d'un picturebox
Inherits PictureBox
'variables à mémoriser
Dim m_EcartEntrePoints, m_NombrePointsMax As Integer
Dim m_Temperature As Single
Dim m_NombreHautEchelle, m_NombreBasEchelle As String
Dim m_CouleurFond, m_CouleurTrait, m_CouleurData, m_CouleurGraphe As Color
Dim m_Graphe As Boolean
Dim m_col As New Collections.ArrayList
Dim b As Bitmap
Dim g As Graphics
'constructeur de la classe
Sub New(ByVal Taille As Rectangle, _
ByVal CouleurTrait As Color, _
ByVal CouleurFond As Color, _
ByVal CouleurData As Color, _
ByVal TempsRafraichissement As Double, _
ByVal EcartEntrePoints As Integer, _
ByVal NombrePointsMax As Integer, _
ByVal NombreBasEchelle As String, _
ByVal NombreHautEchelle As String, _
ByVal CouleurGraphe As Color, _
ByVal Graphe As Boolean)
'redimmesionnement du contôle
Me.Bounds = Taille
'affectation des variables
m_EcartEntrePoints = EcartEntrePoints
m_NombrePointsMax = NombrePointsMax
m_CouleurFond = CouleurFond
m_CouleurTrait = CouleurTrait
m_CouleurData = CouleurData
m_NombreHautEchelle = NombreHautEchelle
m_NombreBasEchelle = NombreBasEchelle
m_CouleurGraphe = CouleurGraphe
m_Graphe = Graphe
'nouveau bitmap sur lequel on va dessiner
b = New Bitmap(Me.Width, Me.Height)
'outil de dessin sur le bitmap
g = Graphics.FromImage(b)
End Sub
Public WriteOnly Property Temperature() As Single
Set(ByVal value As Single)
'réception d'une donnée
m_Temperature = value
If m_col.Count >= m_NombrePointsMax Then
m_col.RemoveAt(0)
End If
'on ajoute le point à la collection
m_col.Add(((100 - m_Temperature) / 100) * Me.Height)
'dessin du fond
g.FillRectangle(New SolidBrush(m_CouleurFond), New Rectangle(0, 0, b.Width, b.Height))
'dessin du graphe
If m_Graphe Then
Dim couleur As Color = Color.FromArgb(120, m_CouleurGraphe.R, m_CouleurGraphe.G, m_CouleurGraphe.B)
For x As Single = 0 To b.Height Step Convert.ToSingle(b.Height / 4)
g.DrawLine(New Pen(couleur), 0, x, b.Width, x)
Next
End If
'ecriture des echelles
Dim ft As New Font("Arial", 13, FontStyle.Regular, GraphicsUnit.Pixel)
g.DrawString(m_NombreBasEchelle, ft, New SolidBrush(Color.White), 5, Me.Height - 20)
g.DrawString(m_NombreHautEchelle, ft, New SolidBrush(Color.White), 5, 5)
'dessin des lignes selon la collection
For x = 1 To m_col.Count - 1
g.DrawLine(New Pen(m_CouleurTrait, 1), _
New Point(x * m_EcartEntrePoints, CType(m_col.Item(x - 1), Integer)), _
New Point((x * m_EcartEntrePoints) + m_EcartEntrePoints, CType(m_col.Item(x), Integer)))
'écriture de la donnée (dernière valeur)
If x = m_col.Count - 1 Then
ft = New Font("Fixedesys", 10, FontStyle.Italic, GraphicsUnit.Pixel)
g.DrawString(m_Temperature.ToString & "°C", _
ft, _
New SolidBrush(m_CouleurData), _
(x * m_EcartEntrePoints) + m_EcartEntrePoints, _
CType(m_col.Item(x), Integer) - 5)
End If
Next
'affichage du bitmap dans le contrôle
Me.Image = CType(b.Clone, Image)
End Set
End Property
End Class
End Class
A bientôt.