Este es el que he utilizado alguna vez:
Código Delphi
[-]
procedure TFormStringGrid.__DeleteRow(SG: TStringGrid; Index:Integer);
var
i:Integer;
begin
if (SG.RowCount = 1) then begin
Exit;
end;
for i := Index to (SG.RowCount) do begin
SG.Rows[i].Assign(SG.Rows[i+1]);
end;
if (SG.RowCount > 1) then begin
SG.RowCount := SG.RowCount - 1;
end
else begin
end;
end;