5/5 (13 avis)
Vue 15 464 fois - Téléchargée 2 233 fois
'a mettre dans un module ''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim YMax(4) As Double Dim YMin(4) As Double Dim XMax(4) As Long Dim XMin(4) As Long 'heure : l'heure de l'aquisition 'data : la valeure de l'aquisition 'capteur : le nom de la forme "capteur1" 'NomCapteur : le nom pour le titre de la forme Function Graph(Heure As String, data As Double, capteur As String, NomCapteur As String) Dim NumCap As Integer Dim f As Form For Each f In Forms If f.Name = capteur Then 'on recherche pour voir si la forme est active NumCap = Int(Mid(capteur, 8, 1)) If f.Graph.Tag = "" Then 'première édition YMax(NumCap) = 0 YMin(NumCap) = Val(999999.9999) 'valeure max pour mes capteurs f.Graph.Tag = "fin" f.Graph.ColumnCount = 1 '1 seul capteur f.Graph.RowCount = 0 'pas de données f.Graph.Plot.Axis(2).AxisScale.Hide = True 'on cache les valeure numérique à droite With f.Graph.Plot.Axis(VtChAxisIdY) 'on définit l'axe des Y .CategoryScale.Auto = False .CategoryScale.DivisionsPerLabel = 3 .CategoryScale.DivisionsPerTick = 3 .CategoryScale.LabelTick = True .ValueScale.MinorDivision = 0 End With 'Les noms des axes et du graphique f.Graph.Plot.Axis(VtChAxisIdY).AxisTitle.Text = "HZ" 'je recois une frequence f.Graph.Plot.Axis(VtChAxisIdX).AxisTitle.Text = "Heure" 'par rapport au temps With f.Graph.Plot.Axis(VtChAxisIdX) 'on définit l'axe des Y .CategoryScale.Auto = False .CategoryScale.DivisionsPerLabel = 5 .CategoryScale.DivisionsPerTick = 5 .CategoryScale.LabelTick = True .ValueScale.MinorDivision = 0 End With XMin(NumCap) = Int(Mid(Heure, 1, 2) * 10000 + Mid(Heure, 4, 2) * 100 + Mid(Heure, 7, 2)) 'le nom de la forme... retiré du titre du graph car prend trop de place ! f.Caption = NomCapteur End If 'a tous les coups f.Graph.Column = 1 'On choisit le capteur 1 ' ' si le graphe a plus de 32 767 données il plante :( ' 32767 est la donnée max pour un integer ! ' If f.Graph.RowCount >= 32767 Then 'décalage de 1 donnée sur la gauche 'on perd la donnée de gauche For j = 2 To 32767 f.Graph.Row = j TempHeure$ = f.Graph.RowLabel TempData% = f.Graph.data f.Graph.Row = j - 1 f.Graph.RowLabel = TempHeure$ f.Graph.data = TempData% Next f.Graph.Row = 32767 Else 'on continue à compter f.Graph.RowCount = f.Graph.RowCount + 1 End If 'dernière donnée f.Graph.Row = f.Graph.RowCount f.Graph.RowLabel = Heure 'mettre l'heure sur le graphe f.Graph.data = data 'mettre la donnée sur le graphe If YMax(NumCap) < data Then YMax(NumCap) = data + (10 - (data Mod 10)) If YMin(NumCap) > data Then YMin(NumCap) = data - (data Mod 10) 'axes des Y If YMax(NumCap) - YMin(NumCap) < 11 Then f.Graph.Plot.Axis(VtChAxisIdY).ValueScale.MajorDivision = YMax(NumCap) - YMin(NumCap) Else f.Graph.Plot.Axis(VtChAxisIdY).ValueScale.MajorDivision = 10 End If With f.Graph.Plot.Axis(VtChAxisIdY) .ValueScale.Maximum = YMax(NumCap) .ValueScale.Minimum = YMin(NumCap) End With 'Axes des X If f.Graph.RowCount < 11 Then f.Graph.Plot.Axis(VtChAxisIdX).CategoryScale.DivisionsPerLabel = 1 f.Graph.Plot.Axis(VtChAxisIdX).CategoryScale.DivisionsPerTick = 1 Else f.Graph.Plot.Axis(VtChAxisIdX).CategoryScale.DivisionsPerLabel = Int(f.Graph.RowCount / 10) f.Graph.Plot.Axis(VtChAxisIdX).CategoryScale.DivisionsPerTick = Int(f.Graph.RowCount / 10) End If End If 'fin de la forme Next End Function ''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''' Dans votre forme Capteur1 '' où il y a 1 MSCHARt nommé graph ''' mettez ce code ''''''''''''''''''''''''''''''''''''''''''''''''''' Dim lar As Long, lng As Long Private Sub Form_Load() lng = Me.Width lar = Me.Height Graph.Top = 0 Graph.Left = 0 Graph.Width = lng Graph.Height = lar - 200 Graph.Plot.SeriesCollection(1).Pen.VtColor.Blue = False Graph.Plot.SeriesCollection(1).Pen.VtColor.Green = False Graph.Plot.SeriesCollection(1).Pen.VtColor.Red = True End Sub Private Sub Form_Resize() Dim ctl As Control If (Me.WindowState = 1) Then Exit Sub For Each ctl In Me.Controls If TypeOf ctl Is ComboBox Then ctl.Move ctl.Left * Me.Width / lng, ctl.Top * Me.Height / lar, ctl.Width * Me.Width / lng Else 'Les comboboxes ont leur propriété Height en lecture seule ctl.Move ctl.Left * Me.Width / lng, ctl.Top * Me.Height / lar, _ ctl.Width * Me.Width / lng, ctl.Height * Me.Height / lar End If Next lng = Me.Width lar = Me.Height End Sub
29 juil. 2004 à 10:17
30 juil. 2004 à 01:53
Biensur....c'est quoi ? :p
30 juil. 2004 à 10:13
Si ce n'est pas le cas vas vite chercher un cours de VB sur le NET ;)
27 nov. 2004 à 17:14
et comme toi tu vas jusque 32 000, comment tu fais pr ne pas avoir de clignotement ??
Est-ce que tu pourrais mettre le zip stp..
D'avance merci.
Denis.
19 juil. 2008 à 14:18
Excellent ta source!
J'ai cependant un petit souci, je n'arrive pas à faire afficher les valeurs négatives...
Une idée?
Merci.
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.