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.
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 ...