Fórum Delphi XE2 + SplashScreen #409702
23/11/2011
0
Boa noite, estou tentando fazer um aplicativo em Delphi utilizando o framework Fireworks. Eu gostaria que a janela de splash aparecesse, em seguida uma barra de progresso começasse a ser executada e quando chegasse a 100% abrisse o aplicativo sozinho. Tenho este source:
Neste caso a barra de progresso só incrementa se eu mexer o mouse. Alguém têm alguma idéia de como fazer esta implementação? Desde já agradeço! Abraão
unit SplashScreen;
interface
uses
Windows, Messages,
Principal,
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Objects, FMX.Effects,
FMX.Layouts, FMX.Memo, FMX.Grid, FMX.Ani;
type
TFmSplashScreen = class(TForm)
StyleBook1: TStyleBook;
RoundRect1: TRoundRect;
ShadowEffect1: TShadowEffect;
Image1: TImage;
BitmapAnimation1: TBitmapAnimation;
Label1: TLabel;
ShadowEffect2: TShadowEffect;
Label2: TLabel;
ShadowEffect3: TShadowEffect;
ProgressBar1: TProgressBar;
ShadowEffect5: TShadowEffect;
progresso: TLabel;
ShadowEffect4: TShadowEffect;
procedure iniciarBarraProgresso;
procedure FormCreate(Sender: TObject);
private
bFirstInit: Boolean;
procedure IdleHandler(Sender: TObject; var Done: Boolean);
public
{ Public declarations }
end;
var
FmSplashScreen: TFmSplashScreen;
implementation
{$R *.fmx}
procedure TFmSplashScreen.FormCreate(Sender: TObject);
begin
bFirstInit := True;
Application.OnIdle := IdleHandler;
end;
procedure TFmSplashScreen.IdleHandler(Sender: TObject; var Done: Boolean);
begin
if bFirstInit then begin
bFirstInit := False;
iniciarBarraProgresso;
FmSplashScreen.Visible := False;
try
TFmPrincipal.Create(Self);
except on E: Exception do
ShowMessage((*) ERRO: + E.Message);
end;
end;
end;
procedure TFmSplashScreen.iniciarBarraProgresso;
var
i : Integer;
begin
ProgressBar1.Value := 0;
for i := 1 to 41 do begin
if (i Mod 10)=0 then begin
ProgressBar1.Value := ProgressBar1.Value + i;
Application.ProcessMessages;
Sleep(500);
end;
end;
end;
end.
Neste caso a barra de progresso só incrementa se eu mexer o mouse. Alguém têm alguma idéia de como fazer esta implementação? Desde já agradeço! Abraão
Abraão Monteiro
Curtir tópico
+ 0
Responder
Posts
28/03/2020
Mário Reis
Boa noite, estou tentando fazer um aplicativo em Delphi utilizando o framework Fireworks. Eu gostaria que a janela de splash aparecesse, em seguida uma barra de progresso começasse a ser executada e quando chegasse a 100% abrisse o aplicativo sozinho. Tenho este source:
Neste caso a barra de progresso só incrementa se eu mexer o mouse. Alguém têm alguma idéia de como fazer esta implementação? Desde já agradeço! Abraão
unit SplashScreen;
interface
uses
Windows, Messages,
Principal,
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Objects, FMX.Effects,
FMX.Layouts, FMX.Memo, FMX.Grid, FMX.Ani;
type
TFmSplashScreen = class(TForm)
StyleBook1: TStyleBook;
RoundRect1: TRoundRect;
ShadowEffect1: TShadowEffect;
Image1: TImage;
BitmapAnimation1: TBitmapAnimation;
Label1: TLabel;
ShadowEffect2: TShadowEffect;
Label2: TLabel;
ShadowEffect3: TShadowEffect;
ProgressBar1: TProgressBar;
ShadowEffect5: TShadowEffect;
progresso: TLabel;
ShadowEffect4: TShadowEffect;
procedure iniciarBarraProgresso;
procedure FormCreate(Sender: TObject);
private
bFirstInit: Boolean;
procedure IdleHandler(Sender: TObject; var Done: Boolean);
public
{ Public declarations }
end;
var
FmSplashScreen: TFmSplashScreen;
implementation
{$R *.fmx}
procedure TFmSplashScreen.FormCreate(Sender: TObject);
begin
bFirstInit := True;
Application.OnIdle := IdleHandler;
end;
procedure TFmSplashScreen.IdleHandler(Sender: TObject; var Done: Boolean);
begin
if bFirstInit then begin
bFirstInit := False;
iniciarBarraProgresso;
FmSplashScreen.Visible := False;
try
TFmPrincipal.Create(Self);
except on E: Exception do
ShowMessage((*) ERRO: + E.Message);
end;
end;
end;
procedure TFmSplashScreen.iniciarBarraProgresso;
var
i : Integer;
begin
ProgressBar1.Value := 0;
for i := 1 to 41 do begin
if (i Mod 10)=0 then begin
ProgressBar1.Value := ProgressBar1.Value + i;
Application.ProcessMessages;
Sleep(500);
end;
end;
end;
end.
Neste caso a barra de progresso só incrementa se eu mexer o mouse. Alguém têm alguma idéia de como fazer esta implementação? Desde já agradeço! Abraão
Responder
Gostei + 0
28/03/2020
Mário Reis
Sobre este assunto IdleHandler(Sender: TObject; var Done: Boolean) como não uso nenhuma Frame Work não sei se vou poder ajudar, lamento.
No entanto podemos tentar, desde logo o parãmetro Done está sempre a TRUE!? Não percebi afinal
procedure TFrmCxa.IdleHandler(Sender: TObject; var Done: Boolean);
begin
//se Done then Entra Se Falso ÑEntra mais
if bFirstInit then // Aqui a ideia era usar o Done=False; e fazer com que rotina não voltar aqui mais em vez da minha variavel
begin
try
// E, não entra mais aqui
bFirstInit:=False ; // Done:=False mas ai ele volta de novo com True!? não entendi mto bem para que o Done
if FrmCxa<>Nil then
FrmCxa.edt5Click(Sender);
except
// Done:=False;
on E : Exception do
ShowMessage(E.ClassName+' Ocorreu um Erro: : '+E.Message);
end;
end;
end;
Se compreendeu a minha questão talvez possamos explorara outra abordagem? Obrigado
No entanto podemos tentar, desde logo o parãmetro Done está sempre a TRUE!? Não percebi afinal
procedure TFrmCxa.IdleHandler(Sender: TObject; var Done: Boolean);
begin
//se Done then Entra Se Falso ÑEntra mais
if bFirstInit then // Aqui a ideia era usar o Done=False; e fazer com que rotina não voltar aqui mais em vez da minha variavel
begin
try
// E, não entra mais aqui
bFirstInit:=False ; // Done:=False mas ai ele volta de novo com True!? não entendi mto bem para que o Done
if FrmCxa<>Nil then
FrmCxa.edt5Click(Sender);
except
// Done:=False;
on E : Exception do
ShowMessage(E.ClassName+' Ocorreu um Erro: : '+E.Message);
end;
end;
end;
Se compreendeu a minha questão talvez possamos explorara outra abordagem? Obrigado
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)