Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Graph Chevauchement de mes barres

2 réponses
Avatar
Max
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

********************************

Par avance merci

Max

2 réponses

Avatar
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.
Avatar
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