Añado : Realmente la idea es esa, pero como tu indicas, si tienes 30 filas se posiciona en la fila 15, por lo que tampoco te soluciona exactamente lo que he puesto anteriormente.
En el evento OnDrawColumnCell del DBGrid puedes averiguar la posición dentro del DBGrid del registro que está seleccionado. Sería realizar el cálculo oportuno para saber el número de filas que te quedan por debajo del registro seleccionado, avanzar esas posiciones + número de filas del DBGrid, y retroceder número de filas del DBGrid.
A lo mejor a alguien se le ocurre algo mejor ....