IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Circle, c'est pas de la tarte!


Sujet :

VB 6 et antérieur

  1. #1
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut Circle, c'est pas de la tarte!
    Salut

    Ne vous moquez pas s'il vous plaît. J'ai chercé mais je soupsonne un problème de langues... du genre expressions pas régulières au Québec mais régulières en Europe...

    Je cherche à faire des minuscules pointes de tartes (du genre graphique) avec la méthode Circle. Minuscules en largeur, j'entends... Le but: dessiner un cercle chromatique à variation continue des couleurs. Un truc zouli tout plein. En donnant une couleur distincte à chacun des 360 degrés du cercle.

    Le problème c'est que je ne comprends pas très bien les explications de l'aide de VB à propos de la méthode Circle. Un autre problème de langues, sans doute. Anglais US vs Francais CA... Si vous voyez ce que je veux dire...

    Citation Envoyé par MSDN
    Circle Method

    Draws a circle, ellipse, or arc on an object.

    Syntax

    object.Circle [Step] (x, y), radius, [color, start, end, aspect]

    The Circle method syntax has the following object qualifier and parts:

    Part Description
    object Optional.
    Object expression that evaluates to an object in the Applies To list. If object is omitted, the Form with thefocus is assumed to be object.
    Step Optional.Keyword specifying that the center of the circle, ellipse, or arc is relative to the current coordinates given by the CurrentX and CurrentY properties of object.

    (x, y) Required.
    Single values indicating the coordinates for the center point [...]

    radius Required. Single value indicating the radius [...]

    color Optional. [...]

    start, end Optional.
    Single-precision values. When an arc or a partial circle or ellipse is drawn, start and end specify (in radians) the beginning and end positions of the arc. The range for both is –2 pi radians to 2 pi radians. The default value for start is 0 radians; the default for end is 2 * pi radians.


    [...]

    Remarks

    [...]

    When drawing pie slices, to draw a radius to angle 0 (giving a horizontal line segment to the right), specify a very small negative value for start, rather than zero.

    [...]

    This method cannot be used in an With…End With block.
    J'ai mis le charabia qui me pose problème en bleu. C'est quoi cette histoire de 2 pi radian? Tout ce que je sais, c'est que j'ai déjà réussi par le passé et que maintenant, que dale!

    Quelqu'un sait comment faire une 'pie slice' (pointe de tarte) de un degré?

  2. #2
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut
    En attendant que je regarde ton problème, voici pour toi, ma Quebequoise préférée, la version française de France de MSDN

    Circle, méthode

    Dessine un cercle, une ellipse ou un arc sur un objet.

    Syntaxe

    object.Circle [Step] (x, y), radius, [color, start, end, aspect]

    La syntaxe de la méthode Circle comprend les qualificateurs d'objets et les éléments suivants :

    Élément Description
    object Facultatif.Expression d'objet qui correspond à un objet figurant dans la rubrique "Application". Si object est omis, l'objet Form ayant lefocus remplace l'espace réservé object.
    Step Facultatif.Mot clé qui spécifie que le centre du cercle, de l'ellipse ou de l'arc est relatif aux coordonnées courantes précisées par les propriétés CurrentX et CurrentY de l'objet.
    (x, y) Valeurs de type Single indiquant les coordonnées du centre du cercle, de l'ellipse ou de l'arc. La propriété ScaleMode de l'objet détermine les unités de mesure utilisées.
    radius Valeur de type Single indiquant le rayon du cercle, de l'ellipse ou de l'arc. La propriété ScaleMode de l'objet détermine les unités de mesure utilisées.
    color Facultatif. Valeur de type Long integer indiquant la couleur RGB du cercle. Si cet élément est omis, la valeur de la propriété ForeColor est utilisée. La fonction RGB ou QBColor permet également de spécifier la couleur.
    start, end Facultatif. Valeurs en précision simple. Lorsqu'un arc, une partie de cercle ou une ellipse est tracée, les arguments start et end spécifient (en radians) les points d'origine et de fin de l'arc. La plage de ces deux valeurs s'étend de -2 à 2 pi radians. La valeur par défaut de start est 0 radians ; celle de end est 2 pi radians.
    aspect Facultatif. Valeur en précision simple qui indique le rapport déterminant l'aspect du cercle. La valeur par défaut est 1,0, soit un cercle parfait (non elliptique) sur tout écran.


    Remarques

    Pour remplir un cercle, définissez les propriétés FillColor et FillStyle de l'objet sur lequel est dessiné le cercle ou l'ellipse. Seule peut être remplie une figure fermée, à savoir cercle, ellipse ou secteur (arcs dont les deux rayons aux extrémités sont dessinés).

    Lors du tracé d'une partie de cercle ou d'une ellipse, si start est une valeur négative, la méthode Circle dessine un rayon à la position start et traite l'angle comme une valeur positive. Si end est une valeur négative, la méthode Circle dessine un rayon à la position end et traite l'angle comme une valeur positive. La méthode Circle dessine toujours dans le sens contraire des aiguilles d'une montre (direction positive).

    La largeur de trait du cercle, de l'ellipse ou de l'arc dépend de la valeur de la propriété DrawWidth. La façon dont le cercle est dessiné sur le fond est fonction de la valeur des propriétés DrawMode et DrawStyle.

    Lors du tracé de secteurs, pour dessiner un rayon à angle 0 (segment de ligne vers la droite), spécifiez une valeur négative infime pour start, au lieu de 0.

    Vous pouvez omettre un argument de la syntaxe mais pas la virgule de celui-ci, avant de préciser l'argument suivant. S'il s'agit d'un argument facultatif, vous pouvez aussi omettre la virgule le suivant.

    Lors de l'exécution de la méthode Circle, les propriétés CurrentX et CurrentY sont définies au centre spécifié par les arguments.

    Cette méthode ne peut être utilisée dans un bloc With…End With.

  3. #3
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Bonjour zaza,

    Si tu veux :

    Décris moi avec précision ce que tu veux obtenir.

    Je te ferai la chose après la sieste, si tu le souhaites...

  4. #4
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Merci les mecs

    De mon côté, je vais faire un tour à mon ancien palace jeter un oeil à mon vieux zordinosaure, des fois qu'il y aurais quelque part sur un de ses disques un copie d'un vieux projet similaire.

    Je vous tiens au courant.

    Thierry:
    je ne comprends toujours rien à cette histoire de 2 pi radian... Les maths et moi... y'a un bail qu'on ne s'est rencontré!

    jmf:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Private Sub Form_Click()
        Dim X As Single, Y As Single
        Dim i As Integer, debut As Integer, fin As Integer, couleur As Long
     
        X = ScaleWidth / 2
        Y = ScaleHeight / 2
     
        Me.AutoRedraw = True
        Me.DrawWidth = 2
     
        For i = 0 To 359
            debut = -(pi * i / 360)
            fin = -(pi * (i + 1) / 360)
            couleur = (&HFFFFFF \ 360) * i
            Me.Circle (X, Y), (Me.Width \ 2) - 300, couleur, debut, fin
        Next
     
    End Sub
    Je crois bien que je m'emmêle les pinceaux dans le calcul de debut et de fin.

  5. #5
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut
    notre ami jmf t'expliquera celà surement mieux que moi, mais la base des angles exprimés en degrés et en radians est : 360° = 2pi Rad, base de la formule de conversion de degrés en radians et vice-versa

    Sachant que les angles en VB sont exprimés en radians, et non pas en degrés

  6. #6
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Hooo! votre savoir irradie mon ignorance!
    Je retourne de ce pas à mon ancienne casa (qu'est pas loin, un coin de rue...) vider mon vieux zordinosaure (je viens juste de vider le congélateur).

    à betôt!

    [...]

    Me voici, me voilà!

    Avec le fichier du vieux projet!
    Il s'agissait de créer un effet de contraste...

    Ce que je veux maintenant c'est pouvoir choisir des harmonies de couleurs... en ayant pour base le cercle chromatique que j'avais déjà fait... maintenant que je l'ai retrouvé... J'attends quand même un peu avant de mettre résolu, des fois que je m'y prendrais encore les pieds!

  7. #7
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Je me réveille et arrive !

    Alorsn d'abord des cercles concentriques ...

    Sur une form, une picturebox picture1 et un bouton de commande command1

    et le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Command1_Click()
        picture1.ScaleMode = 3
        picture1.DrawWidth = 2
        If picture1.ScaleWidth > picture1.ScaleHeight Then Rayon = picture1.ScaleWidth / 2 Else Rayon = picture1.ScaleHeight / 2
        For i = 0 To Rayon / 2
            R = 255
            G = i * 3
            B = i
            picture1.Circle (picture1.ScaleWidth / 2, picture1.ScaleHeight / 2), i, RGB(R, G, B)
        Next
    End Sub
    tu vas les voir en feu
    Je sors et reviens t'en faire voir de toutes les couleurs dans l'autre sens (en fonction de l'angle). Ce ne sera certes pas avec Circle !!!!

    A plus ou à demain

  8. #8
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Me revoilà...

    Tiens, zaza, je t'ai fait rapido une zazapie

    Comme tu le verras, je ne me suis pas servi de la méthode circle mais de la méthode line, associée à un peu de trigonométrie. J'ai ici choisi les fonctions Sinus et cosinus (mais j'aurais pu en choisir d'autres)...

    Une form avec une pictureBox nommée zazapie et un bouton de commande nommé command1

    et ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Option Explicit
     
    Private Sub Form_Activate()
      Me.ScaleMode = 3
      zazapie.ScaleMode = 3
      Me.Move 0, 0, 10000, 10000
      zazapie.Move 100, 100, 480, 480
    End Sub
     
    Private Sub Command1_Click()
      Dim x1 As Single, y1 As Single, Pi As Double, Ang As Single
      Dim rayon As Single, CX As Single, CY As Single, i As Integer, couleur As Long
      Pi = 4 * Atn(1)
      CX = zazapie.Width / 2
      CY = zazapie.Height / 2
      rayon = 150
      For i = 0 To 360
        Ang = (Pi * i) / 180
        x1 = CX + rayon * Sin(Ang)
        y1 = CY + rayon * Cos(Ang)
        zazapie.DrawWidth = 3
        If i <= 40 Then couleur = RGB(255, 0, 0)
        If i > 40 And i <= 80 Then couleur = RGB(0, 255, 0)
        If i > 80 And i <= 100 Then couleur = RGB(0, 0, 255)
        If i > 100 And i <= 160 Then couleur = RGB(100, 100, 255)
        If i > 160 And i <= 250 Then couleur = RGB(100, 100, 100)
        If i > 250 And i <= 300 Then couleur = RGB(0, 255, 200)
        If i > 300 And i <= 325 Then couleur = RGB(255, 255, 200)
        If i > 325 Then couleur = RGB(0, 100, 100)
        zazapie.ForeColor = couleur
        zazapie.Line (CX, CY)-(x1, y1)
      Next
    End Sub
    A toi de jouer pour en faire un truc paramétrable (en fonction de données).
    Si tu n'y parviens pas, corne un coup et je te ferai

  9. #9
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Conclusion: Je vais devoir repotasser ma trigo! Ça date de 1977! et quelques cheveux blancs...

    Bon, je mets résolu. Mon vieux projet me fourni ce que je voulais.

    Merci bien jmf. Et je t'en supplie, ne me dis plus que tu fais la sieste. Même si je sais pertinemment qu'il fait très chaud chez toi. Vois-tu, j'ai trois marmots qui me tiennent occupée toute la journée.

    @+ donc!

    zaza

  10. #10
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Hé, zaza,...

    La mienne, de trigo, elle date de...... 1958 !
    Après, je suis passé à l'analytique (vla aut'chose !)
    Replonge-toi dedans ! C'est facile !

    EDIT : ceci étant dit et fait :

    Souhaite-t-on que je fasse un "machin" paramétrable de sorte à en tirer un "camembert" en couleurs en fonctions de valeurs présentes ?
    Si oui, "yakademandé"

  11. #11
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    réponse par mp

    @+

  12. #12
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Oui, bon... la preuve que c'était trop simple et pour les autres qui, comme moi, ont peu de souvenirs de la trigo... qui n'en était pas, en fait, mais juste l'équation du cercle...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Option Explicit
        Const pi As Single = 3.141592
     
    Private Sub Form_Load()
        With Me
            .AutoRedraw = True
            .DrawStyle = 5  ' transparent
            .FillStyle = 0  ' solid
        End With
    End Sub
     
    Private Sub Form_Click()
        ' déclaration des variables
        Dim X As Single, Y As Single    ' centre du cercle
        Dim rayon As Single             ' rayon du cercle
        Dim portion As Single           ' pointe de tarte
     
        ' initialisation des variables
        X = ScaleWidth / 2
        Y = ScaleHeight / 2
        rayon = X - 60
        portion = -(2 * pi) / 6  ' des sixièmes
     
        ' Trois pares de tarte
        Me.FillColor = vbRed
        Me.Circle (X, Y), rayon, , -0.001, portion
        Me.FillColor = vbYellow
        Me.Circle (X, Y), rayon, , portion, portion * 2
        Me.FillColor = vbGreen
        Me.Circle (X, Y), rayon, , portion * 2, portion * 3
        Me.FillColor = vbCyan
        Me.Circle (X, Y), rayon, , portion * 3, portion * 4
        Me.FillColor = vbBlue
        Me.Circle (X, Y), rayon, , portion * 4, portion * 5
        Me.FillColor = vbMagenta
        Me.Circle (X, Y), rayon, , portion * 5, portion * 6
    End Sub
    Vous mettez ça dans le code d'une Form, sans autre contrôles et amusez-vous.

    Comme quoi, vous l'aurez remarqué, les maths m'ont toujours fichu la trouille, sans raisons, apparemment...

    Non, pas toujours: jusqu'à l'âge de 16 ans, j'aimais les maths. C'est ce qui me raccrochait à l'école que je trouvais moche, poche et emm...dante. L'école secondaire, en tout cas. Parce que comme disait Sol: "l'école, c'est secondaire". Voyez où j'en suis.

  13. #13
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Histoire d'y mettre un point final...

    Le contenu du fichier CercleChromatique.bas que vous pouvez ajouter à vos projets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    Option Explicit
     
    Private Const pi As Single = 3.141592
     
    Public Sub DessinerCecleChroma(C As Control)
        If (TypeOf C Is Form) Or _
           (TypeOf C Is PictureBox) Or _
           (TypeOf C Is Printer) Or _
           (TypeOf C Is PropertyPage) Or _
           (TypeOf C Is UserControl) Or _
           (TypeOf C Is UserDocument) Then
     
            Dim X As Single, Y As Single, rayon As Single
            Dim d As Integer ' compteur des degrés du cercle
            Static debut As Single, fin As Single, pointe As Single
     
            debut = -0.000001
     
            With C
                X = .ScaleWidth / 2
                Y = .ScaleHeight / 2
                .FillStyle = vbFSSolid
                .DrawStyle = vbInvisible
                rayon = X - 60
                pointe = -(2 * pi) / 360
                For d = 0 To 359
                    fin = pointe * (d + 1)
                    C.FillColor = Couleur(d)
                    C.Circle (X, Y), rayon, , debut, fin
                    debut = fin
                Next
                .FillColor = C.BackColor
                C.Circle (X, Y), rayon \ 2
            End With
     
          Else
            ' message erreur
            MsgBox "Type de contrôle non surpporté." & vbCrLf & vbCrLf & _
                   "Utilisez un des contrôles suivants :" & vbCrLf & _
                   "  > Form" & vbCrLf & "  > PictureBox" & vbCrLf & _
                   "  > Printer" & vbCrLf & "  > PropertyPage" & vbCrLf & _
                   "  > UserControl" & vbCrLf & "  > UserDocument", _
                   vbInformation, "Erreur de choix de contrôle"
        End If
    End Sub
     
    Private Function Couleur(degre As Integer) As Long
        Dim r As Byte, g As Byte, b As Byte
        Dim composant As Integer
        ' un sixième de 360 degrés = 60 degrés
     
        composant = Int((255 / 60) * (degre Mod 60))
     
        Select Case degre
          Case 0 To 59      ' de rouge à jaune
            r = 255
            g = composant
            b = 0
          Case 60 To 119    ' de jaune à vert
            r = 255 - composant
            g = 255
            b = 0
          Case 120 To 179   ' de vert à cyan
            r = 0
            g = 255
            b = composant
          Case 180 To 239   ' de cyan à bleu
            r = 0
            g = 255 - composant
            b = 255
          Case 240 To 299   ' de bleu à magenta
            r = composant
            g = 0
            b = 255
          Case 300 To 359   ' de magenta à rouge
            r = 255
            g = 0
            b = 255 - composant
        End Select
     
        Couleur = RGB(r, g, b)
    End Function
    vous l'appelez comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CercleChromatique.DessinerCecleChroma picCercle     ' ici, un pictureBox

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 15h43
  2. Mon script cron n'est pas pris en compte
    Par tomnie dans le forum Linux
    Réponses: 11
    Dernier message: 31/03/2004, 12h19
  3. LIKE de tout ce qui n'est pas compris entre a<-&
    Par DjinnS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/07/2003, 14h09
  4. [VB6] générer un recordset qui n'est pas lier à un bdd
    Par damyrid dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/06/2003, 18h48
  5. Index n'est pas a jour
    Par touhami dans le forum Paradox
    Réponses: 5
    Dernier message: 11/12/2002, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo