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. :-)