Edite y muestre campos booleanos usando un CheckBox en DBGrid de Delphi

Consejo presentado por Rene van der Heijden

Una serie de artículos titulados Agregar componentes a un DBGrid discute la colocación de casi cualquier control Delphi (componente visual) en una celda de un DGBrid. La idea es crear interfaces de usuario visualmente más atractivas para editar campos dentro de un DBGrid: un ComboBox para listas desplegables; un DateTimePicker (calendario) para valores de fecha; una casilla de verificación para campos booleanos.

CheckBox para campos booleanos

CheckBox dentro de un DBGrid

Como notó Rene van der Heijden, la solución es bastante larga y no funciona, al menos no cuando se usa el mouse para hacer clic en las casillas de verificación.

Rene sugiere un enfoque más fácil que solo necesita dos manejadores pares: OnCellClick y OnCustomDrawCell para su control DBGrid:

 // evento OnCellClik de un DBGrid1 procedimiento TForm.DBGrid1CellClick(Columna: TColumn); empezar   Si (Column.Field.DataType = ftBoolean) luego   empezar     alternar verdadero y falso     Column.Grid.DataSource.DataSet.Edit; Column.Field.Value: = no Column.Field.AsBoolean;    publicación inmediata: comprueba por ti mismo si quieres esto     Column.Grid.DataSource.DataSet.Post;     puede agregar funcionalidad adicional aquí, para ser procesada después de que se realizó el cambio   final; final; // evento OnDrawColumnCell de un DBGrid1 procedimiento TForm.DBGrid1DrawColumnCell (Remitente: TObject;   const Rect: TRect; DataCol: entero; Columna: TColumn; Estado: TGridDrawState); const   CtrlState: formación[Booleano] de entero = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK o DFCS_CHECKED); empezar   Si (Column.Field.DataType = ftBoolean) luego   empezar     DBGrid1.Canvas.FillRect (Rect);     Si VarIsNull (Column.Field.Value) luego       DrawFrameControl (DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONCHECK o DFCS_INACTIVE) gris     más       DrawFrameControl (DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, CtrlState [Column.Field.AsBoolean]); marcado o sin marcar   final; final; 

Navegador de consejos de Delphi:
"Eliminar elementos duplicados en la lista TStringList de Delphi
"5 hechos que no sabía sobre Delphi y las clases y el VCL y la herencia y los controles personalizados y ...