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 :

sélectionner une cellule d'un TStringgrid


Sujet :

Composants VCL Delphi

  1. #1
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut sélectionner une cellule d'un TStringgrid
    Bonjour,

    J'ai un petit pb.
    Je cherche à savoir comment on peut faire pour changer la couleur d'une cellule d'un TStringgrid lorsque l'on clique dessus et par la même occasion de savoir les coordonnées de la cellule à laquelle on se trouve (n°ligne et n°colonne).

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    L'événement OnSelectCell te permet de récupérer les n° de ligne et de colonne de la cellule cliquée.

    Pour la colorier , jete un oeil dans la FAQ ou les tutos pour t'inspirer du code coloriant 1 ligne sur 2 dans 1 grid.
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    748
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 748
    Points : 500
    Points
    500
    Par défaut
    si c'est les coordonnées en fonction de ton clic de souris sur une cellule , regarde la methode MouseToCell.

    Et pour la colorier regarde l'evenement OndrawCell.

    bye.
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  4. #4
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut
    Je 'ai jamais travaillé avec les stringgrid.
    Serait-il possible d'avoir plus de détails sur OnDrawcell SVP

  5. #5
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    748
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 748
    Points : 500
    Points
    500
    Par défaut
    Un petit exemple de code qui passe en rouge la cellule sur la quelle tu clique .

    Utilise juste un Tstringrid et un label pour les coordonnées de ta cellule

    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
     
     
    ...
     
    {$R *.dfm}
    var CActiv:integer;
        LActiv:integer;
     
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
        with StringGrid1.Canvas do
        begin
            if (Acol<>0) and (Arow<>0) then
            if (Acol=CActiv) and (Arow=LActiv) then
            begin
                brush.Color:=clred;
                fillrect(Rect);
            end;
        end;
    end;
     
    procedure TForm1.StringGrid1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
        StringGrid1.MouseToCell(X,Y,CActiv,LActiv);
        label1.caption:=inttostr(CActiv)+','+inttostr(LActiv);
    end;
    bye et bon courage
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  6. #6
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut
    Merci.
    Mais j'aurai une autre question.
    Lorque je clique sur les cellules de la colonne 0 ca ne marche pas. Pourquoi ?

    Et une autre chose. Quand je clique sur cette cellule, elle se rempli bien en rouge mais on voit pas plus le texte.
    Comment faire pour que le texte reste visible.

    Merci d'avance

  7. #7
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut
    Un dernier point que j'ai oublié :

    en fait j'aimerai savoir comment on peut récupérer le texte de ma cellule par un appui sur bouton.

    Merci

  8. #8
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    748
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 748
    Points : 500
    Points
    500
    Par défaut
    Ceci dans l'evenement de ton bouton !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonTexteArecuperer:=stringGrid1.cells[colonne,ligne];
    Une petite remarque : Ces fonctions sont les fonctions de bases des TstringGrid, qui sont explicitent dans l'aide de delphi , jette tout de meme un coup d'oeil çà peut etre utile !

    Bon courage
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  9. #9
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut
    Je suis vraiment désolé mais comment fait on pour laisser le texte en premier plan ?
    parce que la c'est toute la cellule qui est rouge ?

  10. #10
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    748
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 748
    Points : 500
    Points
    500
    Par défaut
    je me doutais un peu que tu allai me le demander .

    Quand tu passes par des OndrawCells ou autres evenements qui modifie l'aspect de ton composant , tu passes par son "Canvas" donc je te conseille vivement d'aller voir l'aide pour cela et toutes les propriétes du canvas !! .
    Quand tu colorie ta cellule en rouge tu efface sont design par defaut , donc tu dois aussi reecrire le texte dans cette meme cellule apres la modif de la couleur de fond.

    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
     
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; 
      Rect: TRect; State: TGridDrawState); 
    begin 
        with StringGrid1.Canvas do 
        begin 
            if (Acol<>0) and (Arow<>0) then 
            if (Acol=CActiv) and (Arow=LActiv) then 
            begin 
                brush.Color:=clred; 
                fillrect(Rect); 
            end; 
     
           Brush.style:=bsclear; // ici on determine que le fond du texte est transparent
              font.style:=[Fsbold,Fsitalic]; 
              font.Color:=Clwhite; 
              position:=(StringGrid1.colwidths[Acol]- textwidth(StringGrid1.cells[Acol,Arow])) div 2;
              textout(Rect.left+Position,Rect.top+2,StringGrid1.cells[Acol,Arow]);
     
        end; 
    end
    Dans l'exemple que je te montre , le texte a une couleur de fond transparente et le texte est centré dans la cellule ( position ).

    bye.
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  11. #11
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Merci Petitcoucou31
    Ton message a été posté il y 5 ans et il m'est utile maintenant, en 2010.
    Merci.
    Merci de laisser toutes ces discutions sur le site!

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. Réponses: 5
    Dernier message: 21/03/2007, 11h26
  3. [TStringGrid] Comment sélectionner une cellule ?
    Par zidenne dans le forum Composants VCL
    Réponses: 1
    Dernier message: 18/11/2005, 10h45
  4. [JTable] Sélectionner une cellule
    Par GENERYS dans le forum Composants
    Réponses: 2
    Dernier message: 12/10/2005, 15h57
  5. Réponses: 4
    Dernier message: 01/10/2005, 11h03

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