I resolved my issue with a lot of trial and error. First, in the DBGrid components I set dgEditing to false as it was unnecessary (my grid is readonly). This prevents the user from getting the cell into the focused mode. Second, I set DefaultDrawing to False. I updated my DBGridDrawColumnCell procedure as follows:
procedure TDatamodule1.DBGridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
sText : String;
begin
if gdselected in state then { set proper colors if cell is selected }
Begin
(Sender as TDBGrid).Canvas.Font.Color :=
TStyleManager.ActiveStyle.GetSystemColor(clwindowtext);
(Sender as TDBGrid).Canvas.Brush.Color :=
TStyleManager.ActiveStyle.GetSystemColor(clhighlight);
End;
if (UpperCase(Column.Field.FieldName) = 'APPROVED') or
(UpperCase(Column.Field.FieldName) = 'OBSOLETE')) then
begin
if Column.Field.Value = True then
sText := 'Yes'
Else
If Column.Field.Value = False Then
sText := 'No'
Else
sText := '';
(Sender as TDBGrid).Canvas.FillRect(Rect);
(Sender as TDBGrid).Canvas.TextRect(Rect, Rect.Left+3, Rect.Top+2, sText);
end
Else
Begin { I added this to draw all other columns as defaultdrawing is off }
(Sender as TDBGrid).defaultdrawcolumncell(Rect, DataCol, Column, State);
End;
end;