Ir ao conteúdo
  • Cadastre-se

Problemas com blink


Escrifonife19

Posts recomendados

E ai pessoal, beleza

Vi o comando blink aqui no forum e to testando o programa abaixo para ver se a frase fica piscando na tela...

Aqui no ubuntu, usando a IDE geany funciona perfeitamente.

No windows xp, usando o turbo pascal, o free pascal ou a IDE geany, não da erro mais tambem não funciona.

Testei em outros computadores com o windows xp e tambem não funcionou.

Alguem sabe resolver isso?


program pisca;
uses crt;
begin
textcolor(14 + blink);
writeln('Frase piscando...');
readkey;
end.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

E ai pessoal, beleza

Vi o comando blink aqui no forum e to testando o programa abaixo para ver se a frase fica piscando na tela...

Aqui no ubuntu, usando a IDE geany funciona perfeitamente.

No windows xp, usando o turbo pascal, o free pascal ou a IDE geany, não da erro mais tambem não funciona.

Testei em outros computadores com o windows xp e tambem não funcionou.

Alguem sabe resolver isso?


program pisca;
uses crt;
begin
textcolor(14 + blink);
writeln('Frase piscando...');
readkey;
end.

Olá,

Eu acredito que isto seja algo relacionado a exibição da tela no "prompt do MS-DOS do XP" (o XP não usa mais o MS-DOS, mas uma espécie de emulador).

Quando eu usava o XP SP2, o blink "funciona" normalmente... mas só com a tela maximizada (alt+ENTER)...

Já agora com com SP3 (não sei se está relacionado) os programas não estão mais piscando, mesmo em tela cheia.

Inclusive o Turbo Pascal 7.1 aqui em casa está super lento, tem momentos que a compilação demora uns 5 segundo... a tela fica travada e tal.

RESUMINDO.

O blink de certo modo funciona, mas acho que está dando incompatibilidade com algum recurso do XP, possa ser algo relacionado aos "updates", não sei.

Em fim, o Pascal também tem algumas configurações de tela...

Por acaso, agora fiz uns teste aqui no Turbo Pascal 7.1, coloquei esse trecho:

TextMode(C80 + Font8x8);
clrscr;

logo após o begin e a tela ficou piscando. E agora, com ou sem o trecho o texto fica piscando.. (em tela cheia, claro). Não sei se o XP salvou a configuração......

Fiz o mesmo teste no DevPascal e no Virtual Pascal e não deu o mesmo resultado.

Não sei explicar exatamente o que ocorre para o Pascal piscar quando ele quer.

Qualquer coisa........

Abraços

Link para o comentário
Compartilhar em outros sites

Testei o comando que você passou, e não deu diferença nenhuma,

tanto com tela cheia, ou sem tela cheia, ou usando o comando

textcolor(2 + blink);.


program piscando;
uses crt;
begin
TextMode(C80 + Font8x8);
clrscr;
writeln('Frase piscando...');
readkey;
end.

Ja que não está funcionando, estou tentando fazer um procedimento que faz a frase pisca.


program piscando;
uses crt;

{faz uma frase piscar}
procedure pisca(frase: string);
begin
textcolor(15);
while keypressed = false do {enquanto não precionar uma tecla}
begin
gotoxy(1,wherey);
write(frase);
delay(65000);
gotoxy(1,wherey);
clreol;{limpa uma linha a partir da posicao do cursor}
gotoxy(length(frase) + 1,wherey);
delay(65000);
end;
writeln;
end;

begin
clrscr;
writeln('Frase abaixo piscando...');
pisca('Testando');
readkey;
end.

valeu

t+

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Testei o comando que você passou, e não deu diferença nenhuma,

tanto com tela cheia, ou sem tela cheia, ou usando o comando

textcolor(2 + blink);.


program piscando;
uses crt;
begin
TextMode(C80 + Font8x8);
clrscr;
writeln('Frase piscando...');
readkey;
end.

Ja que não está funcionando, estou tentando fazer um procedimento que faz a frase pisca.


program piscando;
uses crt;

{faz uma frase piscar}
procedure pisca(frase: string);
begin
textcolor(15);
while keypressed = false do {enquanto não precionar uma tecla}
begin
gotoxy(1,wherey);
write(frase);
delay(65000);
gotoxy(1,wherey);
clreol;{limpa uma linha a partir da posicao do cursor}
gotoxy(length(frase) + 1,wherey);
delay(65000);
end;
writeln;
end;

