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 :

Couleur gradient dans un StringGrid


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 41
    Par défaut Couleur gradient dans un StringGrid
    Bonjour,

    Apres plusieurs recherches, pour afficher une couleur gradient, j'ai reussi à adapter ce code trouvé sur les forums. Sauf que je ne le comprends pas.
    StringGrid avec pour seule Option : RowSelect

    Dans Form1.GridDrawCell
    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 TFormMenu.GridDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
                  ........
                  {Tracer un rectangle dans la cellule}
                  Rect:=CellRect(ACol,ARow); // Enlever les marges pour remplir entierement la cellule
                  FillRect(Rect); // Remplir la zone rectangulaire avec le pinceau en cours
                  if (gdSelected in State) then 
                    begin
                        DrawingStyle:=gdsGradient;
                        Brush.Style:=bsClear; // Rect est transparent
     
                        GradientFillCanvas(Canvas, GetShadowColor(clHighlight, 45), GetShadowColor(clHighlight, 10), Rect, gdVertical);
     
                        StyleServices.GetElementColor(StyleServices.GetElementDetails(tgCellSelected), ecGradientColor1, StartColor);
                        StyleServices.GetElementColor(StyleServices.GetElementDetails(tgCellSelected), ecGradientColor2, EndColor);
    Si je ne mets pas cette ligne, rien ne s'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GradientFillCanvas(Canvas, GetShadowColor(clHighlight, 45), GetShadowColor(clHighlight, 10), Rect, gdVertical);
    Alors quel est l'interet de ce code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                        StyleServices.GetElementColor(StyleServices.GetElementDetails(tgCellSelected), ecGradientColor1, StartColor);
                        StyleServices.GetElementColor(StyleServices.GetElementDetails(tgCellSelected), ecGradientColor2, EndColor);
    Merci

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 708
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Tout dépend de votre version de Delphi ?
    StyleServices fait référence à un gestionnaire de style reste à savoir s'il s'agit d'un interne Delphi (à partir de XE3 je crois) ou d'un composant tiers

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 41
    Par défaut
    Bonjour SergioMaster,

    Tout dépend de votre version de Delphi ?
    XE3

    StyleServices fait référence à un gestionnaire de style reste à savoir s'il s'agit d'un interne Delphi (à partir de XE3 je crois) ou d'un composant tiers
    Je n'utilise jamais de composant tiers seulement ce que Delphi me donne.

    Je viens de relire mon post precedent et je n'ai pas été assez clair. J'ai bien compris ces 2 lignes avec l'aide de Delphi.
    Sauf que si j'ai bien compris, on a pas besoin d'utiliser GradientFillCanvas et qu'il suffit de donner une couleur aux 2 variabales : StartColor et EndColor
    Ce qui donnerait :
    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
    procedure TFormMenu.GridDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
                  ........
                  {Tracer un rectangle dans la cellule}
                  Rect:=CellRect(ACol,ARow); // Enlever les marges pour remplir entierement la cellule
                  FillRect(Rect); // Remplir la zone rectangulaire avec le pinceau en cours
                  if (gdSelected in State) then 
                    begin
                        DrawingStyle:=gdsGradient;
                        Brush.Style:=bsClear; // Rect est transparent
     
                        StartColor:=GetShadowColor(clHighlight, 45);
                        EndColor:=GetShadowColor(clHighlight, 10);
                        StyleServices.GetElementColor(StyleServices.GetElementDetails(tgCellSelected), ecGradientColor1, StartColor);
                        StyleServices.GetElementColor(StyleServices.GetElementDetails(tgCellSelected), ecGradientColor2, EndColor);
     
                       {DrawText affiche le texte}
                       DrawText(Handle,PChar(Cells[ACol,ARow]),-1,Rect,DT_VCENTER or DT_CENTER or DT_SINGLELINE); // Alignement vertical ou horizontal
    Et là, ce ne marche plus.

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 708
    Billets dans le blog
    65
    Par défaut
    re,

    StyleServices.GetElementColor ne permet que d'obtenir une valeur du style pas de la changer
    pour changer une valeur dès qu'un style est appliqué voir cet article

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 41
    Par défaut
    Ca a l'air plus compliqué que je ne pensais.
    Je vais essayer de comprendre.

    Merci

Discussions similaires

  1. Couleur des cellules dans une StringGrid
    Par dekalima dans le forum C++Builder
    Réponses: 4
    Dernier message: 03/09/2010, 15h58
  2. Changer la couleur dans un StringGrid
    Par fermat dans le forum Débuter
    Réponses: 1
    Dernier message: 13/09/2008, 18h23
  3. Texte en couleur dans une StringGrid
    Par michel71 dans le forum Langage
    Réponses: 1
    Dernier message: 20/08/2008, 19h09
  4. couleur du texte dans un StringGrid
    Par ludojojo dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/06/2008, 10h33
  5. La Couleur dans une StringGrid
    Par fermat dans le forum Delphi
    Réponses: 2
    Dernier message: 21/01/2007, 15h38

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