Bueno pero, las filas nuevas se insertan siempre al final ¿no? Y más que quedarse posicionado en la primera fila se queda en la fila en la que estaba (prueba cambiando de fila antes de insertar una nueva).
En todo caso la propiedad Row del StringGrid te permite colocar la selección en cualquier renglón que desees; en tu caso supongo que algo como:
Código Delphi
[-]
Detalle.Row := IndiceGrid;
IndiceGrid := IndiceGrid + 1;
aunque según yo sería lo mismo que
Código Delphi
[-]
Detalle.Row := Detalle.RowCount - 1;
Realmento no entiendo el uso de IndiceGrid. En un StringGrid sólo pueden insertarse filas al final.
// Saludos