Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DESSINE UN CAMEMBERT DANS UN PICTURE


Information sur la source

Catégorie :Graphique Niveau : Débutant Date de création : 07/09/2004 Vu / téléchargé: 4 832 / 697

Note :
8 / 10 - par 2 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
dessine un camembert dans un picture en fonction d'un tableau de parametre
chaque part du camenbert est un pourcentage du disque entier
 

Source

  • ' dans la feuille avec une picture qui recoit le camembert
  • Option Explicit
  • Sub rempli_et_affiche_camembert()
  • Dim lc As Integer
  • Dim maxcalc As Integer
  • 'mon type camembert qui contient
  • ' un tableau des pourcentages de chaque par
  • ' un tableau des couleurs de chaque part
  • ' le nombre de part maximum
  • Dim cam As typ_camembert
  • cam.nb_max = (Val(Text2.Text) - 1) Mod Max_camembert + 1
  • maxcalc = 0
  • For lc = 1 To cam.nb_max
  • cam.T_p(lc) = Val(Text1(lc - 1).Text)
  • maxcalc = maxcalc + cam.T_p(lc)
  • Next lc
  • cam.T_c(1) = vbRed
  • cam.T_c(2) = vbYellow
  • cam.T_c(3) = vbGreen
  • cam.T_c(4) = vbBlue
  • cam.T_c(5) = vbCyan
  • cam.T_c(6) = vbMagenta
  • cam.T_c(7) = vbWhite
  • cam.T_c(8) = vbBlack
  • Call affiche_camembert(Picture1, cam)
  • Me.Label1.Caption = "global " & maxcalc & " %"
  • If maxcalc > 100 Then Me.Label1.Caption = "erreur depassement 100% "
  • End Sub
  • Private Sub Command1_Click()
  • Call rempli_et_affiche_camembert
  • End Sub
  • Private Sub Form_Load()
  • Call rempli_et_affiche_camembert
  • End Sub
  • ' dans module camembert.bas
  • Option Explicit
  • Public Const Max_camembert = 8
  • Type typ_camembert
  • T_p(1 To Max_camembert) As Integer ' pourcentage de chaque part
  • T_c(1 To Max_camembert) As Long ' couleur
  • nb_max As Integer ' nombre max de part a afficher
  • End Type
  • Sub affiche_camembert(camembert As PictureBox, tab_p As typ_camembert)
  • Const conPI = 3.14159265359
  • Dim lc As Integer
  • Dim Pc(0 To Max_camembert) As Single
  • ' calcule les angles attention sens anti horaire debut a 90°
  • Pc(0) = -0.00001
  • For lc = 1 To tab_p.nb_max
  • Pc(lc) = tab_p.T_p(lc) Mod 100 ' pour ne pas depasser
  • Pc(lc) = -(2 * conPI) * Pc(lc) / 100 + Pc(lc - 1) - Pc(0)
  • If Pc(lc) > Pc(0) Then Pc(lc) = Pc(0)
  • If Pc(lc) < -(2 * conPI) Then
  • Pc(lc) = -(2 * conPI)
  • End If
  • 'Form1.Label1(lc).Caption = Format(Pc(lc), "##,##0.00000")
  • Next lc
  • camembert.Cls
  • camembert.AutoRedraw = True
  • camembert.FillStyle = 0 ' Fill pie slice.
  • For lc = 1 To tab_p.nb_max
  • camembert.FillColor = tab_p.T_c(lc) ' couleur remplissage
  • If tab_p.T_p(lc) >= 1 Then camembert.Circle (camembert.ScaleWidth / 2, camembert.ScaleHeight / 2), (camembert.ScaleHeight * 0.45), tab_p.T_c(lc), Pc(lc - 1), Pc(lc)
  • Next lc ' Draw pie slice within circle.
  • End Sub
' dans la feuille avec une picture qui recoit le camembert
Option Explicit

Sub rempli_et_affiche_camembert()
 Dim lc As Integer
 Dim maxcalc As Integer
