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 :

Problemes apres avoir derive un TGroupBox


Sujet :

C++Builder

  1. #1
    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 Problemes apres avoir derive un TGroupBox
    Bonsoir
    Je derive un TGroupBox sur lequel je met les bordures a None, je redifini ces bourdures pour avoir des epaisseurs differentes et uniformes sur le contour, et cela fonctionne cependant il me reste trois problemes
    1 - je ne peut pas definir la couleur de la bordure j'ai une exception
    2 - je n'ai pas trouve comment recupere les coordonnees de la position du composant pour automatiser cette fonction " pCn->Rectangle(2, 4, 445, 187); "
    3 - sur ce composant les TLabel et TImage disparaisent lors du trace des bordures je pense qu'elles passent sous le TGroupBox, mais pas les TEdit ni les TMemo
    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TControlCanvas *pCn;
    pCn = new TControlCanvas();
    pCn->Control = GroupBox1;
    //pCn->Pen->Color = clBlack; // ici erreur
    pCn->Pen->Width = 4;
    pCn->Rectangle(2, 4, 445, 187);
    delete pCn;
    }
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  2. #2
    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 viens de trouver comment afficher les composants lors du retracage des bordures
    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
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TControlCanvas *pCn;
    pCn = new TControlCanvas();
    pCn->Control = GroupBox1;
    //pCn->Pen->Color = clBlack; // ici erreur
    pCn->Pen->Width = 4;
    pCn->Rectangle(2, 4, 445, 187);
    delete pCn;
    GroupBox1->RemoveControl(Label1); // on enleve le composant
    GroupBox1->InsertControl(Label1); // on replace le composant
    GroupBox1->RemoveControl(Image2); // on enleve le composant
    GroupBox1->InsertControl(Image2); // on replace le composant
    }
    il me reste a trouver comment changer la couleur du contour et comment recuperer les coordonnees
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  3. #3
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Chez moi, ça marche bien, j'ai C++ Builder 6 Entreprise. Bien sûr, ce n'est qu'un essai de syntaxe (puisque vous faites ensuite un delete) mais l'instruction pCn->Pen->Color = clYellow marche sans erreur à l'exécution.

    À bientôt
    Gilles

  4. #4
    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
    J'ai trouve pour recupere les coordonnees
    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
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    GroupBox1->Ctl3D = false; // supprimer l'effet 3D
    int x = GroupBox1->Width;
    int y = GroupBox1->Height;
    TControlCanvas *pCn;
    pCn = new TControlCanvas();
    pCn->Control = GroupBox1;
    //pCn->Pen->Color = clBlack; // ici erreur
    pCn->Pen->Width = 2;
    pCn->Rectangle(1, 1, x, y);
    delete pCn;
    GroupBox1->RemoveControl(Label1); // on enleve le composant
    GroupBox1->InsertControl(Label1); // on replace le composant
    GroupBox1->RemoveControl(Image2); // on enleve le composant
    GroupBox1->InsertControl(Image2); // on replace le composant
    }
    Il me reste a trouver comment definir la couleur du contour
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  5. #5
    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
    Merci d'avoir teste Gilles Louïse
    J'ai fait l'essai avec clYellow puis clRed j'ai toujours les erreurs
    [C++ Error] Unit1.cpp(28): E2015 Ambiguity between 'clRed' and 'Graphics::clRed'
    [C++ Warning] Unit1.cpp(28): W8018 Assigning const TColor to Graphics::TColor
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  6. #6
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Alors c'est dû à un conflit entre fichiers, ça arrive avec C++ Builder. Donc soit vous bidouillez les fichiers (les headers où se trouvent les déclarations propres à C++ Builder) et modifiez les noms (ça m'est arrivé et je crois avoir donné des exemples dans mes Remarques de développement) soit vous obéissez aux ordres et précisez d'où vient ce mot-clé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pCn->Pen->Color = Graphics::clYellow;
    Ça marchera ainsi car vous supprimez l'ambiguïté.

    À bientôt
    Gilles

  7. #7
    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
    Merci pour ta reponse Gilles Louïse
    Ca fonctionne efectivement pour Pen->Color, Pen->Style, Brush->Color
    de plus tes remarques mon permis de trouver le probleme
    A l'origine le programme etait prevu pour exporter une Form vers un TImage qui est exporte vers un TPrinter, conformement a un exemple de l'aide en ligne je passais par le presse papier, pour cela j'avais declare " #include "QClipbrd.hpp ", comme j'ai supprime le passage vers le presse papier le " #include " n'est plus necessaire et mon erreur a disparue, par contre ta solution fonctionne dans tous les cas avec ou sans le " #include " meme si je comprend pas trop pourquoi
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  8. #8
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Citation Envoyé par blondelle Voir le message
    par contre ta solution fonctionne dans tous les cas avec ou sans le " #include " meme si je comprend pas trop pourquoi
    Comme vous avez supprimé le fichier où se trouvait une déclaration de même nature et donc ambiguë par rapport aux déclarations standard, l’erreur est supprimée mais cela ne vous empêche pas de donner la provenance de la déclaration, même si c’est devenu inutile.

    De la même façon par exemple (même si les syntaxes sont un peu différentes), qu’ayant un bouton Button1 sur la forme Form1, vous pouvez soit dire Button1-> (pour accéder à ses éléments) soit dire Form1->Button1->, dans le premier cas, la classe non spécifiée est la classe par défaut donc Form1, dans le second cas, vous la signalez et ça marche même si c’est la même. En revanche, la seconde syntaxe est nécessaire si vous appelez Button1 à l’intérieur d’une autre classe que TForm1.

    Une autre solution consistait à éditer le fichier supprimé et à modifier la déclaration, par exemple au lieu de clRed l’appeler clRed1, l’ambiguïté est alors supprimée et clRed est interprété comme faisant partie de Graphics::

    À bientôt
    Gilles

  9. #9
    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
    Merci Gilles Louïse
    pour toutes ces precisions
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/03/2014, 10h00
  2. Réponses: 0
    Dernier message: 06/06/2011, 14h06
  3. Réponses: 1
    Dernier message: 12/04/2010, 15h46
  4. [UIB] Probleme pour ecrire dans firebird apres avoir lu
    Par dehorter olivier dans le forum Connexion aux bases de données
    Réponses: 2
    Dernier message: 28/06/2007, 07h48
  5. [NAV 2004] Bug après avoir renommé la corbeille
    Par Halleck dans le forum Windows
    Réponses: 2
    Dernier message: 29/02/2004, 21h06

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