Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Escrifonife19

[Resolvido] Problemas com blink

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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+

    Compartilhar este post


    Link para o post
    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+

    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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Realmente o delay se comporta de uma forma diferente em cada máquina.

    Com essa codificação fico bacana.

    t+

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Visitante
    Este tópico está impedido de receber novos posts.
    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×