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

C++Builder Discussion :

Dessiner un trait dans un GoupBox [BCB6]


Sujet :

C++Builder

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut Dessiner un trait dans un GoupBox [BCB6]
    Bonjour,
    J’aimerais dessiner un trait de séparation entre plusieurs composants qui se situe dans un GroupBox. Je n’ai pas trouvé comment réaliser le trait. Par défaut il sera noir.

    Auriez vous, s’il vous plait, une méthode pour faire cela ?
    Cordialement.

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Pour pouvoir faire ce que tu souhaites, il faut que le composant possède un Canvas. C'est ce qui permet de faire des dessins.

    Le GroupBox n'en possède pas, du moins pas directement ... Il faudrait voir comment faire en disposer ...

    Je regarderai mais je n'ai pas trop les compétences pour.

    Merci

    Edit :

    J'ai réussi en ajoutant dans le groupbox un Timage ...
    Ensuite, pour ce qui est du code pour une ligne entre chaque composant, j'essaierai de t'en faire une partie ...

    En tout cas, voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Image1->Canvas->Brush->Color=GroupBox1->Color;
      Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
      Image1->Canvas->MoveTo(0,10); // Position du stylo pour dessiner
      Image1->Canvas->LineTo(Image1->Width,10); // On dessine notre trait
    A oui, mets le TImage à Alignement = AllClient...

    Dès que je peux, je reviens

  3. #3
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut Draner:
    Si tu ne peut pas dessiner ton trait pourquoi ne pas inserer un GroupBox que tu redimensionne afin de te faire une separation.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut Blondelle,

    c'est vrai que ta solution n'est pas mal non plus mais je pense que l'on sera vite immergé de groupbox ...

    Sinon, c'est sur que pour le coup, plus de problème pour "tracer" le trait vu que là on le fait en mode conception ...

    Ta méthode simplifie pour ce qui est du placement du trait, et la mienne limite le nombre de composant mais on va devoir faire du code pour la position de chaque trait ...

    A voir donc

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut
    Et bien,
    Je pense que je vais je dessiner au format .BMP puis je vais l'inclure directemen dans mon appli
    L'Idéale aurais été de faire un composant graphique developper en externe et inclue dans le projet.
    Enfin ca c'est un détail. J'essairais ce soir
    Merci beaucoup pour vos indications.
    Cordialement.

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Tu peu creer un Canvas de cette facon
    Un exemple qui paint en vert le GroupBox1
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TControlCanvas *pCn;
    pCn = new TControlCanvas();
    pCn->Control = GroupBox1;
    pCn->Brush->Color = clGreen;
    pCn->Rectangle(0, 0, 488, 289);
    }
    Tu peu l'adapter avec le code de ero-sennin sans passer par un TImage
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  7. #7
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Pas mal !

    Je me doutais bien que l'on pouvais éviter de passer par un TImage
    Et hop, c'est dans la boite à Astuces

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    L'astuce n'est pas de moi je l'ai trouvee en faisant des recherches sur le Forum
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !



    J'avais une solution (je ne fais que l'envisager) à proposer mais elle demandait un peu de travail et surtout de se documenter :

    TGroupBox dérive de TCustomControl qui est doté d'un Canvas.

    Bien entendu, on aurait été obligé de développer une nouvelle classe dérivant de TGroupBox... et revoilà la surcharge de la méthode Paint... après tout... c'est du boulot !

    A plus !

  10. #10
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut henderson:
    Pour que tu puisse retrouver le sourir, si tu a un petit exemple pour ma culture perso je suis preneur, en plus ta facon de coder me plait
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  11. #11
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par blondelle
    ... si tu a un petit exemple pour ma culture perso je suis preneur...
    Idem je suis preneur bien que je suis plus souvent sur le forum voisin (Delphi)... et c'est toujours bon d'avoir des solutions diverses aux problèmes posés

  12. #12
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir,

    Une idée simple, mais qui ne correspond peut être pas a 100 % a ce qui était cherché:

    Un TBevel dans le GroupBox, avec les propriétés:
    Shape a bsTopLine
    Style a bsRaised

    @+
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  13. #13
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Et en regardant sur le Forum j'ai poste la facon de deriver un TBevel pour le mettre en couleur ce qui change du gris " souris effrayee "
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  14. #14
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Juste pour le fun, uniquement pour le fun et juste pour montrer.

    En fait, ici il y a pas mal de code du fait que l'ensemble se construit dynamiquement.
    Ce qu'il faut retenir c'est juste le dessin de la séparation verticale (en relief bien sûr) dans la méthode Paint.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class jGroupBox : public TGroupBox
    {
    public :
        __fastcall jGroupBox(TComponent *AOwner);
        __fastcall ~jGroupBox();
        //Surcharge de la méthode Paint
        void __fastcall Paint();
        //Méthodes pour créer quelques objets
        void __fastcall CreateRadioButton(TRect R, AnsiString N);
        void __fastcall CreateCheckBox(TRect R, AnsiString N);
    };
    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
    __fastcall jGroupBox::jGroupBox(TComponent *AOwner)
        : TGroupBox(AOwner)
    {
    if(AOwner->InheritsFrom(__classid(TWinControl))) Parent = (TWinControl*)AOwner;
    Caption = "Pour blondelle";
    //Je rajoute 2 RadioButton à gauche de la séparation
    int we = (Width /2) - 8;
    CreateRadioButton(Rect(8,16, we, 16), "Tag 1");
    CreateRadioButton(Rect(8,32, we, 16), "Tag 2");
    //Je rajoute 2 CheckBox à droite de la séparation
    we = (Width /2) + 8;
    CreateCheckBox(Rect(we, 16, we-17, 16), "Opt 3");
    CreateCheckBox(Rect(we, 32, we-17, 16), "Opt 4");
    }
     
    __fastcall jGroupBox::~jGroupBox()
    {
    }
     
    void __fastcall jGroupBox::CreateRadioButton(TRect R, AnsiString N)
    {
    TRadioButton *Btn = new TRadioButton(this);
    Btn->Parent = this;
    Btn->SetBounds(R.Left, R.Top, R.Right, R.Bottom);
    Btn->Caption = N;
    }
     
    void __fastcall jGroupBox::CreateCheckBox(TRect R, AnsiString N)
    {
    TCheckBox *Cbox = new TCheckBox(this);
    Cbox->Parent = this;
    Cbox->SetBounds(R.Left, R.Top, R.Right, R.Bottom);
    Cbox->Caption = N;
    }
     
    void __fastcall jGroupBox::Paint()
    {
    TGroupBox::Paint();
    //Je dessine une séparation verticale, en relief
    int we = Width/2;
    Canvas->Pen->Style = psSolid;
    Canvas->Pen->Color = clBlack;
    Canvas->Pen->Mode = pmCopy;
    Canvas->MoveTo(we, 6); Canvas->LineTo(we, Height-1);
    Canvas->Pen->Color = clWhite;
    Canvas->MoveTo(we+1, 6); Canvas->LineTo(we+1, Height-1);
    }
    Donc à l'usage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    jGroupBox *GroupBox;
     
     
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    GroupBox =  new jGroupBox(this);
    }

    Chez moi, c'est presque une seconde nature de faire compliqué quand on peut faire simple...

    A plus !

  15. #15
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Je ne pense pas que ta facon de coder soit plus compliquee que d'autre, c'est ta facon de coder qui est vraiement particuliaire et qui me plait, je vais arreter ca va finir par ressembler a une declaration
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  16. #16
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut
    Hum je voie
    Et bah pour un simple trait
    J'avoue, mon niveau est trop faible pour comprendre vos astuces
    Surtout que la... à moins que je ne me trompe... cela frise la classe!

    Si je prend un TImage, est t il possible alors de coder un trait ?
    Et ensuite d'en faire un composant que j'utiliserais dans mes programmes ?
    Par ce que cela peut me convenir.

    C'est juste pour que "((u-uLed)/Iled)=R" soit plus compréhensible.
    Rectification

    J'ai pris un TImage et je tente de faire un trait dedans

    Voila ce que j'ai mis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       //Le TImage qui fais le diviseur graphique.
       DiviseurGraphique1->Canvas->Brush->Color = clBlack;
       DiviseurGraphique1->Canvas->Draw(0, 0, 200, 100);
    J'ai renomé mon TImage en DiviseurGraphique1 par ce que c'est un trait de fraction

    Par contre ca plante

    [C++ Erreur] PanelElec.cpp(102): E2034 Impossible de convertir 'int' en 'TGraphic *'
    [C++ Erreur] PanelElec.cpp(102): E2342 Mauvaise correspondance de type dans le paramètre 'Graphic' ('TGraphic *' désiré, 'int' obtenu)
    [C++ Erreur] PanelElec.cpp(102): E2227 Paramètre supplémentaire dans l'appel à _fastcall TCanvas:raw(int,int,TGraphic *)
    Enfin voila ou j'en suis et ca bloque évidement
    Merci beaucoup pour vos indications
    Cordialement.

    << Message editer affin de corriger par rapport à ce que j'ai tenter de faire avec mes connaissances >>

  17. #17
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    DiviseurGraphique1->Canvas->Draw(0, 0, 200, 100);
    Le compilateur attend que tu fasses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //REM : Graphics::TBitmap *Bitmap
    DiviseurGraphique1->Canvas->Draw(0, 0, Bitmap);
    La question est : Doit-on dessiner un trait avec Pen ou remplir avec Brush ?

    Pour remplir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DiviseurGraphique1->Canvas->Brush->Color = ...;
    DiviseurGraphique1->Canvas->Brush->Style = ...;
    DiviseurGraphique1->Canvas->FillRect(Rect(0, 0, 200, 100));
    Pour tracer une ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DiviseurGraphique1->Canvas->Pen->Color = ...;
    DiviseurGraphique1->Canvas->Pen->Style = ...;
    DiviseurGraphique1->Canvas->Pen->Mode = ...;
    DiviseurGraphique1->Canvas->MoveTo(0,0);
    DiviseurGraphique1->Canvas->LineTo(200,100);
    A plus !

  18. #18
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut
    Je vais tenter la manipulation avec le tracé d'une ligne comme mis sur le précédent post de henderson

    Quelqu'un pourrais m'indiqué quels sont les styles disponible pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DiviseurGraphique1->Canvas->Brush->Style = ...;
    Et quelques précisions sur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DiviseurGraphique1->Canvas->Pen->Mode = ...;
    Merci beaucoup pour toute ces précisions

    Cordialement.

  19. #19
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    As-tu fais F1 sur style et mode ? A ma connaissance, cela est détaillé dans l'aide de BCB, donc juste une petit tour et hop, le tour est joué

  20. #20
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Plus globalement, il suffit de faire une recherche dans l'aide de BCB : TCanvas.

    A plus !

Discussions similaires

  1. dessiner un trait dans une listBox?
    Par UnSofteuxAmateur dans le forum Windows Forms
    Réponses: 14
    Dernier message: 28/12/2007, 11h48
  2. [ALGO] dessiner un triangle dans le bon sens
    Par lefait dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 05/02/2005, 14h38
  3. [FLASH MX2004] Dessins de traits en actionscript
    Par l'architecte dans le forum Flash
    Réponses: 2
    Dernier message: 28/07/2004, 13h57
  4. Dessiner une ligne dans un cube transparent ?
    Par Muetdhiver dans le forum OpenGL
    Réponses: 4
    Dernier message: 04/05/2004, 11h06
  5. [PaintBox] Persistance du dessin non créé dans onPaint
    Par princesse dans le forum C++Builder
    Réponses: 10
    Dernier message: 21/04/2004, 17h47

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