GARANTIR DESCONTO

Fórum Contagem Regressiva #326239

26/07/2006

0

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

Responder

Posts

27/07/2006

Rodc

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


Responder

Gostei + 0

27/07/2006

Delphitotal

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


Responder

Gostei + 0

27/07/2006

Delphitotal

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


Responder

Gostei + 0

27/07/2006

Rodc

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;



Responder

Gostei + 0

27/07/2006

Delphitotal

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

Vlw mesmo!!


Responder

Gostei + 0

27/07/2006

Delphitotal

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


Responder

Gostei + 0

27/07/2006

Rodc

80 minutos é 1 hora e 20 minutos.

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


Responder

Gostei + 0

27/07/2006

Delphitotal

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?


Responder

Gostei + 0

27/07/2006

Rodc

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.


Responder

Gostei + 0

27/07/2006

Delphitotal

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


Responder

Gostei + 0

27/07/2006

Rodc

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


Responder

Gostei + 0

27/07/2006

Delphitotal

rodc funcionou!

vlw!! por tudo ..


Responder

Gostei + 0

28/07/2006

Micheus

[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;



Responder

Gostei + 0

28/11/2006

Delphitotal

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


Responder

Gostei + 0

02/12/2006

Micheus

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar