Ir para o conteúdo

Pause - procedimento útil

Vê-se constantemente o readln ou o readkey serem utilizados como pausas. Contudo, eu não gosto nada de utilizar estes, e já hé muito tempo que criei um procedimento com três overloads que permite criar uma pausa totalmente personalizável e de forma muitíssimo simples.

Este procedimento é inspirado no comando Pause [Text] do TI-Basic Z80.

Código

TYPE TKeys = set of char;

procedure Pause(const PauseText : string; const KeysToProceed : TKeys; var KeyReceiver : char);
(* PROCEDIMENTO COMPLETO - recebe texto a mostrar, teclas que desbloqueiam a pausa e a variável receptora da chave *)
begin
     write(PauseText);
     repeat
           KeyReceiver := ReadKey;
     until KeyReceiver in KeysToProceed;
end;


procedure Pause(const PauseText : string; const KeysToProceed : TKeys); overload;
(* PROCEDIMENTO COMPACTO - não há output *)
var Key : char;
begin
     Pause(PauseText, KeysToProceed, Key);
end;


procedure Pause(const PauseText : string); overload;
(* PROCEDIMENTO SIMPLIFICADO - assume Enter como tecla a processar *)
begin
     Pause(PauseText, [#13]);
end;


procedure Pause; overload;
const StrEmpty : string = '';
begin
     Pause(StrEmpty);
end;

Utilização

// ...
var chave : char;
// ...
pause('Esta é uma pausa completa...', [#13, #27], chave);
(* Escreve o texto, e as teclas que desbloqueiam a pausa é o Enter e o Esc,
e a tecla que for carregada fica guardada na variável chave. *)

pause('Esta é uma pausa compacta...', [#13, #27]);
(* O mesmo que o anterior, mas a tecla não é guardada em nenhuma variável - é perdida. *)

pause('Esta é uma pausa simplificada...');
(* Só mostra texto, sendo o Enter a tecla que desbloqueia a pausa *)
// Nota: como é a única tecla que pode desbloquear, não faz sentido ter um
// parêmetro por referência que guarde a tecla.

pause;
(* Faz pausa, sem texto e com o Enter como tecla desbloqueadora. *)
// Nota: este overload evita que se tenha de escrever "Pause('');"

// ...

Este código foi optimizado para Free Pascal. Espero que vos seja útil. :-)