Esse artigo faz parte da revista Clube Delphi edição 35. Clique aqui para ler todos os artigos desta edição

 

Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML. 

 

FernandoVM Responde

Soluções para dúvidas dos leitores

Nesta coluna, nosso escritor assíduo Fernando Vasconcelos Mendes – o "FernandoVM" – tira dúvidas técnicas dos leitores apresentando soluções completas. Aproveite este novo espaço, enviando suas dúvidas para o autor.

 

?Estou precisando muito de um componente do tipo "cronômetro" e não consigo encontrar na internet. Agradeço indicações.

Wilson

São José do Rio Preto - SP

 

Também procurei um componente do tipo nos sites que costumo visitar, mas não encontrei. Então vamos criar um. Iremos utilizar uma abordagem simples para criar um componente que atenda às suas necessidades. Não ficou claro para mim se você estava precisando de um componente visual ou não-visual. Assim escolhi o "pior caso" – implementaremos um visual. Veja nosso componente já em ação na Figura 1.

Figura 1. Componente TCronoLabel em funcionamento

O componente será um descendente direto de TLabel e usará internamente um TTimer para mostrar a progressão do tempo. Vamos comentar os trechos principais da unit do componente mostrada na Listagem 1.

No construtor da classe TCronoLabel, criamos e configuramos nosso timer. Iremos usar como intervalo a duração de um milissegundo. O método Iniciar guarda a data/hora atual no campo interno FDtIni e habilita o timer. O evento OnTimer atualiza constantemente o Caption da Label com o valor de Now menos FDtIni, representando assim o tempo decorrido desde o momento inicial. O método Parar apenas desabilita o timer. Mas note que ambos os métodos descritos aqui não estão disponíveis para chamadas diretas. Eles serão chamados internamente quando é configurada a propriedade Ativo.

É importante registrar que seria mais aconselhável não envolver a interface gráfica no processo, pois o tempo empregado no redesenho constante do componente pode diminuir a precisão. Também seria mais interessante o uso de uma thread separada para a medição, diminuindo também a influência da thread principal da aplicação na contagem do tempo. Mas isso, claro, deixo para você pesquisar e experimentar. Fique à vontade para nos enviar dúvidas sobre implementações alternativas.

 

Listagem 1. CronoLabel.pas

 

unit CronoLabel;

 

interface

...

Quer ler esse conteúdo completo? Tenha acesso completo