Hacer un "clear screen" en una aplicación cónsola

3317 vistas

En una aplicación cónsola no es posible borrar la pantalla como harÃamos con el procedimiento clrstr de Turbo Pascal. El procedimiento cls descrito a continuación explica cómo conseguirlo:



delphi
  1. program consolecls;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   SysUtils,  Windows;
  7.  
  8. procedure cls(hConsole: THandle);
  9. const
  10.   coordScreen: TCoord = (X:0;Y:0);  // posición origen del cursor
  11. var
  12.   cCharsWritten: DWord;
  13.   csbi: TConsoleScreenBufferInfo;
  14.   dwConSize : DWord;
  15. begin
  16.   // obtenemos el nombre de carácteres que hay dentro del buffer en curso
  17.   if not GetConsoleScreenBufferInfo(hConsole, csbi ) then exit;
  18.   dwConSize:=csbi.dwSize.X * csbi.dwSize.Y;
  19.  
  20.   // llenamos la pantalla con espacios
  21.   if not FillConsoleOutputCharacter( hConsole, #32, dwConSize, coordScreen, cCharsWritten ) then exit;
  22.  
  23.   // obtenemos el atributo del texto en curso
  24.   if not GetConsoleScreenBufferInfo( hConsole, csbi ) then Exit;
  25.  
  26.   // pone los atributos del buffer
  27.   if not FillConsoleOutputAttribute( hConsole, csbi.wAttributes,dwConSize, coordScreen, cCharsWritten ) then exit;
  28.  
  29.   // pone el cursor en las coordenadas de orÃgen
  30.   SetConsoleCursorPosition( hConsole, coordScreen );
  31. end;
  32.  
  33. var
  34.   HandleConsole: THandle;
  35. begin
  36.   HandleConsole := GetStdHandle(STD_OUTPUT_HANDLE);
  37.   if (HandleConsole <> INVALID_HANDLE_VALUE) then Cls(HandleConsole)
  38.   else Write('¡Error en la inicialización de la aplicación!');