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 :

[TStringGrid] Centrer le texte


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Par défaut [TStringGrid] Centrer le texte
    Bonjour,
    chez moi le code ne marche pas totalement : http://www.developpez.net/forums/showthread.php?t=12780
    Il centre bien le texte mais il remplace le texte des cellules par celui de la cellule [0][0].

    De plus, j'ai voulu créer une fonction centrer_texte qui reprend presque tout le code de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
          int ARow, TRect &Rect, TGridDrawState State)
    mais quand je crée mon rectangle comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     TRect R1;
    R1 = Rect(0,0,85,20);
    il me dit que : "appel d'une non fonction"

  2. #2
    Membre averti
    Inscrit en
    Août 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 16
    Par défaut
    Bonjour,


    Rect est un pointeur de type TRect

    je pense qu'il faudrait faire

    R1 = *Rect;

    A+

  3. #3
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    Essais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TRect R1 = TRect(0,0,85,20);
    ou bien ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TRect R1;
    R1 = Classes::Rect(0,0,85,20);

    Citation Envoyé par mic.29
    Rect est un pointeur de type TRect
    Je dirais plutôt que c'est une référence à un objet TRect.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Par défaut
    Merci pour le code TRect ca marche

    par contre ma fonction centrer_txt non :/

    voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void  TForm1::centrer_txt(int ACol, int ARow, char *texte)
    {
            TRect R1 = TRect(0,0,85,20);
            StringGrid1->Canvas->TextRect(R1, (R1.Right - StringGrid1->Canvas->TextWidth(texte)) -25, (R1.Top + R1.Bottom - StringGrid1->Canvas->TextHeight(texte)) / 2, texte);
     
            if ((ACol == 2) && (ARow >0))
            {
                    StringGrid1->Canvas->Font->Color = clRed;//couleur texte
                    StringGrid1->Canvas->FillRect(R1);
                    StringGrid1->Canvas->TextRect(R1, (R1.Right - StringGrid1->Canvas->TextWidth(texte)) -25, (R1.Top + R1.Bottom - StringGrid1->Canvas->TextHeight(texte)) / 2, texte);
            }
            else StringGrid1->Canvas->Font->Color = clWindowText;
    }
    Si je rentre en dur un mot ca marche, mais si je lis dans mon fichier pour afficher dans ma grille centré, ca ne marche plus :/

  5. #5
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    Ta fonction écrit dans une zone bien délimité de ta StringGrid (0,0,85,20)
    Elle ecrira toujours au même endroit.
    Si tu veux écrire dans des cases differentes, il faut utiliser l'évenement onDrawCell.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Par défaut
    En utilisant l'evenement jo'btiens ca :

    Il centre bien le texte mais il remplace le texte des cellules par celui de la cellule [0][0].

  7. #7
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    Poste le code que tu à mis sur l'événement onDrawCell
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Par défaut
    voici le code, c'est le code qu'une personne avait donné en reponse a une question similaire. :

    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::StringGrid1DrawCell(TObject *Sender, int ACol,
          int ARow, TRect &Rect, TGridDrawState State)
    {
            AnsiString s;
          s = StringGrid1->Cells[Col][Row];
          TRect R1;
            R1 = Rect;
            StringGrid1->Canvas->TextRect(R1, (R1.Right - StringGrid1->Canvas->TextWidth(s)) -25, (R1.Top + R1.Bottom - StringGrid1->Canvas->TextHeight(s)) / 2, s);
     
            if ((ACol == 2) && (ARow >0))
            {
                    ((TStringGrid*) Sender)->Canvas->Font->Color = clRed;//couleur texte
                    ((TStringGrid*) Sender)->Canvas->FillRect(Rect);//colorisation de la première ligne
                    ((TStringGrid*) Sender)->Canvas->TextRect(R1, (R1.Right - StringGrid1->Canvas->TextWidth(s)) -25, (R1.Top + R1.Bottom - StringGrid1->Canvas->TextHeight(s)) / 2, s);//TextRect(Rect,Rect.Left + 5,Rect.Top + 5,((TStringGrid *)Sender)->Cells[ACol][ARow]);
            }        
    }

  9. #9
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    Pour récuperer la bonne chaine ce n'est pas Col et Row qu'il faut utiliser mais ACol et ARow


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s = StringGrid1->Cells[ACol][ARow];
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Par défaut
    Merci
    Des fois ca ce joue a juste un nom de variable qui change d'une lettre et on le voit pas :/

    Merci

  11. #11
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    Et pour centrer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    StringGrid1->Canvas->TextRect(R1, R1.Right - (R1.Width()+StringGrid1->Canvas->TextWidth(s))/2,
                                       R1.Bottom - (R1.Height()+StringGrid1->Canvas->TextHeight(s))/2, s);
    ça centrera mieux
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Par défaut
    ah ok oui j'allais le dire que ca ne centre pas correctement :/

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

Discussions similaires

  1. Comment centrer le texte d'un TStringGrid
    Par blondelle dans le forum C++Builder
    Réponses: 1
    Dernier message: 19/11/2008, 19h23
  2. Centrer le texte dans une TStringGrid
    Par Rodrigue dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/06/2004, 11h01
  3. Comment centrer un Texte dans un rectangle ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 21h56
  4. Centrer un texte dans un string Grid
    Par christine dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/10/2002, 22h33

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