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 :

ajustement de colonne StringGrid


Sujet :

C++Builder

  1. #1
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut ajustement de colonne StringGrid
    Bonjour,
    J'aimerais savoir s'il existe une fonction qui me permettrais d'ajuster la taille de mes colonnes de mon StringGrid en fonction de la longueur des données inscrites dans les différents champs....
    Merci par avance
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  2. #2
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Pour changer la largeur d'une colone il y a la propriété ColWidths.
    ex: mettre la largeur à 200 px de la colone 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringGrid1->ColWidths[1] = 200;
    Pour la taille d'une chaine il y a la fonction membre TextWidth de canvas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringGrid1->Canvas->TextWidth(st);
    ou st est une AnsiString.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Par défaut
    Tu peux aussi utiliser, il me semble, length() ...
    de façon à ajusté automatiquement la colone au contenu...
    Cordialement.

  4. #4
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Citation Envoyé par Draner Voir le message
    Tu peux aussi utiliser, il me semble, length() ...
    de façon à ajusté automatiquement la colone au contenu...
    ?!??!!?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Par défaut
    A voir ta réponse je m'suis trompé...

  6. #6
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    En effet je connait le principe de Lenght()

    Mon problème c'est que j'aimerai que en appuyant sur un bouton je puisse parcourir l'ensemble de la colonne et trouver la chaine la plus longue pour pouvoir modifier la taille de ma colonne....

    J'ai été clair??
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  7. #7
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Citation Envoyé par ludojojo Voir le message
    J'ai été clair??
    Et moi ! je n'ai pas été clair ?

  8. #8
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    Voila ce que j'ai essayé de construire mais ce n'est pas encore ça...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    AnsiString S;
      for(int i = 0; i<StringGrid1->RowCount; i++)
      {
        if(StringGrid1->Cells[StringGrid1->Selection.Left][i].Lenght() > StringGrid1->Cells[StringGrid1->Selection.Left][i+1].Lenght())
           S = StringGrid1->Cells[StringGrid1->Selection.Left][i];
        else
           S = StringGrid1->Cells[StringGrid1->Selection.Left][i+1];
      }
    une idée?
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  9. #9
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Citation Envoyé par ludojojo
    une idée?
    Tu lis les réponses des fois ?

  10. #10
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    voila ou j'en suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    AnsiString S;
      for(int i = 0; i<StringGrid1->RowCount; i++)
      {
        if(StringGrid1->Cells[StringGrid1->Selection.Left][i].Length() > StringGrid1->Cells[StringGrid1->Selection.Left][i+1].Length())
           S = StringGrid1->Cells[StringGrid1->Selection.Left][i];
        else
           S = StringGrid1->Cells[StringGrid1->Selection.Left][i+1];
      }
      StringGrid1->ColWidths[StringGrid1->Selection.Left] = S.Length();
    Mon soucis c'est que lorsque je fait appel à cette fonction, ma colonne devient minuscule!
    Faut il rajouter un coefficient multiplicateur?
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  11. #11
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Un monologue !

  12. #12
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    je ne comprend pas pourquoi vous dites ça...
    J'ai bien lu ce que vous m'avez écrit! mais je n'ai pas la solution...
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  13. #13
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    Je l'ai retravailler pour incorporer l'ensemble de vos informations, mais mon problème reste identique, je perd ma colonne...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    AnsiString S;
      for(int i = 0; i<StringGrid1->RowCount; i++)
      {
        if(StringGrid1->Canvas->TextWidth(StringGrid1->Cells[StringGrid1->Selection.Left][i]) > StringGrid1->Canvas->TextWidth(StringGrid1->Cells[StringGrid1->Selection.Left][i+1]))
           S = StringGrid1->Cells[StringGrid1->Selection.Left][i];
        else
           S = StringGrid1->Cells[StringGrid1->Selection.Left][i+1];
      }
      StringGrid1->ColWidths[StringGrid1->Selection.Left] = StringGrid1->Canvas->TextWidth(S);
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  14. #14
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    je ne comprend pas pourquoi vous dites ça...
    Et bien la largeur d'une chaine en pixel ce n'est pas Lenght mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Canvas->TextWidth(Chaine);
    Lenght pour une AnsiString renvoie son nombre de caractères.

  15. #15
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    justement je pensait calculer le nombre de caratères puis les multiplier par le nombre de pixels qu'il fallait...
    Mais votre solution me convient parfaitement, à savoir passer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Canvas->TextWidth(Chaine);
    C'est comme cela que je l'ai adapter dans mon dernier exemple de mon code ici en gras :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void __fastcall TForm_agenda::BitBtn1Click(TObject *Sender)
    {
    AnsiString S;
      for(int i = 0; i<StringGrid1->RowCount; i++)
      {
        if(StringGrid1->Canvas->TextWidth(StringGrid1->Cells[StringGrid1->Selection.Left][i]) > StringGrid1->Canvas->TextWidth(StringGrid1->Cells[StringGrid1->Selection.Left][i+1]))
           S = StringGrid1->Cells[StringGrid1->Selection.Left][i];
        else
           S = StringGrid1->Cells[StringGrid1->Selection.Left][i+1];
      }
      StringGrid1->ColWidths[StringGrid1->Selection.Left] = StringGrid1->Canvas->TextWidth(S);
    }
    mais cela ne fonctionne pas, J'ai une largeur de colonne qui se modifie mais elle reste toujours inférieur à la longueur de la chaine maximal....

    mais cela est sur la bonne voi merci...
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  16. #16
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Déjà ta methode pour chercher le texte le plus large ne va pas du tout.
    Quand tu arrive en fin de boucle tu pointe sur Cell[colonne][i+1] c'est à dire une ligne qui n'existe pas.

    Je ferais plustôt comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      AnsiString S;
      int WidthCol = 20; // largeur 20 mini ça evite d'avoir des colonnes de largeur 0
      for(int i = 0; i<StringGrid1->RowCount; i++)
      {
        if(StringGrid1->Canvas->TextWidth(StringGrid1->Cells[StringGrid1->Selection.Left][i]) > WidthCol )
              WidthCol = StringGrid1->Canvas->TextWidth(StringGrid1->Cells[StringGrid1->Selection.Left][i]);
      }
      StringGrid1->ColWidths[StringGrid1->Selection.Left] = WidthCol;

  17. #17
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    Je rectifie et je m'excuse auprès de Lucien63...
    Cela fonctionne très bien, à l'exception du fait qu'il vaut mieux rajouter quelque pixels pour ne pas se faire aspirer le dernier caractère.
    Mon problème de perte de caractères est du au fait que mon tableau n'était pas plein!

    une idée pour éviter ce problème???
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Par défaut
    Effectivement j'ai du confondre avec Lenght() . Le principe était la

  19. #19
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    Merci bcp cela est vraiment parfait!!



    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

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

Discussions similaires

  1. Ajustement de colonne
    Par naty76 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/02/2009, 19h49
  2. Probleme pour ajuster les colonnes d"une dbgrid ou msflexgrid
    Par jacko842 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/01/2009, 17h35
  3. couleur colonne StringGrid
    Par ludojojo dans le forum C++Builder
    Réponses: 5
    Dernier message: 09/06/2008, 11h40
  4. ajustement des colonnes d'une table
    Par benja01 dans le forum WinDev
    Réponses: 1
    Dernier message: 29/04/2008, 09h01
  5. Réponses: 3
    Dernier message: 03/06/2007, 16h31

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