Modifier et afficher les champs booléens à l'aide d'un CheckBox dans DBGrid de Delphi

Astuce soumise par René van der Heijden

Une série d'articles intitulée Ajouter des composants à un DBGrid explique comment placer à peu près n'importe quel contrôle Delphi (composant visuel) dans une cellule d'un DGBrid. L'idée est de créer des interfaces utilisateur visuellement plus attrayantes pour éditer des champs à l'intérieur d'un DBGrid: un ComboBox pour des listes déroulantes; un DateTimePicker (calendrier) pour les valeurs de date; une case à cocher pour les champs booléens.

CheckBox pour les champs booléens

CheckBox dans un DBGrid

Comme l'a remarqué René van der Heijden, la solution est assez longue et ne fonctionne pas, du moins pas lorsque vous utilisez la souris pour cliquer sur les cases à cocher.

René suggère une approche plus simple qui ne nécessite que deux gestionnaires pairs: OnCellClick et OnCustomDrawCell pour votre contrôle DBGrid:

 // Événement OnCellClik d'un DBGrid1 procédure TForm.DBGrid1CellClick(Colonne: TColonne); commencer   si (Column.Field.DataType = ftBoolean) ensuite   commencer     bascule Vrai et Faux     Column.Grid.DataSource.DataSet.Edit; Column.Field.Value: = ne pas Column.Field.AsBoolean;    publication immédiate - voyez par vous-même si vous le souhaitez     Column.Grid.DataSource.DataSet.Post;     vous pouvez ajouter des fonctionnalités supplémentaires ici, à traiter après la modification   fin; fin; // Événement OnDrawColumnCell d'un DBGrid1 procédure TForm.DBGrid1DrawColumnCell (expéditeur: TObject;   const Rect: TRect; DataCol: Entier; Colonne: TColonne; État: TGridDrawState); const   CtrlState: tableau[Booléen] de entier = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK ou DFCS_CHECKED); commencer   si (Column.Field.DataType = ftBoolean) ensuite   commencer     DBGrid1.Canvas.FillRect (Rect);     si VarIsNull (Column.Field.Value) ensuite       DrawFrameControl (DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONCHECK ou DFCS_INACTIVE) grisé     autre       DrawFrameControl (DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, CtrlState [Column.Field.AsBoolean]); cochée ou décochée   fin; fin; 

Navigateur de conseils Delphi:
"Supprimer les éléments en double dans la liste TStringList de Delphi
"5 faits que vous ne saviez pas sur Delphi et les classes et la VCL et l'héritage et les contrôles personnalisés et…