Niveau d'une cuve avec l'api chord

Résolu
pobos Messages postés 10 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 15 juillet 2010 - 15 juil. 2010 à 16:23
pobos Messages postés 10 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 15 juillet 2010 - 15 juil. 2010 à 18:35
Bonjour à tous,

Je suis entrain de développer une application de gestion de station service. Il y a une partie gestion de stock où je dois representer le niveau de produit dans une cuve. Pour ce faire, j'ai adopté la solution suivante:
- j'ai placé une picturebox picNiveauCuve sur ma form.
- ensuite je trace un cercle dont le fond est transparent.
- et enfin je superpose une corde dont le cercle inscrit a le même diametre que le premier.
Le code est le suivant:
Private Declare Function Chord Lib "gdi32" (ByVal hdc As Long, ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long, ByVal x3 As Long, ByVal y3 As Long, ByVal x4 As Long, ByVal y4 As Long) As Long

Private Sub Form_Activate()
picNiveauCuve.FillStyle = 1
'Cercle transparent representant la cuve vide et centré dans la picturebox
picNiveauCuve.Circle(picNiveauCuve.ScaleWidth / 2, picNiveauCuve.ScaleHeight / 2), Switch(picNiveauCuve.ScaleWidth >= picNiveauCuve.ScaleHeight, _
picNiveauCuve.ScaleHeight / 2, picNiveauCuve.ScaleWidth < picNiveauCuve.ScaleHeight, picNiveauCuve.ScaleWidth / 2), vbBlack
'Style de remplissage=opaque avec la couleur du produit
Me.FillStyle = 0
Me.FillColor = vbRed 'CouleurProduit
Chord Me.picNiveauCuve.hdc, 0, 0, 3730, 3730, 0, 1800, 3730, 1800
End Sub

Bien sûr les 3730 n'ont pas été choisi au hasard. Ma picturebox fait height=3730 et width=3730.

A l'exécution, la corde n'apparaît pas, seul le cercle vide apparaît même si je fais varier les 2 points qui font varier le niveau (les deux 1800) de 0 à 3730.
Merci de m'aider à resoudre ce problème.
Excellente journée à tous!!!

2 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
15 juil. 2010 à 17:21
Salut
le problème est que les parametres de la function chord sont mesurés en pixel
il faut traduire en pixel

Chord Me.picNiveauCuve.hdc, 0, 0, 3730 / Screen.TwipsPerPixelX, 3730 / Screen.TwipsPerPixelY, 0, 1800 / Screen.TwipsPerPixelY, 3730 / Screen.TwipsPerPixelX, 1800 / Screen.TwipsPerPixelY


ce n'est pas encore au point
bonne prog
3
pobos Messages postés 10 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 15 juillet 2010
15 juil. 2010 à 18:35
Merci ShayW pour cette reponse rapide.
C'est parfait.
Code:
Private Declare Function Chord Lib "gdi32" (ByVal hdc As Long, ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long, ByVal x3 As Long, ByVal y3 As Long, ByVal x4 As Long, ByVal y4 As Long) As Long

Private Sub Form_Activate()
picNiveauCuve.FillStyle = 1
'Cercle transparent representant la cuve vide et centré dans la picturebox
picNiveauCuve.Circle(picNiveauCuve.ScaleWidth / 2, picNiveauCuve.ScaleHeight / 2), Switch(picNiveauCuve.ScaleWidth >= picNiveauCuve.ScaleHeight, _
picNiveauCuve.ScaleHeight / 2, picNiveauCuve.ScaleWidth < picNiveauCuve.ScaleHeight, picNiveauCuve.ScaleWidth / 2), vbBlack
'Style de remplissage=opaque avec la couleur du produit
picNiveauCuve.FillStyle = 0
picNiveauCuve.FillColor = vbRed 'CouleurProduit
Chord Me.picNiveauCuve.hdc, 0, 0, 3730 / Screen.TwipsPerPixelX, 3730 / Screen.TwipsPerPixelY, 0, 1800 / Screen.TwipsPerPixelY, 3730 / Screen.TwipsPerPixelX, 1800 / Screen.TwipsPerPixelY
End Sub

Merci encore!!!
Bye!
0
Rejoignez-nous