procedure
TForm2
.
DBGrid1ColExit(Sender: TObject);
begin
if
DBGrid1
.
SelectedField
.
FieldName = DBCheckBox1
.
DataField
then
DBCheckBox1
.
Visible :=
False
end
;
procedure
TForm2
.
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 = DBCheckBox1
.
DataField)
then
begin
DBCheckBox1
.
Left := Rect
.
Left + DBGrid1
.
Left +
2
;
DBCheckBox1
.
Top := Rect
.
Top + DBGrid1
.
top +
2
;
DBCheckBox1
.
Width := Rect
.
Right - Rect
.
Left;
DBCheckBox1
.
Height := Rect
.
Bottom - Rect
.
Top;
DBCheckBox1
.
Visible :=
True
;
end
end
else
begin
if
(Column
.
Field
.
FieldName = DBCheckBox1
.
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
;
procedure
TForm2
.
DBGrid1KeyPress(Sender: TObject;
var
Key:
Char
);
begin
if
(key = Chr(
9
))
then
Exit;
if
(DBGrid1
.
SelectedField
.
FieldName = DBCheckBox1
.
DataField)
then
begin
DBCheckBox1
.
SetFocus;
SendMessage(DBCheckBox1
.
Handle, WM_Char,
word
(Key),
0
);
end
;
end
;