Esto debería ayudarte. No lo revise mucho asi que puede ser que tengas que hacerle unos retoquesitos. Espero te sirva
Para los checkbox necesitas dos bmp con los dos cheqbox
//-----------------Para pintar filas
procedure TFClienteCuenta.GrillaDrawColumnCell(Sender: TObject;const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin //Cambia el color de los campos negativos
with sender as tdbgrid do
begin
if Column.Field.DataSet.FieldByName('Estado').AsString = 'P' then
if (gdSelected in State) then
Grilla.DefaultDrawColumnCell(Rect, DataCol, Column, State)
else
begin
Grilla.Canvas.FillRect(Rect);
Grilla.Canvas.Brush.Color := $00F4F4F4;
end;
defaultdrawcolumncell(rect,datacol,column,state);
end;
end;
//------------------------------------Para el chekbox
procedure ChkDBGridDrawColumnCell(DBGrid: TDBGrid;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
X, Y, Index: integer;
Field: TField;
begin
Field := Column.Field;
if (Field <> nil) and (Field.FieldName = 'A') then
begin
DBGrid.Canvas.FillRect(Rect); // Llena celda con color de fondo
case Column.Alignment of //Determina posición del gráfico dentro de la celda
taRightJustify:
X := Rect.Right - 2 - 16;
taCenter:
X := (Rect.Right - Rect.Left - 16) div 2 + Rect.Left;
else // taLeftJustify:
X := Rect.Left + 2;
end;
Y := (Rect.Bottom - Rect.Top - 16) div 2 + Rect.Top;
if Field.AsInteger = 1 then Index := 1 else Index := 0; // Determina gráfico a dibujar
// Lo dibuja
FCargaAgrupar.ImageList2.Draw(DBGrid.Canvas, X, Y, Index);
end else // Dibujo predeterminado
DBGrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
procedure TFCargaAgrupar.GrillaDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
ChkDBGridDrawColumnCell(Sender as TDBGrid, Rect,DataCol, Column, State);
end;
procedure ChkDBGridColEnter(DBGrid: TDBGrid);
var
Field: TField;
begin
Field := DBGrid.SelectedField;
if (Field <> nil) and (Field.FieldName = 'A') then //Nombre de la columna
DBGrid.Options := DBGrid.Options - [dgEditing];
end;
procedure ChkDBGridColExit(DBGrid: TDBGrid);
var
Field: TField;
begin
Field := DBGrid.SelectedField;
if (Field <> nil) and (Field.FieldName = 'A') then
DBGrid.Options := DBGrid.Options + [dgEditing];
end;
procedure TFCargaAgrupar.GrillaColEnter(Sender: TObject);
begin
ChkDBGridColEnter(Sender as TDBGrid);
end;
procedure TFCargaAgrupar.GrillaColExit(Sender: TObject);
begin
ChkDBGridColExit(Sender as TDBGrid);
end;
procedure ChkDBGridCellClick(Column: TColumn);
var
Field: TField;
begin
Field := Column.Field;
if (Field <> nil) and (Field.FieldName = 'A')//ftInteger)
and Field.CanModify and not Column.ReadOnly then
with Field.Dataset do begin
if State = dsBrowse then
Edit;
if Field.AsBoolean = true then
Field.AsBoolean := false
else
Field.AsBoolean := true;
end;
end;
procedure ChkDBGridKeyPress(DBGrid: TDBGrid; var Key: Char);
var
Field: TField;
begin
Field := DBGrid.SelectedField;
if (Field <> nil) and (Field.FieldName = 'A') then
if (Key = ' ') and Field.CanModify and
not DBGrid.Columns[DBGrid.SelectedIndex].ReadOnly then
with Field.Dataset do begin
if State = dsBrowse then
Edit;
if Field.AsBoolean = true then
Field.AsInteger:= false
else
Field.AsInteger:= true;
end;
end;
procedure TFCargaAgrupar.GrillaCellClick(Column: TColumn);
begin
ChkDBGridCellClick(Column);
end;
procedure TFCargaAgrupar.GrillaKeyPress(Sender: TObject; var Key: Char);
begin
ChkDBGridKeyPress(Sender as TDBGrid, Key);
end;