DBGrid - checkbox dentro da grid

Top  Previous  Next

Primeiro declare a função DesenhaCheckBox (se você usa Gestor, ela já existe no FuncoesGestorUnit)

procedure DesenhaCheck(Grid: TDBGrid; const Column: TColumn; const Rect: TRect; const State: TGridDrawState; const Campo: TField; CorFundo: TColor = 0);

var

  PosX: Integer;

  Cor : TColor;

begin

  if Column.Field = Campo then

  begin

    PosX := Rect.Left + (Column.Width div 2) - (TImage.Picture.Bitmap.Width div 2);  // imagem do CHECKED

    if (gdSelected in State) then Cor := clHighlight else Cor := clWindow;

    if CorFundo <> 0 then Cor := CorFundo;

    Grid.Canvas.FillRect(Rect);

    if Campo.asString = 'S' then

      mGraf.DrawTransparent(PosX, Rect.Top + 1TImage.Picture.Bitmap, Grid.Canvas, Cor)  // imagem do CHECKED

    else

      mGraf.DrawTransparent(PosX, Rect.Top + 1TImage.Picture.Bitmap, Grid.Canvas, Cor);  // imagem do UNCHECKED

  end;

end;

 

No Evento Grid.OnCellClick

 

procedure TForm1.DBGrid1CellClick(Column: TColumn);

begin

  if DBGrid.SelectedField = TbCampoCheckBox then

  begin

    Tb.Edit;

 

    if TbCampoCheckBox.AsString = 'S' then

      TbCampoCheckBox.AsString := 'N'

    else

      TbCampoCheckBox.AsString := 'S';

 

    Tb.Post;

  end;

end;

 

Evento Grid.OnDrawColumnCell

 

procedure TForm1.MinhaGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin

  DesenhaCheck(MinhaGrid, Column, Rect, State, TbCampoCheckBox);

end;