PDA

Ver la Versión Completa : Consola MSDOS


craven
19-09-2003, 01:35:35
Hola. ¿Cómo podría, en una aplicación de consola, mostrar un mensaje y hacer una pausa hasta que el usuario pulse una tecla? Gracias.

roman
19-09-2003, 06:53:38
La respuesta que te doy parece funcionar (Windows 2000, Delphi7) pero honestamente no sé por qué: no trabajo con aplicaciones de consola. Hice una búsqueda en Google y encontré un código del que extraje esto:


program Project1;

{$APPTYPE CONSOLE}

uses
Windows, SysUtils;

var
hStdIn: THandle = 0;

procedure FlushInputBuffer;
var
I: DWord;

begin
I := 0;
repeat
if FlushConsoleInputBuffer(hStdIn) then
begin
Sleep(150);
GetNumberofConsoleInputEvents(hStdIn,I);
end
else
break;
until I = 0;
end;

function KeyPressed: Boolean;
var
I: DWord;

begin
GetNumberofConsoleInputEvents(hStdIn, I);
Result := I > 0;
end;

begin
hStdIn := GetStdHandle(STD_INPUT_HANDLE);
WriteLn('Hola ClubDelphi');
WriteLn;
Write('Oprime una tecla...');

FlushInputBuffer;
repeat
until KeyPressed;
end.


// Saludos

roman
19-09-2003, 07:10:24
Bueno, ya pensándole un poco más parece que se puede reducir a:


program Project1;

{$APPTYPE CONSOLE}

uses
Windows, SysUtils;

var
hStdIn: THandle;

function KeyPressed: Boolean;
var
I: DWord;

begin
GetNumberOfConsoleInputEvents(hStdIn, I);
Result := I > 0;
end;

begin
hStdIn := GetStdHandle(STD_INPUT_HANDLE);

WriteLn('Hola ClubDelphi');
WriteLn;
Write('Oprime una tecla...');

FlushConsoleInputBuffer(hStdIn);
repeat
until KeyPressed;
end.


A hStdIn se le asigna un "apuntador" a la entrada estandard (el teclado)

FlushConsoleInputBuffer vacía todo lo que haya en el buffer de entrada (en este caso el teclado) antes del ciclo para omitir teclasos previos a la ejecución.

GetNumberOfConsoleInputEvents devuelve en I el número de entradas en el buffer (en este caso del teclado). Al principio no habrá ninguna (ya que se vació el buffer) y al oprimir una tecla habrá por lo menos una entrada lo que ocasiona que la función KeyPressed devuelva true.

Así es como lo entiendo. Puedes buscar más en la ayuda del sdk de Windows (incluida en Delphi).

// Saludos

craven
19-09-2003, 11:32:09
Muchas gracias por tu ayuda.