Bonjour,
Je code un graph en temps réel ou j'affiche mes valeurs sous forme de barre
vertical, dans une pictureBox avec l'objet Line.
je désire que l'épaisseur de mes barres soit proportionnel à ma pictureBox
:
Pour être plus explicite : que j'ai 10 barres ou 100 barres , qu'elles soit
affichées dans la totalité de la largeur de ma pictureBox.
J'ai "joué" sur la propriété de DrawWidth mais mes barres se chevauchent.
Il faudrait que j'intercale un espace ou ligne verticale
Mais je ne sais pas comment m'y prendre.
Si qq'un du NG pouvait éclairer ma lanterne.
Extrait de mon code
***************** la fonction d'appel****************
Public Sub UpdateGraph(Pbox As PictureBox, BAR_HEIGHT As Long)
On Error Resume Next
'style du bargraph de la Picture box
Pbox.ScaleLeft = 0
Pbox.ScaleTop = 10
Pbox.ScaleWidth = 100
Pbox.ScaleHeight = -10
Pbox.DrawWidth = 10 'largeur de la barre
Pbox.BorderStyle = 0
Pbox.FillStyle = 0
Call ScrollBar(BAR_HEIGHT, Pbox)
End Sub
**************** Traitement ******************
Public Sub ScrollBar(BAR_HEIGHT As Long, Pbox As PictureBox)
'Visu du graph
'Trace les barres et en fin de parcoure efface les barres et recommence
un nouveau tracé.
If Horizontal_Position >= 100 Then
Horizontal_Position = 0
Pbox.Cls
Else
Horizontal_Position = Horizontal_Position + 1
End If
' Si on depasse la valeur de reference fixée par Vscroll1 (SeuilValue),
la barre devient rouge.
If SeuilValue <= BAR_HEIGHT Then
Pbox.Line (Horizontal_Position, 0)-(Horizontal_Position,
BAR_HEIGHT), vbRed, BF
Else
Pbox.Line (Horizontal_Position, 0)-(Horizontal_Position, BAR_HEIGHT),
vbGreen, BF
End If
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jacques93
Bonjour Max, Max a écrit :
Bonjour, Je code un graph en temps réel ou j'affiche mes valeurs sous forme de barre vertical, dans une pictureBox avec l'objet Line.
je désire que l'épaisseur de mes barres soit proportionnel à ma pictureBox : Pour être plus explicite : que j'ai 10 barres ou 100 barres , qu'elles soit affichées dans la totalité de la largeur de ma pictureBox.
J'ai "joué" sur la propriété de DrawWidth mais mes barres se chevauchent. Il faudrait que j'intercale un espace ou ligne verticale Mais je ne sais pas comment m'y prendre. Si qq'un du NG pouvait éclairer ma lanterne.
Pour déterminer la largeur de tes barres, il faut en connaître le nombre au préalable, la séparation entre les barres, elle, peut être fixe, ou proportionnelle, en fonction du nombre de barre.
Comme tu utilises un ScaleMode vbUser, tu as un système d'échelle personnalisé, mais la propriété DrawWidth demande un valeur en pixel, qui nécessite une conversiion avec ScaleX. Ci joint un petit bout de code (le nombre de barres est contenu dans Text1):
Option Explicit Dim SeuilValue As Integer Dim Horizontal_Position As Integer Dim BarWidth As Integer Dim SepWidth As Integer Dim nbBars As Integer
Private Sub Command1_Click() Dim i As Long
nbBars = Val(Me.Text1.Text) If nbBars > 0 Then SepWidth = 1 InitGraph Me.Picture1 BarWidth = ((Me.Picture1.ScaleWidth - (SepWidth * nbBars)) / nbBars) Randomize For i = 1 To nbBars UpdateGraph Me.Picture1, Int((9 * Rnd) + 1) Next i End If End Sub
Public Sub InitGraph(Pbox As PictureBox) 'style du bargraph de la Picture box Pbox.ScaleMode = vbUser Pbox.ScaleLeft = 0 Pbox.ScaleTop = 10 Pbox.ScaleWidth = 100 Pbox.ScaleHeight = -10 Pbox.BorderStyle = 0 Pbox.FillStyle = 0 Pbox.Cls Horizontal_Position = 0 End Sub
Public Sub UpdateGraph(Pbox As PictureBox, BAR_HEIGHT As Long) On Error Resume Next 'largeur de la barre en pixel Pbox.DrawWidth = Pbox.ScaleX(BarWidth, vbUser, vbPixels) Call ScrollBar(BAR_HEIGHT, Pbox) End Sub
Public Sub ScrollBar(BAR_HEIGHT As Long, Pbox As PictureBox) 'Visu du graph
'Trace les barres et en fin de parcoure efface les barres et ' recommence un nouveau tracé. If Horizontal_Position >= 100 Then Horizontal_Position = 0 Pbox.Cls Else Horizontal_Position = Horizontal_Position + BarWidth + SepWidth End If
' Si on depasse la valeur de reference fixée par Vscroll1 ' (SeuilValue), la barre devient rouge. If SeuilValue <= BAR_HEIGHT Then Pbox.Line (Horizontal_Position, 0)-(Horizontal_Position, _ BAR_HEIGHT), vbRed, BF Else Pbox.Line (Horizontal_Position, 0)-(Horizontal_Position, _ BAR_HEIGHT), vbGreen, BF End If End Sub
-- Cordialement,
Jacques.
Bonjour Max,
Max a écrit :
Bonjour,
Je code un graph en temps réel ou j'affiche mes valeurs sous forme de barre
vertical, dans une pictureBox avec l'objet Line.
je désire que l'épaisseur de mes barres soit proportionnel à ma pictureBox
:
Pour être plus explicite : que j'ai 10 barres ou 100 barres , qu'elles soit
affichées dans la totalité de la largeur de ma pictureBox.
J'ai "joué" sur la propriété de DrawWidth mais mes barres se chevauchent.
Il faudrait que j'intercale un espace ou ligne verticale
Mais je ne sais pas comment m'y prendre.
Si qq'un du NG pouvait éclairer ma lanterne.
Pour déterminer la largeur de tes barres, il faut en connaître le nombre
au préalable, la séparation entre les barres, elle, peut être fixe, ou
proportionnelle, en fonction du nombre de barre.
Comme tu utilises un ScaleMode vbUser, tu as un système d'échelle
personnalisé, mais la propriété DrawWidth demande un valeur en pixel,
qui nécessite une conversiion avec ScaleX. Ci joint un petit bout de
code (le nombre de barres est contenu dans Text1):
Option Explicit
Dim SeuilValue As Integer
Dim Horizontal_Position As Integer
Dim BarWidth As Integer
Dim SepWidth As Integer
Dim nbBars As Integer
Private Sub Command1_Click()
Dim i As Long
nbBars = Val(Me.Text1.Text)
If nbBars > 0 Then
SepWidth = 1
InitGraph Me.Picture1
BarWidth = ((Me.Picture1.ScaleWidth - (SepWidth * nbBars)) / nbBars)
Randomize
For i = 1 To nbBars
UpdateGraph Me.Picture1, Int((9 * Rnd) + 1)
Next i
End If
End Sub
Public Sub InitGraph(Pbox As PictureBox)
'style du bargraph de la Picture box
Pbox.ScaleMode = vbUser
Pbox.ScaleLeft = 0
Pbox.ScaleTop = 10
Pbox.ScaleWidth = 100
Pbox.ScaleHeight = -10
Pbox.BorderStyle = 0
Pbox.FillStyle = 0
Pbox.Cls
Horizontal_Position = 0
End Sub
Public Sub UpdateGraph(Pbox As PictureBox, BAR_HEIGHT As Long)
On Error Resume Next
'largeur de la barre en pixel
Pbox.DrawWidth = Pbox.ScaleX(BarWidth, vbUser, vbPixels)
Call ScrollBar(BAR_HEIGHT, Pbox)
End Sub
Public Sub ScrollBar(BAR_HEIGHT As Long, Pbox As PictureBox)
'Visu du graph
'Trace les barres et en fin de parcoure efface les barres et
' recommence un nouveau tracé.
If Horizontal_Position >= 100 Then
Horizontal_Position = 0
Pbox.Cls
Else
Horizontal_Position = Horizontal_Position + BarWidth + SepWidth
End If
' Si on depasse la valeur de reference fixée par Vscroll1
' (SeuilValue), la barre devient rouge.
If SeuilValue <= BAR_HEIGHT Then
Pbox.Line (Horizontal_Position, 0)-(Horizontal_Position, _
BAR_HEIGHT), vbRed, BF
Else
Pbox.Line (Horizontal_Position, 0)-(Horizontal_Position, _
BAR_HEIGHT), vbGreen, BF
End If
End Sub
Bonjour, Je code un graph en temps réel ou j'affiche mes valeurs sous forme de barre vertical, dans une pictureBox avec l'objet Line.
je désire que l'épaisseur de mes barres soit proportionnel à ma pictureBox : Pour être plus explicite : que j'ai 10 barres ou 100 barres , qu'elles soit affichées dans la totalité de la largeur de ma pictureBox.
J'ai "joué" sur la propriété de DrawWidth mais mes barres se chevauchent. Il faudrait que j'intercale un espace ou ligne verticale Mais je ne sais pas comment m'y prendre. Si qq'un du NG pouvait éclairer ma lanterne.
Pour déterminer la largeur de tes barres, il faut en connaître le nombre au préalable, la séparation entre les barres, elle, peut être fixe, ou proportionnelle, en fonction du nombre de barre.
Comme tu utilises un ScaleMode vbUser, tu as un système d'échelle personnalisé, mais la propriété DrawWidth demande un valeur en pixel, qui nécessite une conversiion avec ScaleX. Ci joint un petit bout de code (le nombre de barres est contenu dans Text1):
Option Explicit Dim SeuilValue As Integer Dim Horizontal_Position As Integer Dim BarWidth As Integer Dim SepWidth As Integer Dim nbBars As Integer
Private Sub Command1_Click() Dim i As Long
nbBars = Val(Me.Text1.Text) If nbBars > 0 Then SepWidth = 1 InitGraph Me.Picture1 BarWidth = ((Me.Picture1.ScaleWidth - (SepWidth * nbBars)) / nbBars) Randomize For i = 1 To nbBars UpdateGraph Me.Picture1, Int((9 * Rnd) + 1) Next i End If End Sub
Public Sub InitGraph(Pbox As PictureBox) 'style du bargraph de la Picture box Pbox.ScaleMode = vbUser Pbox.ScaleLeft = 0 Pbox.ScaleTop = 10 Pbox.ScaleWidth = 100 Pbox.ScaleHeight = -10 Pbox.BorderStyle = 0 Pbox.FillStyle = 0 Pbox.Cls Horizontal_Position = 0 End Sub
Public Sub UpdateGraph(Pbox As PictureBox, BAR_HEIGHT As Long) On Error Resume Next 'largeur de la barre en pixel Pbox.DrawWidth = Pbox.ScaleX(BarWidth, vbUser, vbPixels) Call ScrollBar(BAR_HEIGHT, Pbox) End Sub
Public Sub ScrollBar(BAR_HEIGHT As Long, Pbox As PictureBox) 'Visu du graph
'Trace les barres et en fin de parcoure efface les barres et ' recommence un nouveau tracé. If Horizontal_Position >= 100 Then Horizontal_Position = 0 Pbox.Cls Else Horizontal_Position = Horizontal_Position + BarWidth + SepWidth End If
' Si on depasse la valeur de reference fixée par Vscroll1 ' (SeuilValue), la barre devient rouge. If SeuilValue <= BAR_HEIGHT Then Pbox.Line (Horizontal_Position, 0)-(Horizontal_Position, _ BAR_HEIGHT), vbRed, BF Else Pbox.Line (Horizontal_Position, 0)-(Horizontal_Position, _ BAR_HEIGHT), vbGreen, BF End If End Sub
-- Cordialement,
Jacques.
Max
Bonsoir OK, je comprends mieux le principe. Maintenant c'est pile-poil. Merci encore pour le coup de pouce. Bonne fin de soirée Cordialement MaX
Bonsoir
OK, je comprends mieux le principe.
Maintenant c'est pile-poil.
Merci encore pour le coup de pouce.
Bonne fin de soirée
Cordialement
MaX