Jump to content
Hercles

Cronometro em Delphi.

Recommended Posts

Hercles

Caros, tenho este código mas ele não satisfaz porque eu queria que ele começasse em 00:00:00:000 e fosse minuto por minuto ele esta pegando a hora atual... alguém pode me ajudar?

procedure TForm1.Timer1Timer(Sender: TObject);
var
Hora, Min, Sec, MSec : Word;
begin
DecodeTime(Now, Hora, Min, Sec, MSec);
Label1.Caption := FormatDateTime('hh:mm:ss',now)+ ':'+FormatFloat('000',MSec);
end;
procedure TForm1.IniciarClick(Sender: TObject);
begin
 Timer1.Enabled := True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
 Timer1.Enabled := False;
end;
end.

Share this post


Link to post
Share on other sites
nunopicado

Estás a usar o Now, logo ele usa a hora actual.

Para não teres de fazer mais contas, subtrai a hora actual ao teu cronómetro:

1º Esqueces as variáveis Word

2º Arranja uma variável global (ou melhor ainda, uma constante tipada) que te grave a hora inicial

3º Dentro do timer irás escrever a hora actual menos a hora inicial

a) A hora inicial ser reposta sempre que o contador for posto a 0

Algo assim

var
  HoraInicial:TDateTime;

procedure TForm1.IniciarClick(Sender: TObject);
begin
 HoraInicial := Now;
 Timer1.Enabled := True;
end;

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


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Hercles

fiz deu certo, vou pensar como mudar... pois o cronometro tem que esta zerado e começar a contar quando eu clicar no botão vou almoçar agora....

Share this post


Link to post
Share on other sites
Hercles

Pra resolver este problema fiz um seguinte: Criei uma variável global chamada comecar do tipo integer. Depois no procedure

Tfrmrelogio.FormCreate(Sender: TObject);
begin
  HoraInicial := Now;
//trecho do codigo

criei esta condição para o botão vou agora:

procedure Tfrmrelogio.btnagoraClick(Sender: TObject);
begin
comecar:=1;
HoraInicial := Now;
Timer1.Enabled := True;
end;

Para o relógio estas condições:

procedure Tfrmrelogio.Timer1Timer(Sender: TObject);
begin
 txtpausa.text :='00:00:00';
 if comecar=1 then
 txtpausa.text := FormatDateTime('hh:mm:ss',Now-HoraInicial);
end;

criei este código para o botão zerar:

procedure Tfrmrelogio.btnzerarClick(Sender: TObject);
begin
comecar:=0;
HoraInicial := Now;
Timer1.Enabled := True;
end;

Só não consegui ainda fazer com que no evento do espetador acontecesse além do formulário ficar maximizado, queria que ele ficasse como programa aberto, ou seja, se tivesse outros programas aberto (na barra de tarefa ou outro sendo usado) ele apareceria na frente dos outros. Pois o que acontece é que ele é maximizado mas o usuário nem sabe pois esta com outro programa aberto....

