Disable automatic adding of a new row when the selected cell is in the last row (Option goAutoAddRows). And in your OnKeyDown handler disable further processing of the pressed key by setting Key := 0 in the innermost "if" condition:
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin caption := StringGrid1.RowCount.ToString + ' : ' + Stringgrid1.Row.ToString; if (key = VK_DOWN) then begin with(sender as tstringgrid) do begin if (Row = (RowCount - 1)) Then Begin Row := 0; Key := 0; end; end; end; end;