Niveau d'un liquide avec contrôle shape

Résolu
pobos Messages postés 10 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 15 juillet 2010 - 17 juil. 2008 à 19:49
pobos Messages postés 10 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 15 juillet 2010 - 18 juil. 2008 à 18:16
Bonjour à toutes et à tous.
Je developpe en VB6 et j'aimerai savoir comment transformer un contrôle shape en une sorte de progress bar pour indiquer par exemple le niveau d'un liquide dans un recipient



PS: le contrôle doit être de forme circulaire.
merci d'avance.

7 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
18 juil. 2008 à 17:36
Bonjour,

Je viens de retrouver sur ma machine un petit bout de code qui, si je me rappelle bien, avait été écrit par Renfields
:

Sur une Form :
- une picturebos nommée hublot
- une picturebox nommée Picture1
- un timer nommé Timer

Private Declare Function CreateEllipticRgn Lib "gdi32.dll" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function SelectClipRgn Lib "gdi32.dll" (ByVal hdc As Long, ByVal hRgn As Long) As Long
Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long



Private Sub Form_Activate()
   Dim hRgn As Long
   With Me
     .ScaleMode = vbPixels
     .Move 0, 0, Screen.Width / 2, Screen.Height / 2
   End With
   With Picture1
     .ScaleMode = vbPixels
     .Move Me.ScaleWidth / 4, Me.ScaleHeight / 4, 200, 200
   End With
   With hublot
     .ScaleMode = vbPixels
     .BackColor = &HC0C0&
     .Move 10, 10, 100, 100
   End With
   Set hublot.Container = Picture1
   hublot.BackColor = vbYellow
   Timer1.Interval = 50
   Timer1.Enabled = True
   hRgn = CreateEllipticRgn(0, 0, hublot.ScaleWidth, hublot.ScaleHeight)
   SelectClipRgn hublot.hdc, hRgn
   DoEvents
   hublot.Line (0, 0)-(100, 100), vbWhite, BF
   DeleteObject hRgn
End Sub



Private Sub Timer1_Timer()
   Static nSize As Long
   nSize = nSize + 1
   If nSize = 100 Then
       hublot.Line (0, 0)-(100, 100), vbWhite, BF
       nSize = 0
   End If
   hublot.Line (0, (100 - nSize) * hublot.ScaleHeight / 100)-(hublot.ScaleWidth, hublot.ScaleHeight), vbBlue, BF
End Sub
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
17 juil. 2008 à 20:10
0
pobos Messages postés 10 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 15 juillet 2010
17 juil. 2008 à 20:43
merci nhervagault, mais c'est ni le premier, ni le second.
je dirais un truc comme cecimais le recipient doit être circulaire.

merci d'avance.
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
17 juil. 2008 à 20:58
En te basant sur le code source des 2 controles suivants tu dois y arriver?

Il te faut
1 --> dessiner le composant vide
2 --> le composant plein
3--> deplacer le y du ovale representant le niveau.

peux-etre que http://support.microsoft.com/kb/q83906/
peux t'aider a faire les ellipses

Avec la methode circle tu devrais y arriver
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
17 juil. 2008 à 22:51
Bonsoir,

Moi, j'aime bien "mais le récipient doit être circulaire" !!!...
Un cercle n'est pas un volume, mais une surface plane (donc en aucun cas un récipent)...
J'imagine donc qu'il s'agit d'un récipent cylindrique ou sphérique... (encore qu'il pourrait fort bien également être conique !!!!)
Reste à savoir sous quel angle tu "vois" monter le niveau ...
S'il s'agit d'un récipent cylindrique "debout", par exemple, et que tu représentes le niveau en coupe longitudinale, ce sera un rectangle montant dans un rectangle.
S'il s'agit d'un récipent cylindrique "couché" et que tu représentes le niveau en coupe longitudinale, ce sera un secteur montant dans un cercle...
etc... etc...
Je me refuse à "deviner" et attends que tu exprimes tout avec la plus grande précision, sans rtien omettre ! (nous verrons ensuite)....

Ce qui se pense clairement s'exprime aisément, n'est-ce pas ?
0
pobos Messages postés 10 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 15 juillet 2010
18 juil. 2008 à 16:16
bonjour, tout d'abord excusez-moi pour cette abscence.

Je me refuse à "deviner" et attends que tu exprimes tout avec la plus grande précision, sans rtien omettre ! (nous verrons ensuite)....

Ce qui se pense clairement s'exprime aisément, n'est-ce pas ?
Je suis tout à fait d'accord avec toi jmfmarques,peut être que j'ai pas été très précie dans mon explication.
Voila, je développe présentement une application de gestion du stock de carburant d'une station service. Chaque cuve a une forme cylindrique mais doit être couchée comme ceci.
Je voudrai simplifier la répresention en utilisant juste un cercle ou pourquoi pas une ellipse. Merci à nhervagault pour son lien.
Maintenant le plus difficille va être de répresenter avec une couleur quelconque la hauteur du liquide.

j'espère avoir été clair.
merci et à bientôt.
0
pobos Messages postés 10 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 15 juillet 2010
18 juil. 2008 à 18:16
merci beaucoup jmfmarques.
je crois que cela me convient, il ne me reste plus qu'à bien étudier le code pour l'adapter à mon cas.
merci également à nhervagault pour sa contribution.
A+.
0
Rejoignez-nous