NEO ::: TEAM
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

NEO ::: TEAM

New Evolution Owner
 
AccueilRechercherDernières imagesS'enregistrerConnexion
Le Deal du moment : -50%
Ampli Home Cinema Denon AVR-X1700H à 399€
Voir le deal
399 €

 

 mettre une case à cocher dans une DBGrid

Aller en bas 
AuteurMessage
Admin
Fondateur
Fondateur
Admin


Nombre de messages : 197
Age : 40
Localisation : Tlemcen ( Algérie )
Date d'inscription : 04/12/2006

mettre une case à cocher dans une DBGrid Empty
MessageSujet: mettre une case à cocher dans une DBGrid   mettre une case à cocher dans une DBGrid Icon_minitimeMer 14 Fév - 2:50

a case à cocher n'est pas prévue en standard dans la BDGrid, il faut donc la dessiner 'à la main'. Le moyen le plus simple est d'utiliser 2 images, une pour l'état 'coché' et une pour l'état 'décoché'.

Les images sont stockées dans une liste d'images 'imgCheck' se trouvant dans un DataModule (DmImages). Dans cette liste d'images, on fixe arbitrairement l'image 0 comme étant l'image 'décoché' et 1 comme étant l'image 'coché'.


L'événement à intercepter pour dessiner la case à cocher est DrawColumnCell.

Code:
procedure TForm1.dbGrid1DrawColumnCell(
  Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if (column est une colonne 'case à cocher') then
  begin
    { on efface la cellule }
    dbGrid1.Canvas.FillRect(Rect);
    { si coché  }
    if (column.Field a la valeur coché) then
    begin
      DmImages.imgCheck.draw(dbGrid1.Canvas,
        rect.Left + ((rect.Right - rect.Left - DmImages.imgCheck.Width) div 2),
        rect.Top,
        1);
    end                         
    { sinon, pas coché  }
    else
    begin
      DmImages.imgCheck.draw(dbGrid1.Canvas,
        rect.Left + ((rect.Right - rect.Left - DmImages.imgCheck.Width) div 2),
        rect.Top,
        0);
    end
  end
  { si column ne correspond pas à une case à cocher, }
  { on ne s'occupe pas du dessin de la cellule, on }
  { transmet donc à DefaultDrawColumnCell }
  else
  begin
    dbGrid1.DefaultDrawColumnCell(rect,datacol,column,state);
  end;
end;

Remarques :
- le test if (column est une colonne 'case à cocher') est très variable : pour déterminer si la zone est une case à cocher, on peut se baser sur le type de la zone (if (Column.Field.DataType = ftBoolean) then...) ou bien sur son nom (if sameText(Column.FieldName,'nomZone') then...)
- Le code ci-dessus peut servir à afficher autre chose qu'une case à cocher. Par exemple si une zone peut prendre 4 valeurs entières de 0 à 3, on peut avoir les 4 images équivalentes dans une liste d'images et l'utiliser ainsi :


Code:
dbGrid1.Canvas.FillRect(Rect);
listeImages.draw(dbGrid1.Canvas,
  rect.Left + ((rect.Right - rect.Left - listeImages.Width) div 2),
  rect.Top,
  column.Field.AsInteger);

Le code donné ci-dessus permet d'afficher la case à cocher, mais ne gère pas le cochage/décochage. Pour cocher ou décocher (i.e. pour changer l'image), il suffit de changer la valeur du champ. L'affichage sera mis à jour automatiquement. Par exemple, comment cocher ou décocher sur un double-click dans la grille :

Code:
procedure TForm1.dbGrid1DblClick(Sender: TObject);
begin
  with dbGrid1 do
  begin
    { La grille doit être modifiable... }
    if (not ReadOnly)
    { ainsi que le dataset }
    and DataSource.DataSet.CanModify
    { Et la zone sur laquelle on a cliqué doit }
    { être une case à cocher }
    and ((SelectedField.FieldName = 'UNE ZONE A COCHER')
      or (test sur un autre nom de zone)
      or ...) then
    begin
      DataSource.DataSet.Edit;
      SelectedField.AsBoolean := not SelectedField.AsBoolean;
      DataSource.DataSet.Post;
    end;
  end;
end;
.
Revenir en haut Aller en bas
https://neo-team.forumactif.com
 
mettre une case à cocher dans une DBGrid
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Masquer l'ascenseur vertical/Horizontal dans un DBGrid
» dessiner des lignes de couleurs sur un DBGrid

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
NEO ::: TEAM :: Informatique :: Base de données & Logiciels de Gestions-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser