Displaying the selected row of a DBGrid in a different color

Question:

How can I show selected row in a dbgrid in a different color without using dgRowSelect (because I need to edit the data)?

Answer:

If you want to color the selected row in a DBGrid but you don't want to use the dgRowSelect option because you want to be able to edit the data you can use the following technique on the DBGrid.OnDrawColumnCell event:

type

  TCustomDBGridCracker = class(TCustomDBGrid);

 

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;

  const Rect: TRect; DataCol: Integer; Column: TColumn;

  State: TGridDrawState);

begin

  with Cracker(Sender) do

  if DataLink.ActiveRecord = Row - 1 then

  Canvas.Brush.Color := clRed

  else

  Canvas.Brush.Color := clWhite;

  DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;