'mon type camembert  qui contient
' un tableau des pourcentages de chaque par
' un tableau des couleurs de chaque part
' le nombre de part maximum
Dim cam As typ_camembert
 cam.nb_max = (Val(Text2.Text) - 1) Mod Max_camembert + 1
 maxcalc = 0
 For lc = 1 To cam.nb_max
  cam.T_p(lc) = Val(Text1(lc - 1).Text)
  maxcalc = maxcalc + cam.T_p(lc)
 Next lc
 cam.T_c(1) = vbRed
 cam.T_c(2) = vbYellow
 cam.T_c(3) = vbGreen
 cam.T_c(4) = vbBlue
 cam.T_c(5) = vbCyan
 cam.T_c(6) = vbMagenta
 cam.T_c(7) = vbWhite
 cam.T_c(8) = vbBlack
 
 Call affiche_camembert(Picture1, cam)
 Me.Label1.Caption = "global " & maxcalc & " %"
 If maxcalc > 100 Then Me.Label1.Caption = "erreur depassement 100% "
 End Sub

Private Sub Command1_Click()
Call rempli_et_affiche_camembert

End Sub


Private Sub Form_Load()
Call rempli_et_affiche_camembert
End Sub

' dans module camembert.bas
Option Explicit

Public Const Max_camembert = 8

Type typ_camembert
    T_p(1 To Max_camembert) As Integer    ' pourcentage de chaque part
    T_c(1 To Max_camembert) As Long ' couleur
    nb_max As Integer ' nombre max de part a afficher
End Type


Sub affiche_camembert(camembert As PictureBox, tab_p As typ_camembert)

Const conPI = 3.14159265359
    Dim lc As Integer
    Dim Pc(0 To Max_camembert) As Single
    
    ' calcule les angles attention sens anti horaire debut a 90°
    Pc(0) = -0.00001
    For lc = 1 To tab_p.nb_max
        Pc(lc) = tab_p.T_p(lc) Mod 100  ' pour ne pas depasser
        Pc(lc) = -(2 * conPI) * Pc(lc) / 100 + Pc(lc - 1) - Pc(0)
        If Pc(lc) > Pc(0) Then Pc(lc) = Pc(0)
        If Pc(lc) < -(2 * conPI) Then
            Pc(lc) = -(2 * conPI)
        End If
        'Form1.Label1(lc).Caption = Format(Pc(lc), "##,##0.00000")
    Next lc
    camembert.Cls
    camembert.AutoRedraw = True
    camembert.FillStyle = 0                     ' Fill pie slice.
    For lc = 1 To tab_p.nb_max
        camembert.FillColor = tab_p.T_c(lc) ' couleur remplissage
        If tab_p.T_p(lc) >= 1 Then camembert.Circle (camembert.ScaleWidth / 2, camembert.ScaleHeight / 2), (camembert.ScaleHeight * 0.45), tab_p.T_c(lc), Pc(lc - 1), Pc(lc)
    Next lc '  Draw pie slice within circle.
    
End Sub

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de ITALIA le 07/09/2004 17:34:53

Des valeurs contenues dans un fichier texte ...sans limites de nb de valeurs aurait été mieux.
Avec des couleurs prises au hasard.

8/10

signaler à un administrateur
Commentaire de econs le 07/09/2004 22:21:30 administrateur CS

Ca a le mérite d'être propre. Mais effectivement, pour suivre Italia, je dirai également que ce camembert n'est pas très paramétrable (couleurs, nombre de parts, ... )

Regarde le contrôle MsChart. Il permet de faire des camemberts avec un nombre de parts (presque) infini.

signaler à un administrateur
Commentaire de cpolge le 08/09/2004 18:00:23

le nombre max de part n'est pas parametrable
il faut le fixer dans le code
mais en cours d'execution on peut prendre en compte de 0 à  nb_max pour afficher
pour les couleurs il faut remplir le champs  T_c avec la couleur de son choix par part de camembert

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.