Contagem Regressiva

Delphi

26/07/2006

Galera, preciso da ajuda de vocês mais uma vez...

Como criar uma contagem regressiva com um timer pra quando acabar 30 minutos ele executar o comando desejado?


Delphitotal

Delphitotal

Curtidas 0

Respostas

Rodc

Rodc

26/07/2006

Não seria usando um TTimer com o intervalo de 30000 (30min)?


GOSTEI 0
Delphitotal

Delphitotal

26/07/2006

sim isso eu sei .. mais como fazer a contagem regressiva?
eu não sei :(


GOSTEI 0
Delphitotal

Delphitotal

26/07/2006

acho que não entenderam ...

tem um StatusBar que recebe o seguinte:

Tempo: 00:00:00

dai quero fazer uma contagem regressiva pra aparecer em tempo real no StatusBar no ´00:00:00´.

Se alguem puder ajudar..


GOSTEI 0
Rodc

Rodc

26/07/2006

Coloca um TTimer com intervalo de 1000 (1seg).
Cria uma variável global do tipo TTime que deve iniciar com o horário atual mais 30 minutos.
var_horafinal = Time() + StrToTime("00:30");

No evento do Timer coloca:
Label1->Caption = TimeToStr(var_horafinal - Time());
if (Time() > var_horafinal) then
begin
    Timer1.Enabled = false;
    ShowMessage(´Acabou o tempo´);
end;



GOSTEI 0
Delphitotal

Delphitotal

26/07/2006

Pô rodc vlw irmão ... estou a dias atras disso .

Vlw mesmo!!


GOSTEI 0
Delphitotal

Delphitotal

26/07/2006

Tenho uma duvida .. com o mesmo código como eu poderia fazer com 80 minutos?


GOSTEI 0
Rodc

Rodc

26/07/2006

80 minutos é 1 hora e 20 minutos.

No lugar do ´00:30´ você coloca ´01:20´;
:wink:


GOSTEI 0
Delphitotal

Delphitotal

26/07/2006

tpo eu sei .. mais assim ele mostra 1 hora e 20 minutos ...
não teria como mostra tpo

79:59
79:58
79:57
79:56

enfim... da pra fazer só em minutos?


GOSTEI 0
Rodc

Rodc

26/07/2006

Declare as variáveis hor, min, seg e mseg como inteiro.
DecodeTime(var_horafinal - Time(), hor, min, seg, mseg);
min := min + hor * 60;
if (seg < 10) then
    Label1.Caption = IntToStr(min) + ":0" + IntToStr(seg)
else
    Label1.Caption = IntToStr(min) + ":" + IntToStr(seg);

Não testei, mas acho que vai funcionar.


GOSTEI 0
Delphitotal

Delphitotal

26/07/2006

cara não consegui fazer esse código funcionar .. fiz aqui mais deu varios numeros muito elevados .. :(


GOSTEI 0
Rodc

Rodc

26/07/2006

As variáveis passadas para o DecodeTime devem ser do tipo WORD, não do tipo inteiro. Testei aqui e isto resolveu.


GOSTEI 0
Delphitotal

Delphitotal

26/07/2006

rodc funcionou!

vlw!! por tudo ..


GOSTEI 0
Micheus

Micheus

26/07/2006

[b:57e382933f]rodc[/b:57e382933f], caso haja a possibilidade deste tempo ocorrer numa mudança de dia, tipo das 23:40 às 00:10hs, acredito que não funcionará.
Para esta situação sugiro que vc faça algo como:
var_horafinal = Now() + StrToTime("00:30");
Onde var_horafinal seria declarada como TDateTime.

var
  DifHora :TDateTime;
begin
  DifHora := (var_horafinal -Now) *24; // obtém diferença em horas
  Label1.Caption := FormatFloat(´#00:´, DifHora)+FormatFloat(´00´, Frac(DifHora) *60);
  if (DifHora <= 0) then
  begin
    Timer1.Enabled = false;
    ShowMessage(´Acabou o tempo´);
  end;
end;



GOSTEI 0
Delphitotal

Delphitotal

26/07/2006

micheus, vlw pelo código ... mais seu código não mostra os segundos ..
teria como vc arrumar isso?


GOSTEI 0
Micheus

Micheus

26/07/2006

[b:cda9572f02]delphitotal[/b:cda9572f02], por favor corrija para a seguinte forma
var
  DifHora :TDateTime;
begin
  DifHora := (var_horafinal -Now) *24; // obtém diferença em horas
  Label1.Caption := FormatFloat(´#00:´, Int(DifHora)) +FormatDateTime(´nn:ss´, Frac(DifHora)/24);
  if (DifHora <= 0) then
  begin
    Timer1.Enabled = false;
    ShowMessage(´Acabou o tempo´);
  end;
end;
O código exemplo anterior, também tinha um ´bug´. Havia faltado o [i:cda9572f02]Int[/i:cda9572f02] na parte que formata a hora, o que resultava em arredondamento - indesejado.


GOSTEI 0
POSTAR