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 :

[VB6] Comment créer un objet TRIANGLE


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier Avatar de Lucas42
    Inscrit en
    Janvier 2006
    Messages
    301
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 301
    Points : 97
    Points
    97
    Par défaut [VB6] Comment créer un objet TRIANGLE
    Bonjour , j'aimerai savoir comment faire pour créer un OBJET tels que shape carré ou cercle , mais cette fois si , TRIANGLE ??

    merci d'avance
    amicalement lucas

  2. #2
    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
    Points : 4 674
    Points
    4 674

  3. #3
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    et le post est plus vieux que celui-ci.

    à-t'on affaire à un skysofrène, à une personne à la mémoire infonctionnelle ou plus simplement à un floodeur invétéré?

  4. #4
    Membre régulier Avatar de Lucas42
    Inscrit en
    Janvier 2006
    Messages
    301
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 301
    Points : 97
    Points
    97
    Par défaut
    mais lol , si je vous demande comment un OBJET triangle , c'est bien parcke le code que je vous avez presenté ne le faisait pas , il dessiné bien un TRIANGLE , mais ce n'était pas un OBJET , il n'avait aucune propriété tel que VISIBLE , BACKCOLOR ....

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Je pense que tu finira bien par comprendre...

    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
    Private Type COORD
        x As Long
        y As Long
    End Type
    Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As Any, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
    Private Declare Function Polygon Lib "gdi32" (ByVal hdc As Long, lpPoint As Any, ByVal nCount As Long) As Long
    Private Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long) As Long
    Private Declare Function GetStockObject Lib "gdi32" (ByVal nIndex As Long) As Long
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
    Const ALTERNATE = 1
    Const WINDING = 2
    Const BLACKBRUSH = 4
    Private Sub Form_Paint()
    Dim poly(1 To 4) As COORD, NumCoords As Long, hBrush As Long, hRgn As Long
        Me.Cls
         vbPoly = "Diabolo"
     
    If vbPoly = "Triangle" Then
        NumCoords = 3
        Me.ScaleMode = vbPixels
        poly(1).x = Form1.ScaleWidth / 2
        poly(1).y = Form1.ScaleHeight / 2
        poly(2).x = Form1.ScaleWidth / 4
        poly(2).y = 3 * Form1.ScaleHeight / 4
        poly(3).x = 3 * Form1.ScaleWidth / 4
        poly(3).y = 3 * Form1.ScaleHeight / 4
    End If
     
     
    If vbPoly = "Diabolo" Then
        NumCoords = 4
        Me.ScaleMode = vbPixels
        poly(1).x = Form1.ScaleWidth / 4
        poly(1).y = Form1.ScaleHeight / 4
        poly(2).x = 3 * Form1.ScaleWidth / 4
        poly(2).y = Form1.ScaleHeight / 4
        poly(3).x = Form1.ScaleWidth / 4
        poly(3).y = 3 * Form1.ScaleHeight / 4
        poly(4).x = 3 * Form1.ScaleWidth / 4
        poly(4).y = 3 * Form1.ScaleHeight / 4
    End If
     
        hBrush = GetStockObject(BLACKBRUSH)
        hRgn = CreatePolygonRgn(poly(1), NumCoords, ALTERNATE)
        If hRgn Then FillRgn Me.hdc, hRgn, hBrush
        DeleteObject hRgn
    End Sub
    Private Sub Form_Resize()
        Form_Paint
    End Sub

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Justement, tu doit mettre des variables par exemple dans ton code du genre VisibleDiabolo = True ce ne doit pas etre trop compliqué a mettre si? Et alors lors du visible=false tu fais un repaint et dans le repaint tu test la prop
    pour ce qui est de la couleur.. Je sais pas mais bon...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     hBrush = GetStockObject(BLACKBRUSH)

  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
    Points : 4 674
    Points
    4 674
    Par défaut
    A LUCAS !!!
    VB n'a pas fait un tel contrôle car il ne servait à rien et qu'un triangle est, de surcroit une figure indéformable !!!!
    J'interviens ici car trop c'est trop !
    Tu as littéralement inondé ce forum pour une babiole :
    200 messages à ce seul sujet rédigés par toi
    plus du triple avec les réponses qui t'ont été faites !
    cela fait beaucoup pour bien peu !!!!!
    *Et que je te cherche sur le Web une "soluce".... et que je te la manipule.... et que ceci ... et que cela....
    à coup de copier-collers dans tous les sens... et que je te reviens avec une api, un floodfill... et je ne sais quoi d'autre...
    et que je te reviens en voulant faire clignoter... puis changer la couleur.... et que d'autres en rajoutent dans tous les sens ...
    et en avant... et en arrière....
    Alors : j'en ai personnellement assez de ce cirque à 2 sous espagnols et vais y mettre un terme, car cela m'apparaît nécessaire !
    Qu'est un triangle dans un rectangle ? ce n'est jamais que 2 segments reliant chacun des 2 points de la base au milieu du côté opposé à la base.
    Qu'est ton "sablier" dans un rectangle ? ce n'est jamais que la construction des deux diagonales de ce rectangle
    comment construire ces segments ? par calcul arithmétique élémentaire (niveau primaire)
    Qu'est un remplissage ? une succession de segments
    Quelle est la couleur de remplissage ? celle donnée aux segments successifs .
    Comment se traduit la "transparence" du contour ? en donnant simplement à ce contour la couleur du fond sur lequel est le rectangle (la picturebox)
    Comment fait-on tout cela ? le plus bêtement du monde !
    Alors :
    Voilà un exemple paramétrable pour un triangle avec la pointe en haut.
    Sont paramétrables les dimensions de la picturebox (donc du triangle) et la couleur du triangle
    Sur une form :
    un bouton de commande command1 et une picturebox picture1 (mets la au centre, pour éviter les débordements et fais une Form assez grande pour tes essais !
    donne la couleur de fond que tu veux à ta Form (la picturebox s'y adaptera)
    Change ensuite à ta guise les paramètres couleur et dimensions... et lance...

    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
     
    Private Sub Command1_Click()
      Dim couleur As Long, largeur As Integer, hauteur As Integer, sens As String
      couleur = RGB(0, 255, 255)
      largeur = 1000
      hauteur = 1000
      triangle couleur, largeur, hauteur
    End Sub
    Sub triangle(couleur, largeur, hauteur)
        Dim CX, CY, F, F1, F2, I
        With Picture1
          .Width = largeur
          .Height = hauteur
          .BackColor = Me.BackColor
          .BorderStyle = 0
        End With
        DoEvents
        Picture1.ScaleMode = 3
        CX = Picture1.ScaleWidth / 2
        CY = Picture1.ScaleHeight
        Picture1.DrawWidth = 3
        Picture1.ForeColor = couleur
        For I = 0 To 50 Step 2
          F = I / 50
          F1 = 1 - F
          F2 = 1 + F
          Picture1.Line (CX * F1, CY)-(CX, CY * F1)
          Picture1.Line -(CX * F2, CY)
          Picture1.Line -(CX, CY * F2)
        Next I
        DoEvents
    End Sub

    Voilà ! C'était tout ! En lieu et place de tout ce déploiement que j'ai vu provoquer tous ces "posts"
    Ne viens maintenant pas m'interroger sur comment en faire un avec la tête en bas ou directement un en forme de 2 triangles symétriques !
    Tu fais comme moi : tu calcules (arithmétique élémentaire)... un point c'est tout !

  8. #8
    Membre régulier Avatar de Lucas42
    Inscrit en
    Janvier 2006
    Messages
    301
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 301
    Points : 97
    Points
    97
    Par défaut
    Bon et bien , JMFMARQUE , je ne sais quoi dire , sauf Merci
    Désolé si j'ai douté de tes compétences , mais faut me comprendre , mon patron me demande de lui fournir un activeX répondant à un cahier des charges bien particulier auquel je ne peut echapper ( à cause des normes ) donc oui j'ai poster 200 messages , mais ca ma bcp aidé .
    Donc mon Projet proprement dit est terminer , maintenant , il ne me reste plus qu'à me pencher sur le probléme des pages de propriété , du moins rendre cette page presentable , grace à des TabStrips , mes tests de communications entre l'appli dvp en vb6 et l'automate marche trés bien .

    Donc un grand merci

  9. #9
    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
    Points : 4 674
    Points
    4 674
    Par défaut
    Non, lucas, ne dis pas encore merci !
    Je vais te faire une confession :
    Afin d'être certain de ce que, pour la pointe en bas, tu ne contenterais pas d'un copier-coller facilement adaptable j'ai volontairement "compliqué" un peu !
    Il y a 100 fois plus simple à faire ! Hé oui !
    Les indications que je t'ai données devraient te permettre, sans presqu'aucun calcul, de parvenir à tes fins, tant pour la tête en bas que pour le sablier, avec.... beaucoup plus simple encore !
    A toi de me montrer que tu es "alerte" !
    Montre-moi le code que tu est capable d'écrire (beaucoup plus simple, j'insiste) sur ces seules indications (lis et relis ce que j'ai écrit plus haut... c'est ultra simple)

  10. #10
    Membre régulier Avatar de Lucas42
    Inscrit en
    Janvier 2006
    Messages
    301
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 301
    Points : 97
    Points
    97
    Par défaut
    bon voila , j'ai reussi à faire tracer mon sablier dans la picture box avec ta méthode
    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
    Sub triangle(couleur, taille)
        Dim CX, CY, F, F1, F2, I
        With Picture1
          .Width = taille / 2
          .Height = taille
          .BackColor = Me.BackColor
          .BorderStyle = 0
          .ScaleMode = 0
        End With
        DoEvents
        CX = Picture1.Width
        CY = Picture1.Height
        Picture1.DrawWidth = 1
        Picture1.ForeColor = couleur
        For I = 0 To 100 Step 1
          F = I / 100
          F1 = 0 + F
          F2 = 1 - F
          Picture1.Line (CX * F1, 0)-(CX * F2, CY)
        Next I
        DoEvents
    End Sub
    et j'ai pas trouver de lignes à supprimer vu que je vais utiliser en PROPRIETE , taille , background , mais il faut ke je rajoute la position de la picture box dans la form ^^

    merci encore

  11. #11
    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
    Points : 4 674
    Points
    4 674
    Par défaut
    1) pour la suppression de lignes ? T'es pas astucieux ! au lieu de "balayer" de bas en haut, il suffit de "balayer" en segments latéraux et pfff... pratiquement plus de calculs ! (il ne s'agit pas de supprimer des lignes mais d'un changement radical d'approche ! je te laisse voir)
    2) pour le reste ? des paramètres à rajouter en command1 et dans la procédure, c'est tout (je reviens avec çà dans 3 minutes !)

    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
     
    Sub triangle(couleur, largeur, hauteur, gauche, haut)
      With Picture1
          .Width = taille / 2
          .Height = taille
          .BackColor = Me.BackColor
          .BorderStyle = 0
          .ScaleMode = 0
          .left = gauche
          .top = haut
       End With
    .
    .
    .
    end sub
    et tu "passes" les valeurs de gauche et de haut en appelant ta procédure !
    Dis-moi : tu as une variable taille que je ne vois définie nulle part, par contre je continue à voir hauteur et largeur, dont tu ne te sers pas ! Etonnant !

  12. #12
    Membre régulier Avatar de Lucas42
    Inscrit en
    Janvier 2006
    Messages
    301
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 301
    Points : 97
    Points
    97
    Par défaut
    mais je c po si tu as vu , mais il n'y a plus QU'UNE SEUL LIGNE DE TRACER , et NON PLUS COMME TU L'AVAIS FAIT ........
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Picture1.Line (CX * F1, 0)-(CX * F2, CY)

  13. #13
    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
    Points : 4 674
    Points
    4 674
    Par défaut
    C'est vrai (n'avais pas vu) !
    Mais ce 100, c'est quoi, la dedans ?

    Allez : un indice :
    4 points (les 4 coins) : X1,Y1 X2,Y2 X3,Y3 et X4,Y4
    et 1 segment X1,Y1 à X3,Y3 qui "voyage avec ses abcisses se modifiant, en haut, de X1 à X3 et en bas, de X4 a X2
    sans jamais modifier l'ordonnée haute ni l'ordonnée basse
    les abcisses par incrémentation en haut et par décrémentation en bas (ou le contraire, à ta guise...)
    super fastoche !

  14. #14
    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
    Points : 4 674
    Points
    4 674
    Par défaut
    Allez (je dois partir) !
    Une seule ligne de calcul (pas 2)
    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
    Private Sub Command1_Click()
      Dim couleur As Long, largeur As Integer, hauteur As Integer, sens As String
      couleur = RGB(0, 255, 255)
      largeur = 1000
      hauteur = 1000
      haut = 100
      gauche = 200
      triangle couleur, largeur, hauteur, haut, gauche
    End Sub
     
    Sub triangle(couleur, largeur, hauteur, haut, gauche)
        Dim i As Integer
        With Picture1
          .Width = largeur
          .Height = hauteur
          .BackColor = Me.BackColor
          .BorderStyle = 0
          .Top = haut
          .Left = gauche
        End With
        Picture1.ScaleMode = 3
        Picture1.DrawWidth = 3
        Picture1.ForeColor = couleur
        DoEvents
        For i = 0 To Picture1.ScaleWidth
          Picture1.Line (i, 0)-(Picture1.ScaleWidth - i, Picture1.ScaleHeight) '<<<=== tout est là
        Next i
        DoEvents
    End Sub
    et j'ai intégré tes paramètres de positionnement
    T'as vu comme c'était simple ?
    Google et le reste ? du pipeau la plupart du temps ! Ton cerveau ? du solide, normalement ! C'est tout !
    et pas de ""100" plus que douteux ! et totalement paramétrable....

  15. #15
    Membre régulier Avatar de Lucas42
    Inscrit en
    Janvier 2006
    Messages
    301
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 301
    Points : 97
    Points
    97
    Par défaut
    euh , et bien le
    For I = 0 To 100 Step 1
    est la simplement car la vanne atteint une certaine grandeur max , auquel cas si je metté 50 , comme tu avais mis au début , et bien mon sablier n'etait pas Colorier entierement , il y avait des lignes qui n'etait pas tracer

    merci encore , mais jsuis désolé
    j'ai encore une question à propos des TABSTRIPS , je post une new question

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/08/2008, 09h12
  2. Réponses: 2
    Dernier message: 30/01/2007, 09h02
  3. Réponses: 3
    Dernier message: 30/01/2007, 09h01
  4. [VB6]comment créer une dll
    Par kboo dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 12/04/2006, 14h32
  5. [VB6][débutant] Créer un objet COM pour XSLT
    Par trent94 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 25/01/2006, 15h42

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