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 :

Changer la couleur de fond et de la police sur une ligne d'un StringGrid


Sujet :

Composants VCL Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Maintenance nucléaire
    Inscrit en
    Janvier 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Maintenance nucléaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 107
    Points : 36
    Points
    36
    Par défaut Changer la couleur de fond et de la police sur une ligne d'un StringGrid
    Salut à tous,

    J'ai un StringGrid dans mon application sur lequel je fais un traitement qui consiste à extraire les données qui sont stockées sur une ligne du tableau pour un besoin particulier. Toutes les lignes du tableau sont concernées.

    Afin de permettre à l'utilisateur de voir la progression du traitement de tout le tableau, je souhaiterais, une fois qu'une ligne est traitée, que le programme puisse changer sa couleur de fond et, éventuellement, sa police de caractère.

    En gros, une ligne non traitée : fond blanc, une ligne traitée : fond vert.

    Dans la FAQ concernant ce composant, il est possible de colorer toutes les lignes du tableau pour en simplifier la lisibilité.
    Ce n'est pas mon besoin (même si ça m'intéresse quand même).

    Si quelqu'un a une idée, je suis preneur.

    Nota : StringGrid.Rows[I] n'accepte pas la propriété "Color".

    Naga

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 449
    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 449
    Points : 24 856
    Points
    24 856
    Par défaut
    Dans un TStringGrid, pour faire cela, j'ajoute un gestionnaire d'évènement de OnDrawCell

    C'est un composant que je n'utilise quasiment jamais mais j'ai un petit helper basique

    La fonction DrawCellTitleCenter plutôt conçu pour dessiner un titre fonctionne aussi si des colonnes de données

    Tu as donc lu FAQ Comment avoir des lignes de couleur sur un TStringGrid ?
    mais si en étudiant un peu le code, tu pouvais facilement trouver comment colorer une seule cellule !
    Il suffit de gérer la propriété Objects[] pour y stocker un objet stockant des informations concernant la cellule ce qui permettra de la colorer ou non !

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
      TStringGridSliteHelper = class helper for TStringGrid
      public
        procedure DrawCellEmpty(ACol, ARow: Integer; ABackgroundColor: TColor = clNone; AState: TGridDrawState = []);
        procedure DrawCellTitleCenter(ACol, ARow: Integer; const AText: string; ABackgroundColor: TColor = clNone; AState: TGridDrawState = []);
        procedure DrawCellCheckBox(ACol, ARow: Integer; AChecked: Boolean; AEnabled: Boolean = True; ABackgroundColor: TColor = clNone; AState: TGridDrawState = []);
        procedure ZoomColumnWidth(AZoomPourcent: Integer);
      end;
     
    ....
     
    { TStringGridSliteHelper }
     
    //------------------------------------------------------------------------------
    procedure TStringGridSliteHelper.DrawCellCheckBox(ACol, ARow: Integer; AChecked: Boolean; AEnabled: Boolean = True; ABackgroundColor: TColor = clNone; AState: TGridDrawState = []);
    begin
      with TStringGridSLTAssistant.Create(Self) do
      try
        DrawCellCheckBox(ACol, ARow, AChecked, AEnabled, ABackgroundColor, AState);
      finally
        Free();
      end;
    end;
     
    //------------------------------------------------------------------------------
    procedure TStringGridSliteHelper.DrawCellEmpty(ACol, ARow: Integer; ABackgroundColor: TColor = clNone; AState: TGridDrawState = []);
    begin
      with TStringGridSLTAssistant.Create(Self) do
      try
        DrawCellEmpty(ACol, ARow, ABackgroundColor, AState);
      finally
        Free();
      end;
    end;
     
    //------------------------------------------------------------------------------
    procedure TStringGridSliteHelper.DrawCellTitleCenter(ACol, ARow: Integer; const AText: string; ABackgroundColor: TColor = clNone; AState: TGridDrawState = []);
    begin
      with TStringGridSLTAssistant.Create(Self) do
      try
        DrawCellTitleCenter(ACol, ARow, AText, ABackgroundColor, AState);
      finally
        Free();
      end;
    end;
     
    //------------------------------------------------------------------------------
    procedure TStringGridSliteHelper.ZoomColumnWidth(AZoomPourcent: Integer);
    begin
      with TStringGridSLTAssistant.Create(Self) do
      try
        ZoomColumnWidth(AZoomPourcent);
      finally
        Free();
      end;
    end;
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
     
    //------------------------------------------------------------------------------
    (*                SoLuTions is an Versatile Library for Delphi                 -
     *                                                                             -
     *  Copyright ou © ou Copr. "SLT Solutions", (2006)                            -
     *  contributeur : ShaiLeTroll (2012) - Gestion des Styles sous C++BuilderXE2  -
     *  contributeur : ShaiLeTroll (2012) - Documentation Insight                  -
     *  contributeur : ShaiLeTroll (2014) - Traduction du code C++Builder vers DelphiXE2
     *                                                                             -
     *                                                                             -
     * Ce logiciel est un programme informatique servant à aider les développeurs  -
     * Delphi avec une bibliothèque polyvalente, adaptable et fragmentable.        -
     *                                                                             -
     * Ce logiciel est régi par la licence CeCILL-C soumise au droit français et   -
     * respectant les principes de diffusion des logiciels libres. Vous pouvez     -
     * utiliser, modifier et/ou redistribuer ce programme sous les conditions      -
     * de la licence CeCILL-C telle que diffusée par le CEA, le CNRS et l'INRIA    -
     * sur le site "http://www.cecill.info".                                       -
     *                                                                             -
     * En contrepartie de l'accessibilité au code source et des droits de copie,   -
     * de modification et de redistribution accordés par cette licence, il n'est   -
     * offert aux utilisateurs qu'une garantie limitée.  Pour les mêmes raisons,   -
     * seule une responsabilité restreinte pèse sur l'auteur du programme,  le     -
     * titulaire des droits patrimoniaux et les concédants successifs.             -
     *                                                                             -
     * A cet égard  l'attention de l'utilisateur est attirée sur les risques       -
     * associés au chargement,  à l'utilisation,  à la modification et/ou au       -
     * développement et à la reproduction du logiciel par l'utilisateur étant      -
     * donné sa spécificité de logiciel libre, qui peut le rendre complexe à       -
     * manipuler et qui le réserve donc à des développeurs et des professionnels   -
     * avertis possédant  des  connaissances  informatiques approfondies.  Les     -
     * utilisateurs sont donc invités à charger  et  tester  l'adéquation  du      -
     * logiciel à leurs besoins dans des conditions permettant d'assurer la        -
     * sécurité de leurs systèmes et ou de leurs données et, plus généralement,    -
     * à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.          -
     *                                                                             -
     * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez      -
     * pris connaissance de la licence CeCILL-C, et que vous en avez accepté les   -
     * termes.                                                                     -
     *                                                                             -
     *----------------------------------------------------------------------------*)
    unit SLT.Controls.VCL.GridsEx;
     
    interface
     
    uses System.SysUtils, System.Types,
      Vcl.Grids, Vcl.Graphics, Vcl.Themes;
     
    type
      /// <summary>Erreur liée à l'assistant TStringGridSLTAssistant de la classe TStringGrid</summary>
      EStringGridSLTAssistantError = class(Exception);
     
      /// <summary>Assistance de la classe TStringGrid</summary>
      /// <remarks>Le TStringGridSLTAssistant n'est pas un class helper car lors de sa création la version utilisée était C++Builder XE2,
      /// Traduction C++Builder vers Delphi en concervant ce concept des Assistances de classes (Class Helper) du Delphi.NET</remarks>
      TStringGridSLTAssistant = class(TObject)
      private
        // Membres privés
        FStringGrid: TStringGrid;
      public
        // Constructeurs
        constructor Create(AStringGrid: TStringGrid); overload;
        constructor Create(Sender: TObject); overload;
     
        /// <summary>DrawCellOfEmptyGrid Fournit une assistance au TStringGrid.OnDrawCell pour fournir le rendu d'une cellule vide</summary>
        /// <param name="ACol">indique l'indice de colonne de la cellule à redessiner</param>
        /// <param name="ARow">indique l'indice de ligne de la cellule à redessiner</param>
        /// <param name="ABackgroundColor">Couleur de fond, clNone pour utiliser la couleur du thème</param>
        /// <param name="AState">Le paramètre State indique si la cellule détient la focalisation, si elle est sélectionnée ou si la cellule est une cellule fixe (qui ne défile pas).</param>
        procedure DrawCellEmpty(ACol, ARow: Integer; ABackgroundColor: TColor = clNone; AState: TGridDrawState = []);
     
        /// <summary>DrawCellTitleCenter Fournit une assistance au TStringGrid.OnDrawCell pour fournir le rendu d'une cellule de titre avec son texte centré horizontalement et verticalement</summary>
        /// <param name="ACol">indique l'indice de colonne de la cellule à redessiner</param>
        /// <param name="ARow">indique l'indice de ligne de la cellule à redessiner</param>
        /// <param name="AText">indique le texte de cellule à redessiner</param>
        /// <param name="ABackgroundColor">Couleur de fond, clNone pour utiliser la couleur du thème</param>
        /// <param name="AState">Le paramètre State indique si la cellule détient la focalisation, si elle est sélectionnée ou si la cellule est une cellule fixe (qui ne défile pas).</param>
        procedure DrawCellTitleCenter(ACol, ARow: Integer; const AText: string; ABackgroundColor: TColor = clNone; AState: TGridDrawState = []);
     
        /// <summary>DrawCheckBox fournit un assistant d'implémentation d'un TStringGrid.OnDrawColumnCell qui dessine une case à cocher centrée dans la zone définie par ARect</summary>
        /// <param name="ACol">indique l'indice de colonne de la cellule à redessiner</param>
        /// <param name="ARow">indique l'indice de ligne de la cellule à redessiner</param>
        /// <param name="AChecked">Etat de la case à cocher</param>
        /// <param name="AEnabled">la case à cocher est-elle active</param>
        /// <param name="ABackgroundColor">Couleur de fond, clNone pour utiliser la couleur du thème</param>
        /// <param name="AState">Etat de la cellule d'une grille qui est en cours de restitution</param>
        procedure DrawCellCheckBox(ACol, ARow: Integer; AChecked: Boolean; AEnabled: Boolean = True; ABackgroundColor: TColor = clNone; AState: TGridDrawState = []);
     
        // Méthodes d'ergonomie
        procedure ZoomColumnWidth(AZoomPourcent: Integer);
     
        // Propriétés
        property StringGrid: TStringGrid read FStringGrid;
      end;
     
    implementation
     
    uses Winapi.Windows;
     
    const
      ERR_UNASSISTED_CLASS = 'La Classe d''Assistance %s ne prend pas en charge la classe %s mais la classe %s';
     
    { TStringGridSLTAssistant }
     
    //------------------------------------------------------------------------------
    constructor TStringGridSLTAssistant.Create(AStringGrid: TStringGrid);
    begin
      inherited Create();
     
      FStringGrid := AStringGrid;
    end;
     
    //------------------------------------------------------------------------------
    constructor TStringGridSLTAssistant.Create(Sender: TObject);
    begin
      inherited Create();
     
      if Assigned(Sender) then
      begin
        if Sender is TStringGrid then
          FStringGrid := TStringGrid(Sender)
        else
          raise EStringGridSLTAssistantError.CreateFmt(ERR_UNASSISTED_CLASS, [ClassName(), Sender.ClassName(), TStringGrid.ClassName()]);
      end
      else
        raise EStringGridSLTAssistantError.CreateFmt(ERR_UNASSISTED_CLASS, [ClassName(), '[nil]', TStringGrid.ClassName()])
    end;
     
    //------------------------------------------------------------------------------
    procedure TStringGridSLTAssistant.DrawCellCheckBox(ACol, ARow: Integer; AChecked: Boolean; AEnabled: Boolean = True; ABackgroundColor: TColor = clNone; AState: TGridDrawState = []);
    const
      CSelected: array[TGridDrawingStyle] of TThemedGrid = (
        tgClassicCellSelected, tgCellSelected, tgGradientCellSelected);
    var
      uState: UINT;
      tbState: TThemedButton;
      Details: TThemedElementDetails;
      StyleColor: TColor;
      Buffer: Vcl.Graphics.TBitmap;
      vRect, BufferRect: TRect;
    begin
      if StyleServices.Enabled then
      begin
        vRect := StringGrid.CellRect(ACol, ARow); // Rect Plus fiable que celui fourni par OnDrawCell !
     
        // J'utilise un Buffer temporaire pour dessiner le ThemedButton CheckBox dans le TStringGrid
        Buffer := Vcl.Graphics.TBitmap.Create();
        try
          BufferRect := Rect(0, 0, vRect.Width, vRect.Height);
          Buffer.SetSize(BufferRect.Width, BufferRect.Height);
     
          if ABackgroundColor = clNone then
          begin
            // On dessine un fond normal assurant normalement un bon constrate avec la CheckBox
            Details := StyleServices.GetElementDetails(tgCellNormal);
            StyleServices.GetElementColor(Details, ecFillColor, StyleColor);
          end
          else
            StyleColor := ABackgroundColor;
     
          // Même si la cellule est sélectionné, on laisse un fond neutre pour mieux voir la CheckBox
          // Force un fond opaque pour cacher le texte !
          Buffer.Canvas.Brush.Color := StyleColor;
          Buffer.Canvas.Brush.Style := bsSolid;
          Buffer.Canvas.FillRect(BufferRect);
     
          tbState := tbCheckBoxUncheckedNormal;
          if AChecked then
            tbState := tbCheckBoxCheckedNormal;
     
          if not AEnabled then
          begin
            if AChecked then
              tbState := tbCheckBoxCheckedDisabled
            else
              tbState := tbCheckBoxUncheckedDisabled;
          end;
     
          Details := StyleServices.GetElementDetails(tbState);
          StyleServices.DrawElement(Buffer.Canvas.Handle, Details, BufferRect, BufferRect);
          // Dessin final
          StringGrid.Canvas.Draw(vRect.Left, vRect.Top, Buffer);
        finally
          Buffer.Free();
        end;
      end
      else
      begin
        uState := DFCS_BUTTONCHECK;
        if AChecked then
          uState := uState or DFCS_CHECKED;
     
        if not AEnabled then
          uState := uState or DFCS_INACTIVE;
     
        StringGrid.Canvas.FillRect(vRect);
        DrawFrameControl(StringGrid.Canvas.Handle, vRect, DFC_BUTTON, uState);
      end;
    end;
     
    //------------------------------------------------------------------------------
    procedure TStringGridSLTAssistant.DrawCellEmpty(ACol, ARow: Integer; ABackgroundColor: TColor = clNone; AState: TGridDrawState = []);
    var
      Details: TThemedElementDetails;
      DetailColor: TColor;
      vRect: TRect;
    begin
      with StringGrid.Canvas do
      begin
        if StyleServices.Enabled then
        begin
          Details := StyleServices.GetElementDetails(tgCellNormal);
          StyleServices.GetElementColor(Details, ecFillColor, DetailColor);
          if ABackgroundColor = clNone then
          begin
            Pen.Color := DetailColor;
            Brush.Color := DetailColor;
          end
          else
          begin
            Pen.Color := ABackgroundColor;
            Brush.Color := ABackgroundColor;      
          end;
        end
        else
        begin
          Pen.Color := StringGrid.Color;
          Brush.Color := StringGrid.Color;
        end;  
     
        vRect := StringGrid.CellRect(ACol, ARow); // Rect Plus fiable que celui fourni par OnDrawCell !
        Rectangle(vRect);
      end;
    end;
     
    //------------------------------------------------------------------------------
    procedure TStringGridSLTAssistant.DrawCellTitleCenter(ACol, ARow: Integer; const AText: string; ABackgroundColor: TColor = clNone; AState: TGridDrawState = []);
    var
      vText: string;
      vRect: TRect;
    begin
      if ABackgroundColor <> clNone then
      begin
        StringGrid.Canvas.Pen.Color := ABackgroundColor;
        StringGrid.Canvas.Brush.Color := ABackgroundColor;
        DrawCellEmpty(ACol, ARow, ABackgroundColor, AState);
      end;
     
      // TextRect encapsule DraxTextEx et est aussi pénible avec ses paramètres in-out !
      vText := AText;
      vRect := StringGrid.CellRect(ACol, ARow);
      vRect.Left := vRect.Left + 3; // Pour ne pas superposer le texte et le rectangle de sélection
      // DT_CENTER Centers text horizontally in the rectangle.
      // DT_VCENTER Centers text vertically. This value is used only with the DT_SINGLELINE value.
      StringGrid.Canvas.TextRect(vRect, vText, [tfCenter, tfSingleLine, tfVerticalCenter]);
    end;
     
    //------------------------------------------------------------------------------
    procedure TStringGridSLTAssistant.ZoomColumnWidth(AZoomPourcent: Integer);
    var
      I: Integer;
    begin
      for I := 0 to StringGrid.ColCount - 1 do
        StringGrid.ColWidths[I] := Round(StringGrid.ColWidths[I] * AZoomPourcent / 100);
    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

  3. #3
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    voici un exemple simple qui alterne les couleurs d'une grille. Ca devrait t'aider..

    1)Ajoute un string grid dans une form, et dans l'évènement OnDrawCell rajoute ces lignes:

    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
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
    begin
      if (ARow=0) or (ACol=0) then Exit;
     
      with StringGrid1,Canvas do
      Begin
     
        Pen.Color := clgray;
        Brush.Color := clinfoBk;
        if (ARow and 1)=1 then Brush.Color:=clwhite;
     
        Rectangle(Rect.Left - 1,Rect.Top - 1,Rect.Right + 1,Rect.Bottom + 1);
        Font.Color := clBlack;
        TextOut(Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]);
      End;
    end;
    Nom : exemple.png
