Q:   How do you tell which record and which field of a TDBGrid is current?

A:   Here is a method to keep track of the current column and row. The following code in the method MyDBGridDrawDataCell updates the variables Col and Row (which must not be local to the method) every time the grid is redrawn. Using this code you can assume that Col and Row point to the current column and row respectively.

var
  Col, Row: Integer;

procedure TForm1.MyDBGridDrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
var
  RowHeight: Integer;
begin
  if gdFocused in State then
  begin
    RowHeight := Rect.Bottom - Rect.Top;
    Row := (Rect.Top div RowHeight) - 1;
    Col := Field.Index;
  end;
end;