Jump to content
Fórum Script Brasil
  • 0

Contador de Tempo


Eder

Question

Ola...tenho um relatorio que é lento a geração...gera em torno de 3 a 5 minutos....eu tenho na tela..apenas um label informando.

"Aguarde Geração do Relatorio"

mas eu queria colocar um contador pro usuario acompanhar o tempo de processamento..

tenho este aqui ...que funciona show...porem ele congela(visualização)...quando o relatorio começa a gerado...

var
  Form1: TForm1;
  tempoInicial : TDatetime;

implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption  := FormatDateTime('hh:nn:ss',TempoInicial - Now);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TempoInicial := now;
Timer1.Enabled := true;
end;

na verdade ele não congela..continua contando mas pro usuario fica parado o label.

grato

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Opa

Faz assim

Label1.Caption := FormatDateTime('hh:nn:ss',TempoInicial - Now);

Label1.Refresh;

ou

Label1.Caption := FormatDateTime('hh:nn:ss',TempoInicial - Now);

Application.ProcessMessages;

Application.ProcessMessages é mais recomendável porque faz com que o Form seja atualizado também...

abraços

Link to comment
Share on other sites

  • 0
Label1.Caption := FormatDateTime('hh:nn:ss',TempoInicial - Now);

Label1.Refresh;

ou

Label1.Caption := FormatDateTime('hh:nn:ss',TempoInicial - Now);

Application.ProcessMessages;

Application.ProcessMessages é mais recomendável porque faz com que o Form seja atualizado também...

Ola..Churc.....beleza?

carinha não deu certo...... :(

Ele congela e não deixa atualizar o label.....

só depois que é gerado o relatorio e mostra o preview do quickreport(video) ai quando fecho o preview ai vejo que o label contou 45 segundos.....mas eu não vi contar..um por um(segundos)..nesta hora ele tava congelado...alias o form e o programa Congela... :(

só descongelando após o relatorio gerado.

Obs.: a base de dados paradox é de 120 Mb um arquivo grande com mais de 80.000 registros

Tens mais alguma dica pra resolver este probleminha?

Grato

Edited by Eder
Link to comment
Share on other sites

  • 0
Você possue o Código Fonte do QuickReport?

Se possuir, talvez de pra implementar algo no código fonte dele... porque acredito que tudo que a gente faça no código vai ser inútil quando der o Preview

R.: Shiiii....ferrou.

então deixa como esta mesmo.....

achei que era simples, mas já ficou complicado...hehehe

grato

:D

Link to comment
Share on other sites

  • 0
Ele congela e não deixa atualizar o label.....

só depois que é gerado o relatorio e mostra o preview do quickreport(video) ai quando fecho o preview ai vejo que o label contou 45 segundos.....mas eu não vi contar..um por um(segundos)..nesta hora ele tava congelado...alias o form e o programa Congela... :(

só descongelando após o relatorio gerado.

Eder, sem dúvida seria necessário dar margem ao processamento da tarefa de pintura do label, e isto deveria ser possível via chamada a Application.ProcessMessages conforme mencionou o Churc, mas parece que nem o seu timer está tendo chance de ser processado.

Sabendo que o QuickReport executa chamadas para eventos nas bandas enquanto está sendo processado, talvez você possa colocar a chamada Application.ProcessMessages em um evento BeforePrint de alguma banda no seu relatório. Talvez isto funcione. ;)

Obs.: a base de dados paradox é de 120 Mb um arquivo grande com mais de 80.000 registros
é uma base muito grande para tabelas Paradox. É hora de pensar em algo que seja um SGBD de verdade.

Abraços

Link to comment
Share on other sites

  • 0

Eder, sem dúvida seria necessário dar margem ao processamento da tarefa de pintura do label, e isto deveria ser possível via chamada a Application.ProcessMessages conforme mencionou o Churc, mas parece que nem o seu timer está tendo chance de ser processado.

Sabendo que o QuickReport executa chamadas para eventos nas bandas enquanto está sendo processado, talvez você possa colocar a chamada Application.ProcessMessages em um evento BeforePrint de alguma banda no seu relatório. Talvez isto funcione. ;)

Verdade Micheus, é uma boa sim nem tinha pensado nisso rs

Obs.: a base de dados paradox é de 120 Mb um arquivo grande com mais de 80.000 registros

é uma base muito grande para tabelas Paradox. É hora de pensar em algo que seja um SGBD de verdade.

Abraços

Com certeza, Paradox é pra coisa pequena no seu caso ai já parece ter passado disso...

Firebird é gratuito e uma ótima opção...

abraços

Link to comment
Share on other sites

  • 0

Pessoal...testei a sugestão do Micheus....

neste caso depende do tipo de relatorio

por exemplo se o filtro for de uma filial que tem pouco movimentação(poucos registros) ele até conta de 4 em 4 segundos...

mas se for uma filial com bastante movimentação, ai conta assim:

*Tempo de geração: 00:00:01
depois só quanto termina:
*Tempo de geração: 0:01:49

neste caso por ter muitos registros....não atualiza legal, só atualiza no inicio e no final do processamento.

quanto ao tamanho da tabela paradox...

bom....por enquanto vou me virando.....esta tabela só até fechar 2007, janeiro abro nova tabela 2008(Pra ficar facil a manipulação e pra não dar muito trabalho de manutenção)

mas concordo plenamente com vocês...tenho que começar a mexer com um SGBD de verdade como Menciona nosso colega Micheus.

Bom pessoal...é isto ai....

se tiver mais alguma ideia por favor ...

grato

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.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.5k
×
×
  • Create New...