tentei usar o frmrelogio.hide() (único formulário) mas não da certo... da erro... o programa some da barra de tarefa e pra fechar só deligando o pc :(

Edited by Hercles

Share this post


Link to post
Share on other sites
nunopicado

Tens de usar o BringToFront da aplicação, e não da form:

Application.BringToFront;


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
nunopicado

Onde é que meteste?


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Hercles

nesta procedure

procedure Tfrmrelogio.tmrrelogioTimer(Sender: TObject);
begin
 txtrelogio1.text:=formatdatetime('hh:mm:ss', now);
 if (txtrelogio1.text=txthorario1) or
 (txtrelogio1.text=txthorario2) or
 (txtrelogio1.text=txthorario3)then
 begin
Application.BringToFront;
windowstate := wsmaximized;
caption := 'Despertador Ativado';
tmranimacao.enabled := true;
end;
end;  

Edited by Hercles

Share this post


Link to post
Share on other sites
nunopicado

E ele chega a entrar no bloco onde tens o BringToFront?

Aquela condição do IF parece-me um bocado estranha.

Comparares data/hora com o igual é muito perigoso, porque basta passar 1 segundo e já não apanha.

Deves sempre compara data/hora com os sinais >= ou <=, conforme o caso.

E de preferencia, compara-os no formato TDateTime.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Hercles

é que são três pausas que o funcionário vai ter, tem que ser "igual" pois o funcionário vai ter que sair no determinado horário..... o programa da um beep pra avisar mas queria que além disso ela abrisse e interrompesse o que o operador estivesse fazendo no computador. abrindo na frente de todos os programas que o operador tivesse utilizando ...

Share this post


Link to post
Share on other sites
nunopicado

Experimenta então tirar os segundos do teste, ficando apenas horas e minutos. No timer, mete no interval o valor 45000 para que o teste seja feito a cada 45 segundos. Assim tens a certeza que o contador passa por todos os minutos para que o teste não falhe.

Em alternativa, estabeleces uma variável que te indique o turno actual, e no if usas o >= para apenas um horário, dependendo do turno actual.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Hercles

Caros, existe alguma forma de um programa feito em Lazarus/ Delphi execultar tarefas do tipo: Quado o horário x acontecer, por exemplo, abra o real midia play a musica x - ou seja - fazer procedimentos que são de outros programas.....

Share this post


Link to post
Share on other sites
nunopicado

Caros, existe alguma forma de um programa feito em Lazarus/ Delphi execultar tarefas do tipo: Quado o horário x acontecer, por exemplo, abra o real midia play a musica x - ou seja - fazer procedimentos que são de outros programas.....

Sim, sem problemas...

Um TTimer vai verificando a hora, por exemplo, de minuto a minuto, e quando essa hora for atingida, manda executar um programa externo...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Hercles

Certo. Mas seria tipo abrir o programa espeficico e usar os comando de botões deste outro programa. É possivel programar neste nivel?

=> Abra programa x , va no botão y e escolha a opção z (sendo que este outro programa ja foi desenvolvido, não é mais possivel alterar nada neste outro programa).

Share this post


Link to post
Share on other sites
nunopicado

Mas queres que o teu programa controle o outro?

Isso já são outros quinhentos... Possível é, mas digo-te já que não tenho ideia de como...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Hercles
:( acho que a unica maneira então é utilizar do Banco de dados do outro programa e fazer alterações direto neste banco :(

Share this post


Link to post
Share on other sites
nunopicado

:( acho que a unica maneira então é utilizar do Banco de dados do outro programa e fazer alterações direto neste banco :(

Sempre é mais simples, embora tenhas de ter cuidados redobrados para não estoirar a DB...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Hercles

o que é "estoirar a DB" ?

ah... Curiosidade e como faço pra abrir um programa qualquer apartir de um botão do formulário...? acredito que apartir dai, programar pra abrir em um determinado horario é só mudar o componente (TTimer) ..... Melhor criar outro foro, ne?

outra coisa - Não é isso que quero fazer neste momento, mas é outra curiosidade que tenho... É possivel fazer um programa em delphi que ligue o pc em um determinado horario e depois ligue a web cam até um certo horário (liga pra gravar) .... ?

Share this post


Link to post
Share on other sites
nunopicado

Estoirar a DB é mexeres nos campos errados, e a aplicação original depois vai à procura dos dados e baralha-se...

Sempre que uses uma DB que não é a tua, tens de ter certeza absoluta de que o que fazes é compatível com o que foi pensado para ela.

Imagina por exemplo, mexes num campo, que só por acaso é usado para ligação a outra tabela...

Nunca mais a DB vai ao sítio!

Há várias maneiras de executar um programa, como o ShellExecute, o TProcess, etc.

Pesquisa sobre esses.

Em Lazarus, talvez o TProcess seja o melhor para ti.

Ligar o PC não consegues... :) Se ele está desligado, como queres que o programa esteja a correr para o ligar?

Iniciar a webcam, estando o PC ligado, sim, é possível, mas depende do software da camara também.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Hercles

Simm... eu digo o computador estando em "stand by " , "suspenso" , "hibernado"..... Mas ai poderia até abrir o programa da webcam mas entraria no dilema de como ia "clicar" no play para começar a grava (automaticamente) kkkkkkkkkk

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.