Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lucas Vida

splash Screen com Progressbar

Recommended Posts

Boa noite amigos,

 

Venho aqui pedir a ajuda de vocês, estou fazendo um trabalho final para o meu curso. Estou precisando criar um splash screen com o progressbar. No caso o splash eu já consigo fazer perfeitamente, porem não estou conseguindo fazer o progressbar...A ideia é que seja só ilustrativo, mas se ele realmente puder mostrar o carregamento dos arquivos do banco e do projeto seria o ideial. Pesquisando na net encontrei o seguinte cod:

 

No evento OnActivate do formulário coloque o seguinte codigo:


procedure TForm1.FormActivate(Sender: TObject);
begin
ProgressBar1.Position:=10;
Sleep(500);
ProgressBar1.Position:=20;
Sleep(500);
ProgressBar1.Position:=30;
Sleep(500);
ProgressBar1.Position:=40;
Sleep(500);
ProgressBar1.Position:=50;
Sleep(500);
ProgressBar1.Position:=60;
Sleep(500);
ProgressBar1.Position:=75;
Sleep(500);
ProgressBar1.Position:=90;
Sleep(500);
ProgressBar1.Position:=100;
Sleep(200);

Showmessage('Terminou!');

end;

Esse código mostra o carregamento do progressbar porém a tela em volta fica transparente e o resto formulário só é exibido quando termina de "carregar" o progressbar. A minha idéia era que ele ficasse junto com a imagem do splash screen e também fosse sendo exibido status do carregamento...Dai estou fazendo um código assim:

 

procedure TForm1.FormActivate(Sender: TObject);
begin
ProgressBar1.Position:=10;
Sleep(500);
label1.Caption := 'Carregando...';
ProgressBar1.Position:=20;
Sleep(500);
label1.Caption := 'Abrindo arquivos...';
ProgressBar1.Position:=30;
Sleep(500);
label1.Caption := 'Carregando o Banco de Dados...';
ProgressBar1.Position:=40;
Sleep(500);
ProgressBar1.Position:=50;
Sleep(500);
ProgressBar1.Position:=60;
Sleep(500);
ProgressBar1.Position:=75;
Sleep(500);
ProgressBar1.Position:=90;
Sleep(500);
ProgressBar1.Position:=100;
Sleep(200);
label1.Caption := 'Inicializando o programa...';


form2.showmodal;

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca no On Create e antes de iniciar o progress bar dá um show no form em que está o progress

 

procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.Show;
  ProgressBar1.Position:=10;
  Sleep(500);
  label1.Caption := 'Carregando...';
  ProgressBar1.Position:=20;
  Sleep(500);
  label1.Caption := 'Abrindo arquivos...';
  ProgressBar1.Position:=30;
  Sleep(500);
  label1.Caption := 'Carregando o Banco de Dados...';
  ProgressBar1.Position:=40;
  Sleep(500);
  ProgressBar1.Position:=50;
  Sleep(500);
  ProgressBar1.Position:=60;
  Sleep(500);
  ProgressBar1.Position:=75;
  Sleep(500);
  ProgressBar1.Position:=90;
  Sleep(500);
  ProgressBar1.Position:=100;
  Sleep(200);
  label1.Caption := 'Inicializando o programa...';
end;
end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Amigo,

 

Bom quase deu, não sei se fiz algo errado...agora o formulário não fica mais transparente, porém a imagem ao qual estou usando de fundo para fazer o "splash screen" e o Label só aparecem depois...Sendo assim o label aparece com as seguinte frase já 'Inicializando o programa...'. Alguma sugestão?

 

Muito obrigado e abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente dessa forma :

 

procedure TForm1.FormActivate(Sender: TObject);
begin
  ProgressBar1.Position := 0;
  while ProgressBar1.Position < 100 do
  begin
    ProgressBar1.Position:= ProgressBar1.Position + 10;
    case ProgressBar1.Position of
      10 : label1.Caption := 'Carregando...';
      20 : label1.Caption := 'Abrindo Arquivos...';
      30 : label1.Caption := 'Carregando o Banco de Dados...';
    end;
    form1.Update;
    Sleep(500);
  end;
  label1.Caption := 'Inicializando o programa...';
  form1.Update;
  Sleep(200)
  form2.showmodal;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Itepi!

 

Agora funcionou amigo!

 

Brigadão mesmo.

 

Abs

 

Que isso Lucas, qualquer outra dúvida posta ai que a gente tenta ajudar!

 

Abraço!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia pessoal!

 

Sei que o tópico foi dado como resolvido, porém eu estou com uma dúvida...Depois que mando Exibir o o form2, como faço para fechar o primeiro, já tentei close,hide...o unico jeito que consegui foi usar um Timer e form1.destroy, porém isso faz com que o programa fique sempre em execução e aloque espaço na memória!

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O form1 é o primeiro form chamado pelo seu programa? Se sim, talvez seja interessante antes do showmodal no form2 você dar simplesmente um form1.visible := false; e após o showmodal do form2 deixar um form1.close; ... Isso fará com que o form1 seja ocultado quando o form2 for ativado e quando o form2 for finalizado o programa voltará a executar o código do form1 e ele então finalizará a aplicação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu faria da seguinte forma :

 

Colocaria o Form2 como form principal e o unico que inicializa na lista de "Auto-Create Form" (Project - Options - Forms)

Ai na propriedade FormShow do Form2 você chama o Form1 que é o Splash. Se não souber como chamar pode fazer dessa maneira:

    if form2 = nil then
    begin
      form2 := Tform2.Create(Application);
      form2.ShowModal;
      form2.visible := true; //caso você nao tenha definido como true em tempo de projeto
    end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelas dicas,

 

Na verdade ele é sim o primeiro a ser chamado, como é um splash screen ele deverá ser exibido apenas uma vez, sendo assim não há necessidade de exibi lo novamente, no caso gostaria a de fecha-ló se possível.

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que como ele é o primeiro form chamado ele se torna o principal do programa... se fechar ele provavelmente seu programa será fechado junto (sem delphi aqui para testar isso agora)... geralmente, quando se trata de forms splash, eu faço algo como o sugerido pelo itepi: no create do form principal, eu faço algo assim:

try   formPrincipal.visible := false;   formSplash := TFormSplash.create(self);   formSplash.showmodal;finally   formPrincipal.Visible := true; //O finally só executa após o formSplash ser finalizado (fechado) end;
[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.