Ir para conteúdo
Fórum Script Brasil
  • 0

Tela De "abertura" Como Fazer?


Guest - Eduardo -

Pergunta

Guest - Eduardo -

A questão é a seguinte.

Quero fazer meu programa como se estivesse "carregando" antes de abrir.. assim. como o Delphi7 aparece, o Corel.. ETC.

Minhas tentativas.

Primeira..

coloquei um timer no Form1.

Sleep(100);

Form1.Hide;

Form2.ShowModal;

Acontecia que o Form1 Escondia, e quando fechava o programa(Form2), o programa ainda ficava executando, porque a FOrm1 estava HIde.

Tentei também:

Form1 Activate .....

Form2.ShowModal;

Timer Form2..

Sleep(1000);

Close;

AI beleza!! esse deu certo!!!

MAS UM PROBLEMA!

depois que ele dá o sleep no form2, ele fexa o form 2, e abre o Form1...

mas o programa fica lento... Acho que continua executando o Sleep? exemplo..

se eu tentar mover a janela do form1 rapidamente... ela fica lenta.

se eu colokar sleep(10), ela lenta ainda, mas bem mais rápido que sleep(1000), por isso acho que o sleep fica executando mesmo depois do Close, quando esta no Form1...

O Que eu faço?

tem outra maneira de fazer essa telinha de abertura?!

OBRIGAADOOOO"!"""

Link para o comentário
Compartilhar em outros sites

16 respostass a esta questão

Posts Recomendados

  • 0

Isso aí é um form splash meu amigo. Tem que fazer seu form de abertura, tirar ele da lista de forms auto criáveis e ir no código do projeto e colocar ->

Begin
  FSplash:=TFSplash.Create(Application);
  FSplash.Show;
  Application.Initialize;
  FSplash.hide;
  FSplash.free;
  Application.Run;
end;

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Eduardo -

A está Splash.

Beleza Obrigadao tio.

Mas .. o que voce quiz dizer com tirar ele da lista de forms autocriaveis? n intendi...

esse que voce me passou... eu coloko embaixo do Application.CreateForm(TForm1, Form1); por exemplo?

tem como ajusta o timmer que o splash fica na tela?

valeuu !!!!!!!

* ainda bem que tem pessoas como voce pra ajuda pessoas como eu *

Link para o comentário
Compartilhar em outros sites

  • 0
Beleza Obrigadao tio.

Que tio rapaz? Eu não tenho idade pra ser seu tio não.

Begin
  FSplash:=TFSplash.Create(Application);
  FSplash.Show;
  Application.Initialize;
  Application.CreateForm(TFormPrincipal,FormPrincipal);
  //não pode ter aqui o Application.CreateForm(TFSplash, FSplash);
  Sleep(OTempoQueVoceQuiser);
  FSplash.hide;
  FSplash.free;
  Application.Run;
end;

Link para o comentário
Compartilhar em outros sites

  • 0

Apenas complementando...

Mas .. o que voce quiz dizer com tirar ele da lista de forms autocriaveis? n intendi...

O código que o Thales e que você também deve ter implementado fica no corpo do Projeto (menu Project->View Source) e, neste caso, a resposta está na linha comentada pelo Thales:

  //não pode ter aqui o Application.CreateForm(TFSplash, FSplash);

Certo Thales?

Uma maneira é (no Delphi 7) acessando o menu principal, opção Project->Options, na guia Forms, listbox Auto-create forms; selecione o form que não deve ser criado automaticamente e clique no botão > (ao centro). Depois é só clicar em OK. Esta opção resultará na mesma coisa, apenas que você não edita manualmente o fonte do projeto - útil em outras aplicações.

[]s

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Aqui não deu certo.

Olha só

meu PRoject 1 está assim:

program Project1;

uses

Forms,

Unit1 in 'Unit1.pas' {Splash},

Unit2 in 'Unit2.pas' {FormPrincipal};

{$R *.res}

Begin

FSplash:=TFSplash.Create(Application);

FSplash.Show;

Application.Initialize;

Application.CreateForm(TFormPrincipal,FormPrincipal);

Sleep(1000);

FSplash.hide;

FSplash.free;

Application.Run;

end.

mas não deu certo

da um erro: [Error] Project1.dpr(18): Missing operator or semicolon

na primeira linha FSplash:=......

precisa por alguma coisa nas UNIT?

Valeu galera

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Pessoal

ainda estou travado nisso.. mas percebi uma coisa

