Jump to content

Recommended Posts

Posted

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 de cada um, por ordem:

// ...
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. Se for necessária alteração para ser compatível com outros compiladores, digam que eu altero. 🙂

Espero que seja útil.

Cumprimentos. 😉

Knowledge is free!

Posted

É bem, é bem... 😉

Código útil para quem começa poder ver algumas potencialidades da linguagem! E para usar, é claro!

Mete na wiki (como se fosse preciso dizer... 🙂 )

Este código foi optimizado para Free Pascal. Se for necessária alteração para ser compatível com outros compiladores, digam que eu altero. 🙂

Porreiro, mete aí em PascalZIM! 😉 hehehe

Ou melhor, não metas! Senão, ainda algum professor podia ficar a saber que o pascal faz mais do que loops e writeln's (refiro-me claro aos overloads)...

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Posted
Em 01/12/2011 às 00:00, nunopicado disse:

É bem, é bem... 🙂

Código útil para quem começa poder ver algumas potencialidades da linguagem! E para usar, é claro!

Mete na wiki (como se fosse preciso dizer... 🙂 )

Obrigado. 🙂

Fui vasculhar os confins da minha pasta "Prgm Tools" e desencantei este procedimento, entre muitos outros úteis.

Já estou a colocar, wait 5 seconds (minutes, I must say 😛 )

EDIT: https://wiki.portugal-a-programar.pt/dev_geral/pascal/pronto-a-usar/pause/

Em 01/12/2011 às 00:00, nunopicado disse:

Porreiro, mete aí em PascalZIM! 😉 hehehe

Ou melhor, não metas! Senão, ainda algum professor podia ficar a saber que o pascal faz mais do que loops e writeln's (refiro-me claro aos overloads)...

Questiono-me se o Pascal é mesmo capaz daquilo que tentei fazer, ou mesmo o Delphi. Será que não inventei aquilo que não existe ainda? Pelos vistos, a coisa mais avançada que existe é o PZim... hum... 😉

Knowledge is free!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.