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

Composants VCL Delphi Discussion :

Automatiser la taille d'un colonne dun StringGrid


Sujet :

Composants VCL Delphi

  1. #1
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut Automatiser la taille d'un colonne dun StringGrid
    Bonjour à tous,

    Récemment j'ai posé une question sur un stringgrid concernant le WordBreak

    http://www.developpez.net/forums/d66...-dt_wordbreak/

    J'aimerais savoir comment faire pour que lorsque le calcul du wordbreak est fait que la taille de la colonne soit aussi grand que le plus grand des mots.

    Je m'explique :
    imaginons que j'ai ses titres en ligne 0
    Colonne 0 :
    CONGES
    Colonne 1 :
    MALADIE
    ...
    Colonne 9 :
    TRAVAUX
    HORS
    DEPARTEMENT

    La fonctionne proposé par AndNotor fonctionne bien mais dans la colonne 9 le 'D' et le dernier 'T' de département dépasse la taille de la cellule et se superpose aux autres.

    J'ai tenté cela en plus de la fonctionne de AndNotOr (voir en rouge)

    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
    procedure TFStatistiques.GridSemaineNombreDrawCell(Sender: TObject; ACol,
      ARow: Integer; Rect: TRect; State: TGridDrawState);
    Var
      NewRect :TRect;
    begin
    ....
          //Calculation du rectangle nécessaire à l'affiche du texte en single ou multiline
          DrawText(Handle, PChar(Cells[Acol,Arow]), -1, NewRect, DT_CENTER or DT_WORDBREAK or DT_CALCRECT);
          //Centrage du texte
          OffsetRect(NewRect, (Rect.Right -NewRect.Right) div 2, (Rect.Bottom -NewRect.Bottom) div 2);
          // Agrandissement de la taille de la colonne si le texte est trop grand
         if (Rect.Right-NewRect.Right) < 0 then GridSemaineTemps.ColWidths[Acol] := GridSemaineTemps.ColWidths[Acol] - ((Rect.Right-NewRect.Right)*4);
    
          //Affichage
          DrawText(Handle, PChar(Cells[Acol,Arow]), -1, NewRect, DT_CENTER or DT_WORDBREAK)
        end;
     
    ....
    le hic c'est que j'obtiens
    Colonne 9 :
    TRAVAUX HORS
    DEPARTEMENT

    Donc maintenant, le text est sur 2 lignes et je retombe sur le même problème.
    De plus au niveau de l'affichage c'est pas esthétique.

    Il y a-t-il une autre solution ?

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Pourquoi x4 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (Rect.Right -NewRect.Right) < 0 then 
    begin
      //Agrandissement + marges gauche/droite 2px (+4)
      GridSemaineTemps.ColWidths[Acol] := GridSemaineTemps.ColWidths[Acol] + (NewRect.Right -Rect.Right +4);
      OffsetRect(NewRect, (NewRect.Right -Rect.Right +4) div 2, 0);
    end;

  3. #3
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Merci,

    cela fonctionne mais j'ai du mettre +6 sinon la barre de la lettre 'D' n'apparait pas : donc j'ai modifié ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            //Agrandissement + marges gauche/droite 3px (+6)
            GridSemaineTemps.ColWidths[Acol] := GridSemaineTemps.ColWidths[Acol] + (NewRect.Right -Rect.Right +6);
            OffsetRect(NewRect, (NewRect.Right -Rect.Right +6) div 2, 0);
    Merci encore à toi.

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

Discussions similaires

  1. colonne de stringgrid invisible
    Par deubal dans le forum Composants VCL
    Réponses: 4
    Dernier message: 01/12/2005, 09h10
  2. Récupérer le type et la taille d'une colonne
    Par Progs dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 23/09/2005, 17h27
  3. [Oracle9i] Modification taille d'une colonne
    Par Jibees dans le forum Oracle
    Réponses: 14
    Dernier message: 05/08/2005, 11h25
  4. Réponses: 12
    Dernier message: 11/04/2005, 18h31
  5. [JTable] ajuster la taille d'une colonne à la taille du texte
    Par GETah dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 24/02/2005, 11h53

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