begin
clrscr;
writeln('Frase abaixo piscando...');
pisca('Testando');
readkey;
end.

valeu

t+

Olá,

Como é sabido por alguns, o Delay normalmente se comporta de uma forma diferente em cada máquina. Originalmente ele foi feito para dar um "retardo" em milissegundos, mas cada PC calcula o tempo de uma forma diferente, ou seja, o mesmo código vai se comportar de forma diferente, a depender, por exemplo, da velocidade da UCP (CPU em inglês).

Mas como o novo "pai dos burros" (Google) está na ativa, o problema aparentemente pode ser resolvido de uma forma elegante:

Olhe o que eu encontrei na internet (fiz algumas modificações)

function timer:real;
var
hour,
minute,
second,
sec100 :word;
begin
gettime(hour,minute,second,sec100);
[COLOR="Red"]{//acho que dá para otimizar essa fórmula abaixo!!!}[/COLOR]
timer:=(hour*3600.0+minute*60.0+second)*100.0+1.0*sec100;
end;

{da um delay no pascal em milissegundos}
procedure aguardar(t:real);
var
t1 :real;
begin
t1:=timer;
repeat until timer>t1+(100*t)/1000;
end;

Pronto, agora o Delay vai se comportar de uma forma mais adequada!!! :lol:

Seu código com a nova estrutura

program piscando;
uses
crt,
dos; {para usar o getTime}

const
tempo = 500; {tempo do delay (milisegundos)}


function timer:real;
var
hour,
minute,
second,
sec100 :word;
begin
gettime(hour,minute,second,sec100);
[COLOR="Red"]{//acho que dá para otimizar essa fórmula abaixo!!!}[/COLOR]
timer:=(hour*3600.0+minute*60.0+second)*100.0+1.0*sec100;
end;

{da um delay no pascal em milissegundos}
procedure aguardar(t:real);
var
t1 :real;
begin
t1:=timer;
repeat until timer>t1+(100*t)/1000;
end;

{faz uma frase piscar}
procedure pisca(frase: string);
var
x,
y :byte; [COLOR="Red"]{//copia as coordenadas da impressão}[/COLOR]
begin
[COLOR="Red"] (*
textcolor(15);
//deve ficar fora
*)[/COLOR]
{copia a posicao atual do cursor}
x:=WhereX; y:=WhereY;
[COLOR="Red"] (*
while keypressed = false do {enquanto não precionar uma tecla}
// acho melhor usando o not
*)[/COLOR]
[COLOR="Red"] (*
while not keypressed do {enquanto não precionar uma tecla}
// usar repeat, já q vai executar pelo menos uma vez
*)[/COLOR]
repeat
{gotoxy(1,wherey);}
gotoXY(x,y); {posiciona na posicao indicada}
write(frase); {imprime a frase}
aguardar(tempo); {dá um daley em milissegundo (tempo é um constate)}
gotoXY(x,y); {posiciona na posicao indicada}
clreol; {limpa uma linha a partir da posicao do cursor}
{gotoxy(length(frase) + 1,wherey);}
gotoXY(x + length(frase),y);{p/ o cursor piscar onde seria o fim da frase}
aguardar(tempo); {dá um daley em milissegundo (tempo é um constate)}
until keypressed;
readkey; {usado aqui para "resetar o keypressed" (para poser reusar)}
{writeln;}
end;

begin
clrscr;
textcolor(14);
write('Teste de frase piscando...');
textcolor(15);
pisca('TO PISCANDO GENTE');
writeln;
write('Xo testar de novo: ');
pisca('To piscando certo???');
readkey;
end.

PS: Outra forma de implementar o aguarde seria assim:


procedure aguardar(t:real);
function timer:real;
var
hour,
minute,
second,
sec100 :word;
begin
gettime(hour,minute,second,sec100);
{//acho que dá para otimizar essa fórmula abaixo!!!}
timer:=(hour*3600.0+minute*60.0+second)*100.0+1.0*sec100;
end;

var
t1 :real;
begin
t1:=timer;
repeat until timer>t1+(100*t)/1000;
end;
{da um delay no pascal em milissegundos}

Com um procedimento dentro do outro, assim o timer só vai ser enxergado pelo próprio aguadar.

Fico no aguardo.

Abraços

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para 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...