• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Blog dos Moderadores

  • artigos
    43
  • comentários
    0
  • visualizações
    49476

Autores deste blog

  • jpaulino 19
  • thoga31 9
  • Rui Carlos 7
  • David Pintassilgo 3
  • brunoais 2
  • bioshock 1
  • Warrior 1
  • M6 1

Pause (procedimento útil)

thoga31

408 visualizações

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.

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)


0


0 Comentários


Não há comentários para mostra.

Convidado
Está a comentar como guest. Se tem uma conta, por favor inicie sessão.
Adicionar um comentário...

×   Colou conteúdo com formatação.   Restaurar formatação

×   Your link has been automatically embedded.   Mostrar como ligação