Ver Mensaje Individual
  #12  
Antiguo 17-05-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Poné en un form un TTimer un TProgressBar y un TLabel y probá si este código hace más o menos lo que buscas:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    ProgressBar1: TProgressBar;
    Label1: TLabel;
    procedure Timer1Timer(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    FLapsoIni: Int64;
    FDTIni: TDateTime;
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

uses DateUtils;

function ObtenerLapso(const Ini,Fin: TDateTime): Int64;
var
  h,m,s: Word;
begin
  h:= 0;
  if DaysBetween(Ini,Fin) > 0 then
    h:= DaysBetween(Ini, Fin) * 24;
  h:= h + HourOf(Ini - Fin);
  m:= MinuteOf(Ini - Fin);
  s:= SecondOf(Ini - Fin);
  Result:= h*3600+m*60+s;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
{ Aca tendrías que asignar a FDTIni los valores de los SpinEdits,
  para simplificar el ejemplo lo asigno directamente sumando 2 minutos }
  FDTIni:= IncMinute(Now, 2); //  sumo 2 minutos
  FLapsoIni:= ObtenerLapso(Now, FDTIni); // Obtener lapso inicial
  Timer1.Enabled:= False;
  Timer1.Interval:= 1000;
  ProgressBar1.Max:= FLapsoIni;
  ProgressBar1.Step:= 1;
  Timer1.Enabled:= True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  LapsoAct: Int64;
begin
  LapsoAct:= ObtenerLapso(Now, FDTIni); // Obtener estado actual
  ProgressBar1.StepIt;
  Label1.Caption:= Format('%3.0f %%',[100-LapsoAct/FLapsoIni*100]);
  if  LapsoAct <= 0 then
  begin
    Timer1.Enabled:= False;
    MessageBeep(MB_ICONEXCLAMATION);
  end;
end;

end.
Como verás las pruebas las hice con minutos, si usaba días u horas estaría más seguro, pero la respuesta hubiera llegado un poco tarde...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 17-05-2011 a las 08:04:52.
Responder Con Cita