Omschrijving
Deze thread laat zien hoe je een checkbox in een DBGrid plaatst. Er zijn al aardig wat threads geweest over dit onderwerp, maar ik kon geen thread vinden waar de complete code al netjes bij elkaar stond. In deze thread zal ik het traject even doorlopen en de code plaatsen.

Het begin
Om te beginnen plaatsen we de volgende componenten:
  • Database componenten
  • DBGrid
  • DBCheckBox


DBGrid en database componenten worden op de gebruikelijke manier gekoppeld. De DBCheckBox wordt gekoppeld aan het datafield welke een checkbox moet worden, Visible mag op False worden gezet.

De code
Hieronder staat de code die nodig is voor het weergeven van de checkbox.
Code:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
  IsChecked : array[Boolean] of Integer =
    (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
var
  DrawState: Integer;
  DrawRect: TRect;
begin
  if (gdFocused in State) then
  begin
    if (Column.Field.FieldName = DBCheck.DataField) then
    begin
     DbCheck.Color := clWhite;
     DBCheck.Height := Rect.Bottom - Rect.Top;
     DBCheck.Left := Rect.Left + DBGrid1.Left + 3;
     DBCheck.Top := Rect.Top + DBGrid1.top + 2;
     DBCheck.Visible := True;
    end
  end
  else
  begin
    if (Column.Field.FieldName = DBCheck.DataField) then
    begin
      DrawRect := Rect;
      InflateRect(DrawRect,-1,-1);

      DrawState := ISChecked[Column.Field.AsBoolean];

      DBGrid1.Canvas.FillRect(Rect);
      DrawFrameControl(DBGrid1.Canvas.Handle, DrawRect,
                       DFC_BUTTON, DrawState);
    end;
  end;
end;
Opmerkingen
Code:
  DBCheck.Left := Rect.Left + DBGrid1.Left + 3;
  DBCheck.Top := Rect.Top + DBGrid1.top + 2;
Deze kunnen uiteraard zelf worden gezet, op de waardes die je zelf wilt hebben.