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