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élection et désélection de lignes dans un stringgrid


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Par défaut Sélection et désélection de lignes dans un stringgrid
    Bonjour,

    Avec un bouton je souhaite sélectionner ou désélectionner toutes les ligne d'un stringgrid.

    Cela marche pour la sélection, mais pas pour la désélection.

    Voici mon code :

    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
     
     
    procedure TFlistfact.Button5Click(Sender: TObject);
     
    var
      i:integer;
     
     
    begin
     
    if button5.Caption='&Tout Sélectionner' then
    begin
     
    for i:=1 to stringgrid1.RowCount-1 do
    begin
    rowsselected.Add(i);
    stringgrid1.Invalidate;
    button5.Caption:='&Tout Désélectionner';
    end;
    end
    else
     
    begin
    for i:=1 to stringgrid1.RowCount-1 do
    begin
    rowsselected.Delete(i);
    stringgrid1.Invalidate;
     
    button5.Caption:='&Tout Sélectionner';
    end;
     
     
     
     
    end;
    Merci d'avance pour votre aide et bonnes fêtes.

  2. #2
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 522
    Par défaut
    Bonjour et bonnes fêtes à toi aussi,

    essaye ceci :

    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
    Procedure TForm1.Button5Click(Sender: TObject);
    var
      myRect : TGridRect ;
    begin
       if (button5.Caption='&Tout Sélectionner') then
          begin
               myRect.Left := 1 ;
               myRect.Top  := 1 ;
               myRect.Right := stringgrid1.ColCount ;
               myRect.Bottom := Stringgrid1.RowCount ;
               StringGrid1.Selection := myRect ;
               Button5.Caption:='&Tout Désélectionner';
          end
       else
          begin
               myRect.Left := -1 ;
               myRect.Top  := -1 ;
               myRect.Right := -1 ;
               myRect.Bottom := -1 ;
               StringGrid1.Selection := myRect ;
               Button5.Caption:='&Tout Sélectionner';
          end;
    End ;
    A+

    Charly

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Par défaut
    Bonjour,

    Merci pour ton code, cela marche mais le problème c'est que la sélection n'est pas maintenue si je click dans le stringgrid alors que je veux que ma déselection se fasse uniquement par mon bouton car j'ai un autre bouton qui doit déselectionner ligne par ligne.

    Merci d'avance.

  4. #4
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 522
    Par défaut
    tu peux mettre la propriété Enabled à False.

    Alors tu ne pourras plus éditer la grille, mais tu peux ajouter un bouton "Editer" qui bascule cette propriété à True ?

    A+

    Charly

  5. #5
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 522
    Par défaut
    Sinon, tu mets gère toi même un tableau de booleen ISElect pour indiquer la sélection ou non de la ligne i et tu dessines la grille avec DrawCell :

    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
    procedure TForm1.Button2Click(Sender: TObject);
    var
      i : Integer ;
    begin
       if (button2.Caption='&Tout Sélectionner') then
          begin
             For i := 1 To StringGrid1.RowCount-1 Do
                ISelect[i] := True ;
             StringGrid1.Invalidate ;
             Button2.Caption:='&Tout Désélectionner';
           end
       else
          begin
             For i := 1 To StringGrid1.RowCount-1 Do
                ISelect[i] := False ;
             StringGrid1.Invalidate ;
             Button2.Caption:='&Tout Sélectionner';
          end;
    End ;
     
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    Begin  
      With Sender As TStringGrid Do With Canvas Do
      Begin
        { sélection de la couleur de fond }
        If (ACol > 0 ) Then
        If ISelect[ARow] Then
           Begin
              Brush.Color := clBlue ;
              Font.Color := clWhite ;
           End
        Else
           Begin
              Brush.Color := clBtnFace ;
              Font.Color :=  ClBlack ;
           End ;   
        { Dessin du fond }
        FillRect(Rect);
        { Dessin du texte }
        TextOut(Rect.Left,Rect.Top,Cells[ACol,ARow]);
      End;
    end;
    Charly

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Par défaut
    Bonjour Charly,

    Merci pour ton code mais Iselect n'est pas déclaré. Je ne sais pas en quoi je dois le déclarer.

    Merci d'avance.

Discussions similaires

  1. [StringGrid] Sélection de toutes les lignes
    Par masterdash dans le forum Langage
    Réponses: 4
    Dernier message: 03/01/2013, 08h36
  2. [XL-2000] ListView Sélection/Déselection 1er ligne
    Par fidecourt dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/04/2009, 10h41
  3. Sélection de la Xième ligne à la Yième ligne
    Par Stéph59 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/07/2004, 17h18
  4. Déplacer la sélection d'une ligne dans un stringgrid
    Par jer64 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 14/03/2003, 00h57
  5. Multi lignes dans un StringGrids ?
    Par Xavier dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/11/2002, 23h15

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