Hola Suriu,
El problema de estar empleando un array dinámico es que para borrar una posición determinada debes tu mismo elaborar el algoritmo. No existe el Delete en un array dinámico.
Deberás sobrescribir los valores corriendolos hacia una posición anterior. Y luego realizar un SetLength con el valor anterior. Más o menos así:
Código Delphi
[-]procedure Estudiante.Borrar(aIndice: Integer);
begin
Desplazar(aIndice);
dec(FCant);
SetLength(Alumno, FCant);
end;
Siendo Desplazar el algoritmo que se encarga de ir "corriendo" los datos.
La otra opción es que no emplees los arrays dinámicos y uses TList, o TObjectList. Éstos cuentan con los métodos adecuados para insertar, borrar, etc... Si tienes dudas, con la ayuda de Delphi y una búsqueda en estos foros podrás evacuarlas.
Saludos,