Jump to content

Cronometro em Delphi.


Hercles

Recommended Posts

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

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.

Link to comment
Share on other sites

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

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.

Link to comment
Share on other sites

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

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.

Link to comment
Share on other sites

é 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 ...

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

  • 2 months later...

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

😞 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.

Link to comment
Share on other sites

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) .... ?

Link to comment
Share on other sites

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.

Link to comment
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.