Jump to content

[Resolvido] Loading


EyeLook
 Share

Recommended Posts

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

Edited by thoga31
Tags code + GeSHi
Link to comment
Share on other sites

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.

  • Vote 1

Knowledge is free!

Link to comment
Share on other sites

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 ';

Edited by passarito
  • Vote 1
Link to comment
Share on other sites

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.... 👍

Espero ter sido útil.

Edited by joao_o grande
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.