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

Delphi Discussion :

TStringGrid Multi selection


Sujet :

Delphi

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 574
    Points : 258
    Points
    258
    Par défaut TStringGrid Multi selection
    Bonjour,

    Je réalise une application contenant un TStringGrid.
    En fouillant dans le web, je n'ai malheureusement pas trouvé de propriété Multi select.

    Du coup, ce que j'ai fait, c'est que j'ai créé un trabeau de boolean qui indique si la ligne doit etre soulignée ou non.

    Par contre c'est là où je bloque.

    J'ai testé avec le StringGrid1DrawCell, mais je n'arrive pas à ce que je veux.

    Avec le code ci-dessous, j'ai tout mon stringgrid de couleur grise


    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 TFrmAffectationBoites.StringGrid1DrawCell(Sender: TObject; ACol,
      ARow: Integer; Rect: TRect; State: TGridDrawState);
    var st:String;
          dx,dy:Integer;
          i:Integer;
    begin
     
      with StringGrid1.Canvas do // Avec le canevas de ton stringgrid
     
      begin
        for i:= 0 to Length(bCellule)-1 do
        begin
          if bCellule[i]=true then
          begin
            Font.Color:=clwhite;
            Brush.Color:=clInfoBK;
          end
          else
          begin
            Font.Color:=clNavy;
            Brush.Color:=clSilver;
          end;
               FillRect(Rect);
         TextOut(Rect.Left+Dx,Rect.Top+Dy,St);
        end;

    Quelq'un aurait-il la solution à mon probleme

    Merci d'avance pour votre aide

    Cdlt,

    Marsup

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 574
    Points : 258
    Points
    258
    Par défaut
    Je viens de tester ce code là

    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
     
     
    with StringGrid1.Canvas do // Avec le canevas de ton stringgrid
     
      begin
         st:=StringGrid1.Cells[Acol,ARow];
         dx:=(Rect.Right-(Rect.Left+TextExtent(St).Cx)) Div 2;       // Centrer Horizontalement le texte ds Rect
         dy:=(Rect.Bottom-(Rect.Top+TextExtent(St).Cy)) Div 2;   // Centrer Verticalement le texte ds Rect
         If ACol>0 then //  Les colonnes autres que la 1ere seront de couleur jaune et les textes Blues
         begin
            if ARow>0 then
            begin
               if bcellule[ARow]=true then
                 begin
                   Font.Color:=clWhite;  //Couleur du texte Bleue
                   Brush.Color:=clNavy;  //Couleur de fond Jaune
                 end
               else
               begin
                   Font.Color:=clBlack;  //Couleur du texte Bleue
                   Brush.Color:=clWhite;  //Couleur de fond Jaune
               end;
            end;
     
         end;
     
     
     
         FillRect(Rect);
         TextOut(Rect.Left+Dx,Rect.Top+Dy,St);
    Le probleme c'est ca fonctionne pour la cellule cliquée et non sur la ligne entière :-(

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    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 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Déjà peut-être commencé par ajouter goRowSelect aux options

    Ensuite Selection est TGridRect et ne peut que gérer une sélection continue

    Je te recommande un ajout de TCheckBox dessiné manuellement pour gérer une sélection discontinue


    Si je retrouve ça, j'ai fait les deux méthodes de sélection sur un TStringGrid VCL, en Selection sous D3 et en TCheckBox en XE2

    Voir : https://www.developpez.net/forums/d1...d/#post6026128
    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

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 041
    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 041
    Points : 40 950
    Points
    40 950
    Billets dans le blog
    62
    Par défaut
    Il n'est pas indiqué s'il s'agit de VCL ou FMX ?
    Pour mes besoins, je l'ai fait en FMX
    https://www.developpez.net/forums/bl...presse-papier/
    il y a aussi quelques discussions dans le forum
    https://www.developpez.net/forums/d2...mx-selections/
    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

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 691
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    Citation Envoyé par marsupilami34 Voir le message
    Le problème c'est ca fonctionne pour la cellule cliquée et non sur la ligne entière :-(
    Il manque un StringGrid1.Invalidate après le clic.

    Et pas besoin de calcul pour l'alignement du texte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var s := StringGrid1.Cells[aCol,aRow];
    StringGrid1.Canvas.TextRect(Rect, s, [tfSingleLine, tfCenter, tfVerticalCenter]);

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 574
    Points : 258
    Points
    258
    Par défaut
    Bonjour et merci à tous.

    J'arrive à mes fins effectivement en passant par le invalidate

    Cdlt,

    Marsup

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

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. [Delphi7] Multi-sélection dans une TStringGrid
    Par dino_xrc dans le forum Delphi
    Réponses: 1
    Dernier message: 30/08/2006, 10h42
  3. Recupération des selections sur une DBGrille multi Selection
    Par Andry dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/11/2004, 11h43
  4. Problème de requete multis-selections
    Par tripper.dim dans le forum SQL
    Réponses: 9
    Dernier message: 03/09/2003, 13h08
  5. Désactiver la multi-sélection d'une grille
    Par Riko dans le forum Composants VCL
    Réponses: 6
    Dernier message: 17/06/2003, 09h47

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