PDA

Ver la Versión Completa : Contar Tiempo atrás


wolfran_hack
24-02-2016, 20:32:07
Tengo varios button que cada uno debe respetar un tiempo, por lo cual tengo algunos de 5 min a 60 min, la cuestión es como hago para contar el tiempo atrás, que arranque de 5 a 0.. y de 60 a 0 y luego haga una acción como activar el botón..

Alguna idea?

ecfisa
24-02-2016, 20:53:58
Hola.

Revisa los enlaces al pié de esta página.

Saludos :)

Casimiro Notevi
24-02-2016, 20:55:29
Mira los enlaces del final de página, abajo del todo.

Osorio
24-02-2016, 21:02:57
Un TTimer tal vez?

y cuando llega a cero se ejecuta el eveto ontimer para que haga "algo".

wolfran_hack
24-02-2016, 21:33:58
Probe con esos, http://clubdelphi.com/foros/showpost.php?p=331782&postcount=2 este en particular, me sirvió para uno solo, no para todos los botones.

ecfisa
24-02-2016, 22:43:21
Hola.

..., la cuestión es como hago para contar el tiempo atrás, que arranque de 5 a 0.. y de 60 a 0 y luego haga una acción como activar el botón.

Este ejemplo hace lo que solicitas, fijate si te sirve de guía:

unit uButtonTimer;

interface

uses Classes, StdCtrls, ExtCtrls;

type
TButton = class(StdCtrls.TButton)
private
FLapso : Integer;
FTimer : TTimer;
procedure FTimerTimer(Sender: TObject);
function GetLapso: Integer;
procedure SetLapso(const Value: Integer);
public
constructor Create(AOwner: TComponent); override;
property Timer: TTimer read FTimer write FTimer;
property Lapso: Integer read GetLapso write SetLapso;
destructor Destroy; override;
end;

implementation

{ TButton }
constructor TButton.Create(AOwner: TComponent);
begin
inherited;
FLapso := 0;
FTimer := TTimer.Create(Self);
FTimer.Interval := 1000;
FTimer.Enabled := False;
FTimer.OnTimer := FTimerTimer;
end;

procedure TButton.FTimerTimer(Sender: TObject);
begin
Dec(FLapso, Timer.Interval);
Enabled := FLapso = 0;
Timer.Enabled := FLapso <> 0;
end;

function TButton.GetLapso: Integer;
begin
Result := FLapso;
end;

procedure TButton.SetLapso(const Value: Integer);
begin
if Value <> FLapso then
if Value > 0 then
FLapso := Value;
end;

destructor TButton.Destroy;
begin
FTimer.OnTimer := nil;
FTimer.Free;
inherited;
end;

end.


Ejemplo del uso:

unit Unit1;

interface

uses ...,
uButtonTimer; // última posición en el uses

type
TForm1 = class(TForm)
btnCinco: TButton;
procedure btnCincoClick(Sender: TObject);
...
end;
...

implementation

const
MINUTO = 1000 * 60;

procedure TForm1.btnCincoClick(Sender: TObject);
begin
btnCinco.Enabled := False;
btnCinco.Lapso := 5 * MINUTO;
btnCinco.Timer.Enabled := True;
end;
...


Saludos :)