Ответом на вашу непосредственную проблему является использование кода, подобного следующему:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Column.Field.DataType = ftBoolean then begin
dbGrid1.Canvas.FillRect(Rect);
if VarIsNull(Column.Field.Value) then
DrawFrameControl(dbGrid1.Canvas.Handle, Rect, DFC_BUTTON,
DFCS_BUTTONCHECK or DFCS_INACTIVE) { grayed }
else
DrawFrameControl(dbGrid1.Canvas.Handle, Rect, DFC_BUTTON,
CtrlState[Column.Field.AsBoolean]); { checked or unchecked }
end
else begin
DBGrid1.DefaultDrawDataCell(Rect, Column.Field, State);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DBGrid1.Options := DBGrid1.Options + [dgEditing];
DBGrid1.DefaultDrawing := False;
CDS1.CreateDataSet;
CDS1.InsertRecord([1, True]);
CDS1.InsertRecord([2, False]);
CDS1.First;
end;
(CDS1 - это TClientDataSet с полем ftAutoInc и ftBoolean)
Как вы увидитеустановка значения DefaultDrawing
сетки в значение False предотвращает отрисовку заголовка логического поля в DBGrid.
Не надейтесь, однако, слишком сильно, потому что если вы щелкнете по одному из флажков, вы сразу увидите проблему с этой ограниченной реализацией поддержки флажков: щелчок флажка активирует сетку на местередактор, который заменяет изображение флажка текстом редактирования для поля ftBoolean, а именно «True» или «False».Однако, ваш вопрос не спрашивал о редактировании, поэтому этот ответ должен остановиться здесь, я думаю.
Если вам нужна более полная поддержка флажков, просто установите флажок google
delphi dbgrid
и, в первом попадании,
CheckBox в DBGrid
второй ответ должен сказать вам немного больше,Кроме того, я думаю, вы обнаружите, что многие сторонние замены DBGrid включают поддержку флажков и т. Д.