Recuerdo que hace tiempo con ayuda del Club, hice una unit que hace varias cosas de las que quieres, hechale un vistazo:
Código Delphi
[-]
interface
uses
SysUtils,Windows;
Procedure CreaBordes(F,C,Cant:Integer;Carac:Char);
Procedure Limpia(F1,F2,C1,C2:Integer);overload;
Procedure Limpia;overload;
Procedure GotoXY(X,Y:Integer);
Procedure CreaTabla(Ancho,Alto:Integer);
implementation
Procedure CreaBordes(F,C,Cant:Integer;Carac:Char);
var
H : THandle;
P : Cardinal;
CoordAuxi : _COORD;
begin
CoordAuxi.X := C;
CoordAuxi.Y := F;
H := GetStdHandle(STD_OUTPUT_HANDLE);
FillConsoleOutputCharacter(h,carac,cant,CoordAuxi,P);
end;
Procedure Limpia;
Var
H : THandle;
P : Cardinal;
LArea,
Cord_Aux : _COORD;
i : integer;
begin
Cord_Aux.X := 0;
H := GetStdHandle(STD_OUTPUT_HANDLE);
LArea := GetLargestConsoleWindowSize(H);
for i := 0 to LArea.Y do
begin
Cord_Aux.Y := i;
FillConsoleOutputCharacter(H,#0,LArea.X,Cord_Aux,P);
end;
GotoXY(0,0);
end;
Procedure Limpia(F1,F2,C1,C2:Integer);
Var
H : THandle;
P : Cardinal;
LArea,
Cord_Aux :_COORD;
i : integer;
begin
Cord_Aux.X := 0;
H := GetStdHandle(STD_OUTPUT_HANDLE);
LArea := GetLargestConsoleWindowSize(h);
Cord_Aux.X := C1;
for i := F1 to F2 do
begin
Cord_Aux.Y := i;
FillConsoleOutputCharacter(H,#0,C2-C1,Cord_Aux,P);
end;
GotoXY(C1,F1);
end;
Procedure GotoXY(X,Y:Integer);
Var
H : THandle;
MyCord : _COORD;
begin
MyCord.X := x;
MyCord.Y := y;
H := GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(H,MyCord);
end;
Procedure CreaTabla(Ancho,Alto:Integer);
var
i:Integer;
begin
CreaBordes(1,2,Ancho,#205);
CreaBordes(3,2,Ancho,#205);
CreaBordes(1,1,1,#201);
CreaBordes(1,Ancho+1,1,#187);
CreaBordes(2,1,1,#186);
CreaBordes(2,Ancho+1,1,#186);
CreaBordes(3,1,1,#204);
CreaBordes(3,Ancho+1,1,#185);
for i := 4 to Alto do
begin
CreaBordes(i,1,1,#186);
CreaBordes(i,Ancho+1,1,#186);
end ;
CreaBordes(Alto,2,Ancho,#205);
CreaBordes(Alto,1,1,#200);
CreaBordes(Alto,Ancho+1,1,#188);
end;
end.