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 :

Comment modifier l'apparence de la cellule sélectionnée d'un TStringGrid ?


Sujet :

Composants VCL Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2005
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Comment modifier l'apparence de la cellule sélectionnée d'un TStringGrid ?
    La cellule selectionée d'un StringGridest est normalement bleue, j'ai réussi à enlever cette couleur et avoir un rectangle noir comme contour de la cellule selectionnée.
    Seulement je voudrai pouvoir agir sur l'épaisseur de la ligne du rectange selectionné, pour avoir une ligne plus épaisse, je donne ici le code qui a permis d'enlever la couleur bleue et d'avoir un rectangle noir .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
     
        if gdFocused in State   then
      begin
        stringgrid1.Canvas.DrawFocusRect(Rect);
        StringGrid1.Canvas.Font.Color :=ClWhite;
        StringGrid1.Canvas.Brush.Color := clBlack;
      end ;
     
    end;

  2. #2
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    fastoche!
    J'ai fait ça dans une appli. Je te livre le code brut de décoffrage
    ma stringgrid s'appelle visu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            visu.Canvas.Pen.Width:=2;
            visu.Canvas.pen.color:=clred;visu.Canvas.polyline
          ([point(visu.CellRect(acol,arow).Left,visu.CellRect(acol,arow).top),
            point(visu.CellRect(acol,arow).right-1,visu.CellRect(acol,arow).top),
            point(visu.CellRect(acol,arow).right-1,visu.CellRect(acol,arow).Bottom-1),
            point(visu.CellRect(acol,arow).Left,visu.CellRect(acol,arow).Bottom-1),
            point(visu.CellRect(acol,arow).Left,visu.CellRect(acol,arow).top)])
    A la lecture de ton code, je pense que je pouvais faire + simple, en évitant les cellrect(acol,arow)...
    A toi de jouer
    Choisir, c'est renoncer...

  3. #3
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    Citation Envoyé par OutOfRange
    fastoche!
    J'ai fait ça dans une appli. Je te livre le code brut de décoffrage
    ma stringgrid s'appelle visu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            visu.Canvas.Pen.Width:=2;
            visu.Canvas.pen.color:=clred;visu.Canvas.polyline
          ([point(visu.CellRect(acol,arow).Left,visu.CellRect(acol,arow).top),
            point(visu.CellRect(acol,arow).right-1,visu.CellRect(acol,arow).top),
            point(visu.CellRect(acol,arow).right-1,visu.CellRect(acol,arow).Bottom-1),
            point(visu.CellRect(acol,arow).Left,visu.CellRect(acol,arow).Bottom-1),
            point(visu.CellRect(acol,arow).Left,visu.CellRect(acol,arow).top)])
    A la lecture de ton code, je pense que je pouvais faire + simple, en évitant les cellrect(acol,arow)...
    A toi de jouer

    qu'est ce que se charabia il y a plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          grid1.Canvas.Rectangle(rect.Left+1,rect.Top,rect.Right,rect.Bottom    );
    bien sur dans ondrawcell avec defaultdrawin a false
    voila un petit example
    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.Grid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var  c:TColor;
    begin
          if arow=0 then exit;
          grid1.Canvas.Pen.Style:=psSolid ;
          grid1.Canvas.Pen.Width:=1; // amodifier selon vos besoin mais tu doit aussi faire des modification dans textoupour que le text ne soit pas ecrasé par les ligne  :lol: 
          if gdSelected in state then c:=$FF0000
          else
             if (arow and 1)>0 then c:=$F0F0F0
             else c:=$CFFFFF;
          grid1.Canvas.Brush.Color:=c;
          grid1.Canvas.Pen.Color:=$F0F0F0;
          grid1.Canvas.Rectangle(rect.Left+1,rect.Top,rect.Right,rect.Bottom    );
          grid1.Canvas.TextOut (rect.Left+2 ,rect.Top+2 ,grid1.Cells[acol,arow]);
    end;
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  4. #4
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    qu'est ce que se charabia il y a plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          grid1.Canvas.Rectangle(rect.Left+1,rect.Top,rect.Right,rect.Bottom    );
    bien sur dans ondrawcell avec defaultdrawin a false
    OK c'est + simple, sauf que la méthode rectangle rempli une zone pleine du canvas...
    Or, sadry voudrait
    Seulement je voudrai pouvoir agir sur l'épaisseur de la ligne du rectange selectionné, pour avoir une ligne plus épaisse,
    donc tracer un cadre = méthode polyline

    Faut pas foncer tête baissée comme ça
    Choisir, c'est renoncer...

  5. #5
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var
         Tac:array[0..3] of integer absolute rect;
    begin
          grid1.Canvas.Pen.Width:=2;
          grid1.Canvas.Polyline([rect.TopLeft,
                                 point(rect.Right,rect.Top),
                                 rect.BottomRight,
                                 point(rect.Left,rect.Bottom)]);
    //ou
         grid1.Canvas.Polyline([rect.TopLeft,
                                 point(tac[2],tac[1]),
                                 rect.BottomRight,
                                 point(tac[0],tac[3])]);
    end;
    bien sur pour rectangle en peut modifier la couleur de fond
    ah autre chose pour defaultdrawin on peut la laissé a true car pint de stringgrid s'occupe trés bien de dessin des entets

    NB: j'ai utlisé par erreur Polygon au lieu de regtangle est j'ai trouvé que le dessin des cellul avec leur contour est plus mieu mais seulement avec pen.widh<2
    bon dev
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

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

Discussions similaires

  1. Comment modifier la couleur d'une cellule d'un TStringgrid
    Par francois.delpierre dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/11/2007, 12h38
  2. [D7] Comment modifier l'apparence du TMainMenu ?
    Par Moine dans le forum Débuter
    Réponses: 3
    Dernier message: 29/10/2007, 14h12
  3. [Word97 / Delphi6] Comment modifier la couleur d'une cellule ?
    Par Lolo1988 dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 29/10/2007, 10h48
  4. Comment modifier l'apparence d'un Form ?
    Par [Silk] dans le forum Composants VCL
    Réponses: 3
    Dernier message: 26/07/2005, 13h44
  5. [C#] Comment modifier l'apparence d'un DataGrid?
    Par DBBB dans le forum ASP.NET
    Réponses: 8
    Dernier message: 15/07/2005, 14h41

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