Affichages : 1087
Taille : 3,0 Ko

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Maintenance nucléaire
    Inscrit en
    Janvier 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Maintenance nucléaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 107
    Points : 36
    Points
    36
    Par défaut
    Salut à tous les deux et merci pour vos retour.

    Pour ShaiLeTroll,
    En fait je ne suis pas du tout familier des instructions concernant la gestion des couleurs et des apparences.
    Quand j'ai vu le code donné dans la FAQ, en fait je n'y ai pas compris grand chose (je sais c'est honteux ).
    Je vais quand même essayer de décortiquer ce code et celui que tu donnes pour comprendre.
    Merci pour la fonction.

    Pour frankcl,
    En gros, si j'ai bien compris, tu dessines des rectangles de couleurs sur les cases de ton tableau.
    Mais ce code suit-il si on fait défiler le tableau avec la scrollbar ?
    Faut que je l'adapte à mon besoin.
    C'est une alternative au code donné dans la FAQ en fait.

    Naga

  5. #5
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 965
    Points
    6 965
    Par défaut
    Citation Envoyé par Naga2 Voir le message
    En gros, si j'ai bien compris, tu dessines des rectangles de couleurs sur les cases de ton tableau.
    Mais ce code suit-il si on fait défiler le tableau avec la scrollbar ?
    Non, il décrit de quelle façon une cellule doit être dessinée.
    Et comme cet évènement est appelé pour l'affichage de chaque cellule ...
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par Naga2 Voir le message
    ,
    Mais ce code suit-il si on fait défiler le tableau avec la scrollbar ?
    OUI
    C'est une alternative au code donné dans la FAQ en fait.
    alternative, le mot est mal choisi, je dirais une application
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    Oui lorsque tu fais défiler la grille, elle est redessinée.
    Uniquement les cellules concernées seront redessinées.

    Voici un autre exemple pour dessiner des lignes de couleurs:

    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
    procedure TForm1.FormCreate(Sender: TObject);
    Var
      c,r : integer;
    begin
      with StringGrid1 do
      Begin
        for r:=0 to rowcount-1 do
         for c:=0 to colcount-1 do Cells[c,r]:=IntToStr(c)+','+IntToStr(r);
      End;
    end;
     
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
    begin
      with StringGrid1,Canvas do
      Begin
        Rect.Left:=Rect.Left-4;
        Rect.right:=Rect.right+1;
        Pen.Color := clgray;
        Brush.Color := clyellow;
        if (ARow and 1)=1 then Brush.Color:=clwhite;
     
        fillrect(Rect);
        Font.Color := clBlack;
        TextOut(Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]);
      End;
    end;
    Nom : Image1.png
Affichages : 1038
Taille : 5,5 Ko

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Maintenance nucléaire
    Inscrit en
    Janvier 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Maintenance nucléaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 107
    Points : 36
    Points
    36
    Par défaut
    Salut à tous,

    Demain je me trouve quelques minutes pour tester ces exemples (au moins un).

    Même si je n'arrive pas à traiter mon problème qui est spécifique, ça me permettra de tester et comprendre des notions que je ne maîtrise pas du tout.

    Merci pour ces bouts de codes.

    Naga

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/07/2005, 10h45
  2. Réponses: 10
    Dernier message: 04/04/2005, 21h52
  3. Changer la couleur de fond d'un champ "text"
    Par nic211 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 15/02/2005, 13h50
  4. [POO] Changer la couleur de fond d'un tableau
    Par Netoman dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/12/2004, 20h12
  5. Changer la couleur de fond de l'écran
    Par tnk dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 19/01/2003, 01h37

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