Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Manipulação de Tempo


Jhonatas araujo

Pergunta

7 respostass a esta questão

Posts Recomendados

  • 0
Como Manipular/Dominar tempo(s) em Delphi... /

Ou seja ex:

Depois de x segundos fazer y Ação

Obs: já tentei Utilizar Sleep(x); Mais não é isso que estou querendo...

e se possivel, fazer essa ação sem o componente TTimer ...

Vlw.

O TTimer captura, via windows, a interrupção 8 que controla o tempo (Data/Hora). É o melhor mecanismo para você trabalhar com rotinas que usam o tempo. Não aconselho utilizar outros tipos de rotinas para realizar isso, pois elas não responderão com a precisão esperada.

Link para o comentário
Compartilhar em outros sites

  • 0

Vlw Denis...

beleza, ^_^

Como Utilizar {pode ser com TTimer então}

if Edit1.Text = 'Teste' then begin
Edit1.Font.Color := $00000055;

if Edit1.Font.Color = $00000055 then
{Aqui Adicionar 3 Segundos para Mudar para:}
Edit1.Font.Color := $007A7A7A;
end
else
Edit1.Font.Color := clBlack;

Vlw...

Editado por Jhonatas araujo
Link para o comentário
Compartilhar em outros sites

  • 0

Opa

Acredito que não gostou do Sleep porque ele congela o programa certo?

Tente este

procedure Delay(dwMilliseconds: Longint);
var
  iStart, iStop: DWORD;
begin
  iStart := GetTickCount;
  repeat
    iStop := GetTickCount;
    Application.ProcessMessages;
    Sleep(1);
  until (iStop - iStart) >= dwMilliseconds;
end;

Ai voce faz

Delay(x);

abraco

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'Jhonatas araujo'!

coloque sua rotina dentro do evento OnTime do TTime.

A variação por segundo é de 1000 milisegundos. Então, 3 segundos = 3000 milisegundos

Como Utilizar {pode ser com TTimer então}

//Sendo x uma variavel integer global a este form

procedure TForm1.Form1Create(Sender: TObject);
begin
   Edit1.Font.Color := $00000055;
   x := 0;
end;

procedure TForm1.Timer1OnTime(Sender: TObject);
begin
   if x = 3000 then // aos 3 segundos muda de cor
      Edit1.Font.Color := $007A7A7A;
   if x = 6000 then
   begin // aos 6 segundos muda de cor novamente e zera o contador onde tudo se repete.
      Edit1.Font.Color := $00000055;
      x := 0;
   end;
   inc(x);
end;

Link para o comentário
Compartilhar em outros sites

  • 0

Vlww ae Churc, Denis ...

Tudo {Resolvido}...

Churc

Cara se for possivel e não ser muito encomodo... :huh:

você poderia me dar uma breve explicação de como funciona seu procedure Delay(dwMilliseconds: Longint);

Por que pegar o código pronto é uma coisa né?... Mais realmente entender oque está fazendo é outra...

Ele Funcionou Perfeitamente...

e la tem algo de sleep(); e quando eu utilizava sleep(); como você mencionou,

Acredito que não gostou do Sleep porque ele congela o programa certo?

Sim...

Não éra oque eu queria, mais esse seu procedimento ficou muito bom!!! funcionou perfect...

Vlw...

Editado por Jhonatas araujo
Link para o comentário
Compartilhar em outros sites

  • 0

Opa

então, uma breve explicacao seria mais ou menos assim

GetTickCount retorna em milisegundos o tempo que se passou desde a hora em que o sistema foi iniciado, ou

seja, é como se fosse um Timer só que do próprio Windows, a idéia original com certeza não era ser um Timer mas sim

saber a quanto tempo o Windows foi iniciado, porém como retorna em milisegundos, podemos usar para controles de tempo,

como no caso abaixo...

procedure Delay(dwMilliseconds: Longint);
var
  iStart, iStop: DWORD;
begin
(* iStart pega a quanto tempo o sistema foi iniciado, vem em milisegundos, mas se fossemos transformar para minutos, horas
    também é possível, sairia em minutos por "exemplo" 00:10:10 o que seria, 10 minutos e 10 segundos *)
  iStart := GetTickCount;
  repeat
(* Com o repeat, ele fica repetindo o seguinte...
   pega em iStop quanto tempo se passou atualmente e... *)
    iStop := GetTickCount;
(* Application.ProcessMessages faz com que o programa não fique travado, te passo um teste mais abaixo... *)
    Application.ProcessMessages;
(* Sleep(1) serve apenas para não consumir o uso de 100% do processador, o que corre o risco de travar o sistema,
    se voce possue Windows XP, no TaskManager (Ctrl + Alt + Del) voce ve cada processo e tem uma coluna que se chama CPU
    nela é o tanto que determinado processo está consumindo do processador, então esse Sleep(1) é apenas para que este
    processo não consuma 100% do uso do processador *)
    Sleep(1);
(* Until, ou seja, até que a hora atual menos a hora que começou seja maior ou igual ao tempo desejado
    o que seria mais ou menos assim

    iStart = 00:10:00
    cada repeat vai fazer com que o iStop pegue 1 milesimo de segundo
    se voce colocou tipo Delay(10000) ou seja, 10 Segundos, então esta funcao vai ficar se repetindo até que
    iStop que é a tempo atual menos a hora que começou seja maior ou igual ao tempo desejado, exemplo
    00:10:10 - 00:10:00 = 10 ou seja, os 10 segundos que queriamos e então obtemos o tempo desejado e a
    função para... a única diferença do Sleep para esta função é o Application.ProcessMessages literalmente *)
  until (iStop - iStart) >= dwMilliseconds;
end;
bem confuso né mas espero que de pra entender algo rsr Pra voce entender sobre o application.processmessages que faz o programa não travar faça o seguinte teste Coloque em um Form um botao, um label, e no código do botão faça
var
  i: Integer;
begin
  for i := 0 to 10000 do
  Label1.Caption := InttoStr(i);
end;
Rode o programa e clique no botão, o Label não vai mostrar a contagem de 0 até 10.000 o programa vai ficar congelado Agora coloque o Application.Processmessages e para não consumir 100% do uso do processador o sleep(1);
var
  i: Integer;
begin
  for i := 0 to 10000 do
  begin
    Label1.Caption := InttoStr(i);
    Application.ProcessMessages;
    Sleep(1);
  end;
end;

E faça o teste ;)

Vale mencionar que esta função não é de minha autoria, já possuia ela faz um bom tempo... é uma mão na roda hehe

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...