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 :

Taille dynamique d'un TStringGrid


Sujet :

C++Builder

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Points : 68
    Points
    68
    Par défaut Taille dynamique d'un TStringGrid
    Bonjour à tous,

    J'ai deux petites questions sur les TStringGrid

    1)
    Première question
    Je rempli de façon dynamique un TStringGrid qui peut avoir 1, 2, 3 ou plus de lignes.
    J'aurais aimé que la hauteur de mon StringGrid correspond aux nombres de lignes. Qu'il n'y ai pas de blanc en bas du StringGrid car il n'y a pas de lignes

    Voici le code que j'avais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //Le nombre de lignes du StringGrid dépend d'une requête sur une BDD
    StringGridService->RowCount = FormPrincipale->QueryInfos->RecordCount;
     
    //Je force la hauteur de chaque lignes à 15
    for(int iTmpRow = 0; iTmpRow < StringGridService->RowCount; iTmpRow++)
          {StringGridService->RowHeights[iTmpRow] = 15;}
     
    //Je règle la hauteur du StringGrid en fonction du nombre de lignes
    StringGridService->Height = StringGridService->RowCount * 15;
    Sauf que ce code n'est pas bon. Plus y a de lignes, plus l'erreur est importante et le StringGrid est trop grand.

    2)
    Seconde question.
    Cette fois-ci la hauteur de mon StringGrid est fixe et ne bouge pas, peu importe le nombre de lignes.
    Sauf que si le nombre de lignes est inférieur à la taille du StringGrid, la scroll bar à droite n'est pas visible et mon StringGrid est cette fois si trop large.
    Y a-t-il un moyen de toujours faire apparaître la scroll bar même si elle n'est pas utile ou y a-t-il un moyen pour savoir si cette dernière n'est pas visible et donc de réduire la largeur de mon StringGrid.

    Merci à tous

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Hello,

    Un truc de ce genre ?
    StringGrid1->Height = (StringGrid1->DefaultRowHeight + 1) * StringGrid1->RowCount + GetSystemMetrics(StringGrid1->Ctl3D ? SM_CYEDGE : SM_CYBORDER)*2;

    StringGrid1->Width = (StringGrid1->DefaultColWidth + 1) * StringGrid1->ColCount + GetSystemMetrics(StringGrid1->Ctl3D ? SM_CXEDGE : SM_CXBORDER)*2;
    Pour le GetSystemMetrics, je ne m'engage qu'à moitié (juste testé sous Win7, thème classique/basique)

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    (re)Hello,

    Pour le 2: En général tu prévois la taille de tes contrôles de manière à ce que tout soit à peu près "carré" à l'écran (alignements, tailles relatives...). Si tu redimensionnes un seul contrôle, tu risques de casser l'aspect de ta fenêtre...

    Du coup vaut peut-être mieux bidouiller la grille pour qu'elle d'adapte à son contenu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      int bordures = GetSystemMetrics(StringGrid1->Ctl3D ? SM_CXEDGE : SM_CXBORDER)*2;
      int largeur = (StringGrid1->Width - bordures)/StringGrid1->ColCount-1;
      for (int i=1; i<StringGrid1->ColCount; i++)
        StringGrid1->ColWidths[i] = largeur;
      StringGrid1->ColWidths[0] = StringGrid1->Width - (largeur+1)*(StringGrid1->ColCount-1) - bordures - 1;

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Points : 68
    Points
    68
    Par défaut
    Merci de ta réponse.

    Pour le 1er cas c'est résolu.
    En effet j'ai utilisé ton code en changeant un petit détail (StringGrid1->DefaultRowHeight + 1) par (StringGrid1->DefaultRowHeight) et çà marche super. Si je laissais le +1, lorsqu'il y avait beaucoup de lignes la hauteur du StringGrid était trop importante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringGrid1->Height = (StringGrid1->DefaultRowHeight) * StringGrid1->RowCount + GetSystemMetrics(StringGrid1->Ctl3D ? SM_CYEDGE : SM_CYBORDER)*2;
    Pour contre pour le second cas c'est plus compliqué. J'avais oublié un détail et m'en excuse. La largeur des colonnes dans un même StringGrid varie. Donc je ne peux pas utiliser ton code qui suppose que tout les colonnes sont identiques.
    Il faudrait que je trouve comment savoir que le contenu du StringGrid est supérieur à la taille de ce dernier. Comme cela si le contenu du StringGrid est supérieur j'élargirais le StringGrid de la taille de la ScrollBar sinon je diminuerais la taille du StringGrid.
    En sachant que toutes les lignes n'ont pas la même hauteur... Je pense que çà va etre dur à mettre en place

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Citation Envoyé par LoicH Voir le message
    Pour le 1er cas c'est résolu.
    En effet j'ai utilisé ton code en changeant un petit détail (StringGrid1->DefaultRowHeight + 1) par (StringGrid1->DefaultRowHeight) et çà marche super. Si je laissais le +1, lorsqu'il y avait beaucoup de lignes la hauteur du StringGrid était trop importante
    Tiens, curieux.... Peut-être dessines-tu ta grille sans les lignes horizontales ?? (Tu as quoi pour GridLineWidth, Options->goFixedHorzLine et Options->goHorzLine ??)
    En fait, d'après mes essais, le DefaultRowHeight + 1 devrait plutôt être DefaultRowHeight + GridLineWidth....

    Tu peux retrouver la largeur idéale de ta grille en sommant les ColWidths + les bordures. Idem pour la hauteur avec les RowHeights. Ensuite à toi de rajouter la largeur ou la hauteur de ta scrollbar...

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Points : 68
    Points
    68
    Par défaut
    alors oui les deux options sont bien à False ça doit etre pour cela que j'ai du enlever le +1.

    Merci encore

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

Discussions similaires

  1. [Iframe][Débutant]Iframe et taille dynamique
    Par mavina dans le forum Général JavaScript
    Réponses: 26
    Dernier message: 10/05/2006, 11h15
  2. div non superposés et de taille dynamique
    Par ibtisss dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/04/2006, 11h56
  3. [HTML] DIV avec taille dynamique ?
    Par graphicsxp dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 23/02/2006, 15h42
  4. taille dynamique des cases dans état
    Par exter666 dans le forum Access
    Réponses: 14
    Dernier message: 09/09/2005, 15h30
  5. [JTABLE] taille dynamique = F°(String.length)
    Par tripop dans le forum Composants
    Réponses: 15
    Dernier message: 13/01/2005, 17h07

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