Jump to content
Fórum Script Brasil
  • 0

Tela De "abertura" Como Fazer?


Guest - Eduardo -
 Share

Question

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 to comment
Share on other sites

16 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.9k
    • Total Posts
      648.8k
×
×
  • Create New...