Gracias por tu dedicacion eres un excelente forista n-mil gracias pero mira el codigo que use:
uso esto para dibujarlo:
Código Delphi
[-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
Check: Integer;
begin
if not IBTable1.IsEmpty then
begin
if CompareText(Column.FieldName, 'cod_per') = 0 then
begin
Check := 0;
if IBTable1['cod_per'] = '1' then
Check := DFCS_CHECKED;
dbGrid1.Canvas.FillRect(Rect);
DrawFrameControl(dbGrid1.Canvas.Handle, Rect,
DFC_BUTTON, DFCS_BUTTONCHECK or Check);
end
else
dbgrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
if CompareText(Column.FieldName, 'user_name') = 0 then
begin
Check := 0;
if IBTable1['user_name'] = '1' then
Check := DFCS_CHECKED;
dbGrid1.Canvas.FillRect(Rect);
DrawFrameControl(dbGrid1.Canvas.Handle, Rect,
DFC_BUTTON, DFCS_BUTTONCHECK or Check);
end
else
dbgrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
if CompareText(Column.FieldName, 'prodcre') = 0 then
begin
Check := 0;
if IBTable1['prodcre'] = '1' then
Check := DFCS_CHECKED;
dbGrid1.Canvas.FillRect(Rect);
DrawFrameControl(dbGrid1.Canvas.Handle, Rect,
DFC_BUTTON, DFCS_BUTTONCHECK or Check);
end
else
dbgrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;
y esto para cambiarlo cuando se haga un click en el campo deseado:
Código Delphi
[-]
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if Column.FieldName = 'PRODCRE' then
begin
IBTable1.Edit;
if IBTable1.FindField('PRODCRE').AsInteger = 1 then
IBTable1.FindField('PRODCRE').AsInteger := 0
else
IBTable1.FindField('PRODCRE').AsInteger := 1;
IBTable1.Post;
Dbgrid1.Repaint; end;
end;
Y pues le agregaria un boton que hiciera un commit.
Si te das cuenta es una combinacion de algunas de las respuestas publicadas en este foro
Entonces cuando alguien necesite un checkbox dentro de un dbgrid y el campo no sea booleano ya lo puede hacer asi. probado comprobado y recontraprobado