Jhonatas araujo Postado Março 20, 2008 Denunciar Share Postado Março 20, 2008 Como Manipular/Dominar tempo(s) em Delphi... /Ou seja ex:Depois de x segundos fazer y AçãoObs: já tentei Utilizar Sleep(x); Mais não é isso que estou querendo...e se possivel, fazer essa ação sem o componente TTimer ...Vlw. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Março 20, 2008 Denunciar Share Postado Março 20, 2008 Como Manipular/Dominar tempo(s) em Delphi... /Ou seja ex:Depois de x segundos fazer y AçãoObs: 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonatas araujo Postado Março 20, 2008 Autor Denunciar Share Postado Março 20, 2008 (editado) 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 Março 20, 2008 por Jhonatas araujo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Março 24, 2008 Denunciar Share Postado Março 24, 2008 OpaAcredito que não gostou do Sleep porque ele congela o programa certo?Tente esteprocedure Delay(dwMilliseconds: Longint); var iStart, iStop: DWORD; begin iStart := GetTickCount; repeat iStop := GetTickCount; Application.ProcessMessages; Sleep(1); until (iStop - iStart) >= dwMilliseconds; end;Ai voce fazDelay(x);abraco Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Março 25, 2008 Denunciar Share Postado Março 25, 2008 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 milisegundosComo 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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonatas araujo Postado Março 27, 2008 Autor Denunciar Share Postado Março 27, 2008 (editado) Vlww ae Churc, Denis ...Tudo {Resolvido}...ChurcCara 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 Março 27, 2008 por Jhonatas araujo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Março 27, 2008 Denunciar Share Postado Março 27, 2008 Opaentão, uma breve explicacao seria mais ou menos assimGetTickCount retorna em milisegundos o tempo que se passou desde a hora em que o sistema foi iniciado, ouseja, é como se fosse um Timer só que do próprio Windows, a idéia original com certeza não era ser um Timer mas simsaber 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 heheabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonatas araujo Postado Março 27, 2008 Autor Denunciar Share Postado Março 27, 2008 haha...Pode CreEe mano!!!Vlw mesmo "Sem Palavras" ...Abraço// Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Jhonatas araujo
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.
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
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.