Ver Mensaje Individual
  #7  
Antiguo 14-12-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Buscando por Google topas con varias funciones que pueden en teoría echar una mano. En la página Web de Borland se encuentra: Clearing a console window screen y un poco más adelante en la búsqueda se encuentra: Clearing the window in a console application.

Ninguna de las técnicas propuestas me han funcionado razonablemente por separado. La primera, sencillamente, no me funciona: se produce una excepción en la que no me ha apetecido adentrarme. La segunda solución ha estado mejor en mis pruebas. Únicamente le faltaba algo que sí daba la primera: situar el cursor al principio de la Consola al terminar de limpiarla...

Así que he hecho un híbrido de ambos códigos y parece que el asunto funciona, si bien se nota cierto "movimiento" en la "barra de scroll" de la Consola que tal vez no convenza a todos..., debido a la técnica que se usa para limpiar la Consola tal como la propone el segundo resultado/solución de que he hablado. Yo por el momento lo dejo tal cual. Tal vez alguien que entienda más que yo pueda ir un poco más allá:

Código Delphi [-]
program ClubDelphi;

{$APPTYPE CONSOLE}

uses
  Windows;

function LimpiarConsola: boolean;
var
  i: integer;
  handleConsola: LongWord;
  coordenadasCursor: TCoord;
  infoBufferConsola: TConsoleScreenBufferInfo;
begin
  Result := false;
  handleConsola := GetStdHandle(STD_OUTPUT_HANDLE);
  if handleConsola <> INVALID_HANDLE_VALUE then
  begin
    GetConsoleScreenBufferInfo(GetStdHandle
     (STD_OUTPUT_HANDLE), infoBufferConsola);

    for i := 0 to infoBufferConsola.dwSize.Y do
      WriteLn;

    coordenadasCursor.X := 0;
    coordenadasCursor.Y := 0;
    Result := SetConsoleCursorPosition
     (handleConsola,coordenadasCursor);
  end;
end;

begin
  Writeln('Un programa de tipo Consola');
  Writeln('Pulsa ENTER para limpiar la Consola');
  ReadLn;

  LimpiarConsola;

  Writeln('Pulsa ENTER para finalizar');
  Readln;
end.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita