Ver Mensaje Individual
  #8  
Antiguo 14-12-2006
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Reputación: 23
yusnerqui Va por buen camino
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
{------------------------------------------------------------------------------
  Procedimiento utilizado para crear bordes de una tabla o esquema con
  un caracter especificado
-------------------------------------------------------------------------------}
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;
 {------------------------------------------------------------------------------
  Procedimiento que limpia toda la pantalla
 -------------------------------------------------------------------------------}
 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;
  {------------------------------------------------------------------------------
   Procedimiento que limpia un área de la pantalla en dependencia de los
   parámetros especificados.
 -------------------------------------------------------------------------------}
 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;
 {------------------------------------------------------------------------------
  Procedimiento que ubica el cursor en un lugar específico de la pantalla
 -------------------------------------------------------------------------------}
 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;
 {------------------------------------------------------------------------------
  Crea una tabla de dos filas y una columna, la primera fila para un encabezado
  y tiene un alto fijo, la segunda para los detalles y se le puede especificar
  el alto. También podemos especificar el ancho de dicha tabla. 
 -------------------------------------------------------------------------------}
 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.
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita