Ir para o conteúdo
EyeLook

[Resolvido] Loading

Mensagens Recomendadas

EyeLook    0
EyeLook

Olá amigos. Cá estou eu outra vez...

Desta vez preciso de uma pequena ajuda.

Quero me divertir com o Pascal e lembrei-me de fazer uma espécie de Loading, mas não estou a conseguir xD

O objetivo era carregar até aos 100% mas ter uma barrinha abaixo a acrescentar umas barrinhas.

O código está assim..

letra:='V';
for contaux:=1 to 100 do
begin
       gotoxy (33,7);
       write ('Carregando ',contaux,'%');
       gotoxy (33,9);
       write (letra);
       delay (35);
end;

Já tive separado porque supostamente eu não quero 100 barrinhas mas sim umas 30/40/50

Editado por thoga31
Tags code + GeSHi

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    594
thoga31

Tu estás a escrever letra sempre na mesma posição: (33,9). Portanto, nunca vão aparecer vários "V"s como querias.

Se MAXIMUM caracteres corresponde a 100%, então counter % corresponde a x caracteres:

MAXIMUM   ------>       100 %
     x   ------>   counter %

x = (counter * MAXIMUM) / 100

POSINIT + (counter * MAXIMUM) div 100

Portanto, counter é um valor que indica, em percentagem, o progresso actual, e esta última linha em Pascal indica-te a posição X da barra.

Convém não esquecer que nem sempre o progresso ocorre em saltos de 1%. Portanto, caso haja um salto de 50%, um simples write(letra) vai escrever um "V" sem preencher o que está atrás:

De...
[VVV       ]
... passa a...
[VVV     V ]

Tens de pensar, então, numa forma de preencher o espaço em branco de forma eficiente (sem escrever por cima dos caracteres já escritos em progressos anteriores).

Cumprimentos.


Knowledge is free!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passarito    51
passarito

Eu não costumo fazer isto, mas como o quadro tem estado parado há muito tempo, então cá vai...

letra:='V';
tamanho_da_barra:=25;
for contaux:=1 to 100 do
begin
 gotoxy (33,7);
 write ('Carregando ',contaux,'%');
 for j:=1 to (contaux div tamanho_da_barra) do begin
gotoxy(32+j, 9);
write (letra);
 end;
 delay (35);
end;

Nota, se queres dar um styling à coisa, dá um espaço à frente da letra V -> letra:='V ';

Editado por passarito

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
joao_o grande    0
joao_o grande

Muito obrigado aos dois (já tinha visto no próprio dia a resposta mas depois não tive tempo de vir cá agradecer)

Também já tinha feito um programa do género só que numa procedure para o poder intergrar mais facilmente noutros programas que vou fazendo.

No programa principal basta escreveres as coordenadas do L de loading e o tempo total que queres em segundos.

EX: Loading_screen(2,2,10);

 Program Loading_screen;

Procedure Loading_screen(x,y,tempo_total_segundos:integer);
var aux,tempo_total_milissegundos, x_barras:integer;
Begin
x_barras:=x+15;
for aux:=1 to 100 do
begin
tempo_total_milissegundos:=tempo_total_segundos*1000;
delay(tempo_total_milissegundos DIV 100);
Gotoxy(x,y);
Write('Loading (',aux,'%) ');
If (aux=15) or (aux=30) or (aux=45) or (aux=60) or (aux=75) or (aux=90) or (aux=100) then
begin
x_barras:=x_barras+2;
Gotoxy(x_barras,y);
Write(#219);
end;
End;
End;

Begin
Loading_screen(2,2,10);
End.[/Code]

Acho que assim é mais sofisticado que o V.... :thumbsup:

Espero ter sido útil.

Editado por joao_o grande

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
joao_o grande    0
joao_o grande

Para ficar ainda mais interessante podes atribuir um valor aleatorio entre 5 e 25 por exemplo à variavel tempo_total_segundos. Assim simula a lentidão ou rapidez do teu computador.

;)

:thumbsup:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.