Para evitar esto es mejor usar los literales #205 (que se corresponde con la línea doble horizontal, es decir el caracter ASCII 205). Modificando el código de Carlos:
program Datos_Personales;
uses crt;
var
nombre : string;
grupo : string;
carrera : string;
MaxLrg: integer; { para saber cuál string es más largo }
procedure LineaHor(Linea, Desde, Hasta: integer; Arriba: boolean);
var
Aux: integer;
begin
if Arriba then
begin
GotoXY(Desde,Linea);
Write(#201); { esquina izquierda }
GotoXY(Hasta,Linea);
Write(#187); { esquina derecha }
end
else
begin
GotoXY(Desde,Linea);
Write(#200); { esquina izquierda }
GotoXY(Hasta,Linea);
Write(#188); { esquina derecha }
end;
for Aux:=(Desde+1) to (Hasta-1) do
begin
GotoXY(Aux, Linea);
Write(#205); { linea doble }
end;
end; { LineaHor }
procedure LineaVer(Colum, Desde, Hasta: integer);
var
Aux: integer;
begin
for Aux:=Desde to Hasta do
begin
GotoXY(Colum,Aux);
Write(#186); { columa doble }
end;
end; { LineaVer }
procedure RecuadroDoble(Colum1, Linea1, Colum2, Linea2: integer);
var
Aux:integer;
begin
if Linea1 > Linea2 then
begin
Aux:=Linea1;
Linea1:=Linea2;
Linea2:=Aux;
end;
if Colum1 > Colum2 then
begin
Aux:=Colum1;
Colum1:=Colum2;
Colum2:=Aux;
end;
LineaHor(Linea1,Colum1,Colum2,true);
LineaVer(Colum1,Linea1+1,Linea2-1);
LineaVer(Colum2,Linea1+1,Linea2-1);
LineaHor(Linea2,Colum1,Colum2,false);
end;
function Mayor(A, B: integer): integer;
begin
if A > B then Mayor:=A
else Mayor:=B;
end; { Mayor }
begin
MaxLrg:=0;
ClrScr;
Write('Nombre y apellidos: '); ReadLn(nombre);
MaxLrg:=Mayor(MaxLrg, Length(Nombre));
Write('Grupo: '); ReadLn(grupo);
MaxLrg:=Mayor(MaxLrg, Length(Grupo));
Write('Carrera: '); ReadLn(carrera);
MaxLrg:=Mayor(MaxLrg, Length(Carrera));
ClrScr;
RecuadroDoble(3,10,3+MaxLrg+1,14);
GotoXY(4,11);
Write(Nombre);
GotoXY(4,12);
Write(Grupo);
GotoXY(4,13);
Write(Carrera);
ReadKey;
end.