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

Langage Delphi Discussion :

CheckBox dans un StringGrid


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 89
    Points : 64
    Points
    64
    Par défaut CheckBox dans un StringGrid
    Bonjour à tous,

    Je cherche à ajouter un composant TCheckBox au début de chaque ligne d'un TStringGrid. J'ai fait comme 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
     
    procedure chkOnClick(Sender : TObject);
    begin
      ShowMessage('Test');
    end;
     
    procedure createCheckBox(Sender : TObject);
      for i := 1 to StringGrid.Rowcount-1 do begin
        chk := TCheckBox.Create(StringGrid);
        chk.Parent := StringGrid;
        chk.Top := StringGrid.CellRect(0,i).Top + 2;
        chk.Width := StringGrid.ColWidths[0];
        chk.Caption := IntToStr(i);
        chk.OnClick := chkOnClick;
      end;
    Avec ceci, les checkbox se crééent sans problème mais sont inutilisables. Si j'en clic un, il ne se coche pas...

    Avez-vous une idée ? Est-ce qu'il faut utiliser l'évènement "OnDrawCell" du StringGrid pour redessiner le checkbox coché ?

    Merci pour votre aide...
    Delphi 7 Pro, Visual Basic, Borland C++, WinXP, Win7

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Tu as un exemple dans la avec un DbGrid, il ne sera pas difficile de l'adapter

    http://delphi.developpez.com/faq/?pa...eacocherdbgrid
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 89
    Points : 64
    Points
    64
    Par défaut
    Oui j'ai vu cet exemple mais je ne suis pas parvenu à l'adapter et cela me semblait compliqué...
    On ne peut pas faire plus simple ?
    Qu'est-ce qui empêche le redessin du CheckBox quand on clic dessus ?
    Delphi 7 Pro, Visual Basic, Borland C++, WinXP, Win7

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 519
    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 519
    Points : 25 037
    Points
    25 037
    Par défaut
    Citation Envoyé par chaours Voir le message
    Oui j'ai vu cet exemple mais je ne suis pas ?
    il suffit de mettre cela dans le OnDrawCell d'un TStringGrid, au lieu de DataCol et Column (en plus du curseur du DataSet), tu as Row et Col pour lire le contenu de Cells et enfin Rect qui fourni les dimensions du rectangle sur lequel faire un canvas ... en fin pour dessiner une checkbox, il suffit d'en poser une sur la fenêtre, de la cacher (la mettre sous la grille par exemple) et de faire un PaintTo

    Désolé, j'ai un vieux code pour une DGGrid mais cela s'adapte ...

    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 TFrmZoomRgp.GrilleActesDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    var
       X, Y: Integer;
    begin
         if Assigned(Column.Field) then begin
            if Column.FieldName = 'LSCA_FAC' then begin
               TDBGrid(Sender).Canvas.FillRect(Rect);
               CkbFacturableDraw.Checked := LongBool(Column.Field.AsInteger);
               X := Rect.Left + ((Rect.Right - Rect.Left - CkbFacturableDraw.Width) div 2);
               Y := Rect.Top + ((Rect.Bottom - Rect.Top - CkbFacturableDraw.Height) div 2);
               CkbFacturableDraw.PaintTo(TDBGrid(Sender).Canvas, X, Y);
            end;
         end;
    end;
    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

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    pourquoi s'amuser a creer un composant alors que windows peut le dessiner pour nous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if CHECKED then
        DrawFrameControl(StringGrid.Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONCHECK or DFCS_CHECKED)
      else
        DrawFrameControl(StringGrid.Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONCHECK)
    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 519
    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 519
    Points : 25 037
    Points
    25 037
    Par défaut
    Merci Anapurna, c'est bon à savoir, je n'ai jamais eu le courage de le chercher, ...
    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

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 89
    Points : 64
    Points
    64
    Par défaut
    Merci pour vos réponses...

    Pour "ShaiLeTroll", j'ai réussi à adapter le code mais quand je clic pour cocher ou décocher ça ne fait rien...

    Pour "Anapurna", le code est extrêment simple, par contre comment fais-tu pour pouvoir cocher ou pas le CheckBox ? Chez moi, ils sont toujours cochés...

    Y'a quelque chose qui m'échappe mais je ne sais pas où...

    Une idée ?
    Delphi 7 Pro, Visual Basic, Borland C++, WinXP, Win7

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 519
    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 519
    Points : 25 037
    Points
    25 037
    Par défaut
    Il faut évidemment, gérer le clic dans la cellule en modifiant la valeur manuellement (via Cells pour StringGrid, via DataSet pour DBGrid), ce n'est pas une checkbox qui est ajouté mais juste son image ... c'est une illusion ...

    idem pour l'affichage, il faut lire la valeur pour savoir si c'est coché ou non !

    tu pédales dans le fromage, Chaource ...



    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

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/06/2011, 12h28
  2. Réponses: 5
    Dernier message: 30/03/2007, 20h54
  3. [VB.NET] Insérer une colonne de CheckBox dans un DataGrid
    Par Manue.35 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/05/2003, 11h44
  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