Begin

Splash:=Splash.Create(Application);

Splash.Show;

Application.Initialize;

Splash.hide;

Splash.free;

Application.Run;

colokando dessa forma, sem os T ( dos TForm),

ele executou o programa.. deu um erro, mas executou

alguma explicaçao?

Link para o comentário
Compartilhar em outros sites

  • 0

A explicação para o erro que ocorre quando você tira os T's é que você está chamando um procedimento de classe(construtor) de uma instancia que ainda não foi criada, portanto irá se fazer derreferencia de ponteiro não atribuído.

Agora, se depois que você adicionou Windows em uses continuar dando aquele erro, aí não existe explicação possível.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Thales

eu adicionei o seguinte:

program Project2;

uses

Forms,

Unit1 in 'Unit1.pas' {Form1},

Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin

form2:=tform2.create(application);

form2.show;

form2.update;

form2.hide;

form2.free;

Application.CreateForm(TForm1, Form1);

Application.CreateForm(TForm2, Form2);

Application.Run;

end.

agora funciona beleza, ele aparece rapidamente o form2 ( no caso seria meu splash), fecha e abre o form 1(principal)

PERFEITOO!!!!!!

só que o Form2 está aparecendo muito rapido, o que eu poderia fazer para deeixar um delay um pouco mais demorado?

valeu!!!!

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

**** implementando..

o aparece u form2 RAPIDO MESMMMMMOO cerca de uns 50milisegundos .=/ é aquele update que faz akilo?...

tentei adicionar um Sleep(1000); ali no project deu erro na linha...

tentei um timer no form2 tambem, mas ficou lento igual antes...

obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

program Project2;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
form2:=tform2.create(application);
form2.show;
form2.update;
form2.hide;
form2.free;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
Que isso muleque? Cadê o Application.Initialize? E os Application.CreateForm's devem ficar entre o Show ou Update do Splash e o Hide/Free do Splash. Senão não teria sentido, o Splash é justamente para aparecer enquanto a aplicação está inicializando (Application.Initialize). E você tá criando o Form2 denovo com Application.CreateForm. Não pode. E só caso você não tenha entendido, se o nome do seu Splash é Form2 então não se deve escrever FSplash e sim Form2. Ok? Vai ver esse era o erro, você esqueceu de renomear o Form2 para FSplash. Tente isso->
program Project2;

uses
  Forms, Windows,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  form2:=tform2.create(application);
  form2.show;
  form2.update;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Sleep(3000);
  form2.hide;
  form2.free;
  Application.Run;
end.

Desse jeito tem que funcionar.

Nunca pensei que fazer um Splash pudesse dar tanto problema.:lol:

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Valeu pela ajuda galera!!

Consegui já!

de outra maneira olhem só

program PROG;

uses

Forms,

Sysutils,

Unit1 in 'Unit1.pas' {Form1},

Unit2 in 'Unit2.pas' {Form2};

Var

Tempo_Exibicao : TDateTime;

{$R *.res}

begin

Form2 := TForm2.Create(nil);

Form2.Show;

Form2.Update;

Tempo_Exibicao := Time + StrToTime('00:00:02');

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Repeat Until Time > Tempo_Exibicao;

Form2.Free;

Application.Run;

end.

deu certo! agradeço pela ajuda brigadao pessoal!

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu pela ajuda galera!!

Consegui já!

de outra maneira olhem só

program PROG;

uses

Forms,

Sysutils,

Unit1 in 'Unit1.pas' {Form1},

Unit2 in 'Unit2.pas' {Form2};

Var

Tempo_Exibicao : TDateTime;

{$R *.res}

begin

Form2 := TForm2.Create(nil);

Form2.Show;

Form2.Update;

Tempo_Exibicao := Time + StrToTime('00:00:02');

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Repeat Until Time > Tempo_Exibicao;

Form2.Free;

Application.Run;

end.

deu certo! agradeço pela ajuda brigadao pessoal!

:blink:

Ok,

Como diz um ditado:

Pra kê simplificar se dá pra complicar! :rolleyes: :P

brincadeirinha..., o importante é seu problema resolvido.

Abs. Progr'amador. B)

Link para o comentário
Compartilhar em outros sites

  • 0

Impressionante. Realmente não entendí qual era o problema dele com o meu código. :wacko: A minha vida toda eu fiz isso e sempre funcionou. :o :huh: :mellow:

Tem que acrescentar um smilie chorando aqui.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...