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

Delphi Discussion :

StringGrid1DrawCell formatage texte


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 211
    Points : 55
    Points
    55
    Par défaut StringGrid1DrawCell formatage texte
    bonjour
    j'emploi StringGrid1DrawCell pour formatter mes colonnes en fonction des données
    mais comment éviter de faire " begin end else begin end ect" voir exemple ci dessous
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      With Sender As TStringGrid Do With Canvas Do
      Begin 
          If gdFixed in State
          Then Brush.Color := clSkyBlue
          Else If gdSelected In State
          Then Brush.Color := clNavy
          Else Brush.Color := clWhite;
          FillRect(Rect);
     
          If gdSelected In State Then
               SetTextColor(Canvas.Handle,clWhite)
          Else SetTextColor(Canvas.Handle,clBlue);
     
         if (Acol=0) and (arow=1) then begin
            font.Size:=16;
           SetTextColor(Canvas.Handle,clblue);
           end
           else
           if (Acol=1) and (arow>0) then begin
            font.Size:=14;
           SetTextColor(Canvas.Handle,clred);
            end
            else
         if (Acol=2) and (arow>0) then begin
               font.Size:=12;
           SetTextColor(Canvas.Handle,clgreen);
          end
          else
             font.Size:=8;
     
        DrawText(Canvas.Handle, PChar(Cells[ACol,ARow]), -1, Rect ,
          DT_CENTER or DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE  );
    end;

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    pas 36 solutions...même si ton indentation pique les yeux

    un tableau peut être utilisé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    const
      TextColor:array[Boolean{Fixed}, Boolean{Selected}] of Color = (
      (clNavy, clWhite),
       (clSkyBlue, clSkyBlue)
      );
    begin
      TStringGrid(Sender).Canvas.Brush.Color := TextColor[gdFixed in State, gdSelected in State];
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 211
    Points : 55
    Points
    55
    Par défaut
    bonjour
    donc on ne peux pas faire autrement d'après votre réponse
    merci
    ps: comment fallait t'il modifier mon source pour que sa pique plus les yeux

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Niveau indentation, faut respecter l'ordre logique et l'imbrication des if ... et les mots clés, en minuscule de préférence, laisser le PascalCase pour les identifiants
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
          if gdFixed in State then 
            Brush.Color := clSkyBlue
          else 
            if gdSelected In State then 
              Brush.Color := clNavy
            else 
              Brush.Color := clWhite;
          FillRect(Rect);
    et il peut y avoir débat sur les else if indenté ou pas ... pour ressembler à un case of.

    la suite est tellement longue à réindenter, on dirait un mélange de TAB et ESPACE mal repris.

    Et sinon suffit de factoriser les tests !



    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
    const
      BRUSH_COLORS : array[Boolean{Fixed}, Boolean{Selected}] of Color = (
        (clWhite, clNavy),
        (clSkyBlue, clSkyBlue)
      );
      TEXT_COLORS: array[Boolean{Selected}] of Color = (clBlue, clWhite);
      COL_TEXT_COLORS: array[0..2{ACol}] of TColor = (clBlue, clRed, clGreen);
      COL_TEXT_FONT_SIZES: array[0..2{ACol}] of Integer = (16, 14, 12);
     
    begin
      with (Sender As TStringGrid).Canvas do
      begin
        Brush.Color := BRUSH_COLORS[gdFixed in State, gdSelected in State];
        FillRect(Rect);
     
        SetTextColor(Handle, TEXT_COLORS[gdSelected In State]);
     
        if ((ARow = 1) and (ACol = 0)) or ((ARow > 0) and (ACol in [1..2])) then
        begin
          Font.Size := COL_TEXT_FONT_SIZES[ACol];;
          SetTextColor(Handle, COL_TEXT_COLORS[ACol]);
        end
        else
          Font.Size := 8;
     
        DrawText(Handle, PChar((Sender As TStringGrid).Cells[ACol, ARow]), -1, Rect ,
          DT_CENTER or DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE  );
      end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 211
    Points : 55
    Points
    55
    Par défaut
    Bonjour
    Merci pour la réponse au code.
    Oui votre code reflète bien votre compétence. Moi je bricole, je ne fais que de petites moulinettes, jamais de gros programme.
    L'important c'est que ça marche.
    Donc encore merci de m'avoir appris des choses.

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

Discussions similaires

  1. Formatage texte dans RichEdit avec insertion image
    Par Ardely dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/10/2007, 14h19
  2. Formatage texte linux->Windows ?
    Par debuthmx dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 02/04/2007, 06h16
  3. [fonction] fonction pour formatage texte
    Par titiyo dans le forum Delphi
    Réponses: 5
    Dernier message: 29/06/2006, 12h16
  4. Formatage texte.
    Par licorne dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 01/09/2005, 11h55
  5. [CR8.5] Formatage Texte
    Par yAnSoLo82 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 23/11/2004, 09h54

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