![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
#1
|
|||
|
|||
Consola MSDOS
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.
__________________
craven |
#2
|
||||
|
||||
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:
Código:
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. |
#3
|
||||
|
||||
Bueno, ya pensándole un poco más parece que se puede reducir a:
Código:
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. 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 |
#4
|
|||
|
|||
Muchas gracias por tu ayuda.
__________________
craven |
![]() |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
![]() |
|