Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-12-2003
patu patu is offline
Registrado
 
Registrado: oct 2003
Posts: 6
Poder: 0
patu Va por buen camino
Borrar pantalla en Console Application

Saludos a todos,

¿Como puedo borrar la pantalla en una Console Application al estilo del CLS del MS-DOS?.

Gracias.
Responder Con Cita
  #2  
Antiguo 12-12-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Yo tengo una función hecha que sigue estos pasos:
[list=1][*]Captura el Handle de la Consula (GetStdHandle)[*]Calcula en Alto y Ancho Máximo (GetLargestConsoleWindowSize)[*]Limpia el Output Buffer (FillConsoleOutputCharacter)[*]Posiciona el cursor en el margen superior derecho (SetConsoleCursorPosition)[/list=1]

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 12-12-2003
patu patu is offline
Registrado
 
Registrado: oct 2003
Posts: 6
Poder: 0
patu Va por buen camino
Te agradezco las indicaciones, pero me podrias facilitar el código que utilizas?. Mis conocimientos de Delphi no son todo lo extensos que me gustaría que fuesen.

Gracias otra vez.
Responder Con Cita
  #4  
Antiguo 16-12-2003
patu patu is offline
Registrado
 
Registrado: oct 2003
Posts: 6
Poder: 0
patu Va por buen camino
¿Por favor, alguien me puede indicar el código necesario para borrar la pantalla en una console application?
Responder Con Cita
  #5  
Antiguo 16-09-2006
linuxfresh linuxfresh is offline
Registrado
 
Registrado: sep 2006
Posts: 6
Poder: 0
linuxfresh Va por buen camino
Borrar pantalla con ClrScr

En esta pagina he encontrado una unidad llamada console, similar a la crt de Turbo Pascal (clrscr, gotoxy, textcolor, etc). La he probado en l nuevo Turbo Delphi y no me ha dado problemas.

http://rvelthuis.de/programs/console.html

Avisen si les sirvio.
Responder Con Cita
  #6  
Antiguo 14-12-2006
Avatar de Eduardo Juviel
Eduardo Juviel Eduardo Juviel is offline
Registrado
 
Registrado: oct 2006
Ubicación: Fomento, Sancti Spíritus, Cuba
Posts: 9
Poder: 0
Eduardo Juviel Va por buen camino
Hola, yo también estoy en una situación similar; no me ha servido de mucho la unit que dice linuxfresh (debe ser por mi inexperiencia). Discúlpenme amigos. De veras quisiera entender, pero la unit está escrita para Pascal, y lo necesito en Consola de Delphi. Saludos!!!
Responder Con Cita
  #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
Poder: 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
  #8  
Antiguo 14-12-2006
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
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
  #9  
Antiguo 15-12-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Gracias yusnerqui. Funciona mejor. No hay "movimiento" de Scroll de ningún tipo y la Consola se "limpia" como esperamos.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #10  
Antiguo 15-12-2006
Avatar de Eduardo Juviel
Eduardo Juviel Eduardo Juviel is offline
Registrado
 
Registrado: oct 2006
Ubicación: Fomento, Sancti Spíritus, Cuba
Posts: 9
Poder: 0
Eduardo Juviel Va por buen camino
Genial!!! Ahora sí, y con todo mi respeto dec, funciona mejor que como decías. De todas formas te reitero las gracias, de veras que sí. Felicidades yusnerki. Gracias a todos lus delphinautas.

Saludos
Eduardo Juviel
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:41:33.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi