EyeLook 0 Denunciar mensagem Publicado 28 de Abril de 2015 (editado) 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 28 de Abril de 2015 por thoga31 Tags code + GeSHi Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
thoga31 610 Denunciar mensagem Publicado 28 de Abril de 2015 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. 1 Knowledge is free! Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
passarito 58 Denunciar mensagem Publicado 29 de Abril de 2015 (editado) 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 29 de Abril de 2015 por passarito 1 Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
EyeLook 0 Denunciar mensagem Publicado 2 de Maio de 2015 Muito obrigado aos dois (já tinha visto no próprio dia a resposta mas depois não tive tempo de vir cá agradecer) Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
joao_o grande 0 Denunciar mensagem Publicado 4 de Janeiro de 2016 (editado) 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. Editado 4 de Janeiro de 2016 por joao_o grande Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
joao_o grande 0 Denunciar mensagem Publicado 5 de Janeiro de 2016 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. Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites