Ir ao conteúdo
  • Cadastre-se

Laço de repetição (while...do)onde ele não pare para receber uma tecla


Posts recomendados

Eu quero fazer um laço de repetição (while...do) onde ele não pare para receber uma tecla (ex:... se eu usar o readln ou o readkey ele vai parar de executar a repetição para esperar que eu digite alguma coisa)... mas eu quero fazer com que ele continue executando e se eu apertar alguma tecla ele reconheça e continue rodando o laço.

Tem jeito?

Link para o comentário
Compartilhar em outros sites

Tem sim!!

o nome da função é keyPressed..

ela é do tipo booleano e retorna true caso uma tecla seja pressionada e falso caso nada se tecle..

esta função se encontra na unit crt

ela é fundamental na maioria dos jogos

..

é possivel também saber qual tecla foi pressionada, pois ela fica armazenada no buffer do teclado..

você pode utilizar o nosso velho readkey para "ler" o buffer..

bom.. veja um exemplinho simples..

a variavel contadora fica incrementando e enquanto você não tecla nada ela vai embora..

ate atingir o limite d um inteiro..


program teste_keypressed;

uses crt; (* a nossa função esta aqui nesta biblioteca *)

var
  cont : integer;

begin
   cont := 0;
   (* enquanto nenhuma tecla for pressionada faça *)
   while not(keyPressed) do
   begin
      cont := cont + 1;
      writeln(cont);
   end;
   writeln(readkey;) (* aqui vai imprimira a tecla q o usuario pressionou *)
   readkey; (* aqui é uma pausa simples *);
end.

no menu Help>Index do turbo pascal tem a explicação certinha desta função..

mas é isso aí.

Link para o comentário
Compartilhar em outros sites

  • 10 anos depois...
  • Membro VIP

Olá @Vida louca 1123. Seja bem vindo ao Fórum do Clube do Hardware.

 

19 horas atrás, Vida louca 1123 disse:

Eu to iniciando no pascal o é cont

 

Então, eu não entendi o que você você quis dizer, a frese ficou incompleta.

 

Se estiver se referindo a algo como "o que é o cont?", esse "cont" nada mais é que uma variável comum, como qualquer outra. Ela foi definida como sendo do tipo interger, ou seja, estruturada para receber números inteiro.

 

No código, a variável é inicializada com "0" e a cada loop é acrescentado em 1 ao seu valor anterior. Devido a essa característica que o programador definiu, ela acabará como se comportando como um "contador" e como lá também está escrevendo esse valor num writeln, esse valor também será exibido na tela.

 

RESUMINDO:

A variável cont está sendo usada como um "contatador". Tanto que a nomenclatura dela foi definida como cont, o que faz uma alusão a sua função exercida.

 

 

***

 

Segue outro exemplo:

 

Spoiler

program teste_keypressed2;
uses
  CRT; (* a nossa função esta aqui nesta biblioteca *)
begin
while not (KeyPressed) do (* enquanto nenhuma tecla for pressionada faça *)
  begin
  {aqui detro do While, você pode colocar qualquer coisa. Todas as estruturas que
  tiverem aqui dentro serão executadas até fim, até que alguma tecla seja pressionada.
  ou seja, se tiver 1000 instruções, você pressionar alguma tecla em qualquer momento, o 
  computador vai executar tudo até chegar no END. Ao verificar o KeyPressed, constará que
  você pressiou alguma tecla e o While vai terminar.
  obs.: só não poderá ter comandos de leitura de dados, como o READ, READLD ou READKEY
  pois esses comandos também interagem com as teclas pressionadas, o que pode influenciar
  no comando KeyPressed [Simon.Viegas]}
  write('=');
  write('-');
  Delay(50);
  {Delay(X) = comando que faz o programa "pausar" por X milisegundos, ou seja, quando o comando
  é executado, o programa ficará "parado" pelo tempo que foi especificado, e após continua normalmente.
  obs.: esse comando também pertence a CRT.
  obs2: em alguns compiladores não é necessário declarar o "uses CRT", pois ele é automaticamente
  incorporado, se não me engano temos como exemplo o PascalZim. [Simon.Viegas]}
  end;
end.

 

Outro exemplo com Data e Hora.

 

Spoiler

program teste_keypressed2;
uses
  CRT,      //Carrega comandos extras, como o CrlSr e ReadKey, TextColor, White (entre outros)
  SysUtils; //Carrgaa comandos extras, como o DateTimeToStr e Now (entre outros)
var
  agora:TDateTime; //variável que irá armazenar temporiamente a "data e hora atual"
  tecla:char;      //armazenar a tecla pressionada
  cont :word;      //usado como contador de loops (voltas no While) 
BEGIN
TextColor(White); //cor do texto branco
while not (KeyPressed) do (* enquanto nenhuma tecla for pressionada faça *)
  begin
  inc(cont); //o mesmo que cont:=cont+1
  ClrScr;
  agora:=Now; //Now="retona a data e hora atual"
  writeln('Agora : ',DateTimeToStr(agora)); 
  Writeln('Agora : ',FormatDateTime('hh:nn',agora));
  Writeln('Agora : ',FormatDateTime('DD MM YYYY',agora));
  Writeln('Agora : ',FormatDateTime('c',agora));
  Write  (cont); //exibe o contador para demosntrar quantos loops já foram executados
  Delay(200); //pause de X milisegundo
  end;
writeln; //servindo para pular uma linha
writeln;
writeln;
TextColor(Yellow); //cor do texto amarelo
writeln('voce pressionou alguma tecla');
tecla:=ReadKey;
writeln('A tecla foi : ',tecla); //obs.: algumas teclas especiais não são exibidas ou ficam desconfiguradas
writeln('Codigo ASCII: #',Ord(tecla)); //Ord=Retorna o valor ordinal da tecla na tablea ASCII (ou algo do tipo). Pode falhar com algumas teclas
writeln;
write  ('Pressione ENTER para continuar');
readln; //aqui usado para servi como um "pause" (o programa vai ficar aguardando um ENTER ser pressionado, pois "o ENTER é o que confirma o enveio do texto que foi informado pelo teclado para o ReadLN, apenas não irá armazenar em lugar algum")
END.

{
Tipos de formatação usados no FormatDateTime
http://www.freepascal.org/docs-html/rtl/sysutils/formatchars.html
}

 

 

 

Por ai vai.

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...