Jump to content

Blog dos Moderadores

  • entries
    36
  • comments
    0
  • views
    57,736

Contributors to this blog

  • jpaulino 17
  • Rui Carlos 7
  • thoga31 7
  • brunoais 2
  • bioshock 1
  • Warrior 1
  • M6 1

Pause (procedimento útil)


thoga31

1,477 views

 Share

Uma boa amostra da sobrecarga de métodos em Pascal (overloading) e de como fazer pausa no programa de forma correcta sem recorrer massivamente ao readln.

Em 30/11/2011 às 23:27, thoga31 disse:

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

Origem: Pause (procedimento útil)

 Share

0 Comments


Recommended Comments

There are no comments to display.

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.