A continuación te dejo un ejemplo MUY simple, pero que hace lo que necesitas.
Como verás, es un formulario llamado FMMain con tres TEdits y un TTimer.
* El TTimer (TUnSegundo) está puesto a 1000ms para que actualice el formulario cada 1 segundo.
* Los TEdits muestran los datos transformando las variables privadas TDateTime a string.
* Los datos se guardan en un archivo llamado ControlTiempo.ini que estará en el directorio Windows que corresponda según la versión de Windows instalada. Si quieres puedes ponerle una ruta fija o buscar la ruta de la aplicación.
Código Delphi
[-]
unit UFMMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TFMMain = class(TForm)
ETiempoContratado: TEdit;
ETiempoConsumido: TEdit;
ETiempoConexion: TEdit;
TUnSegundo: TTimer;
procedure FormCreate(Sender: TObject);
procedure TUnSegundoTimer(Sender: TObject);
private
InicioConexion, TiempoConsumidoAlIniciarAplicacion : TDateTime;
TiempoConexion, TiempoConsumido,TiempoContratado : TDateTime;
procedure ActualizaDatos;
public
end;
var
FMMain: TFMMain;
implementation
{$R *.dfm}
uses IniFiles;
procedure TFMMain.ActualizaDatos;
begin
TiempoConexion := Now - InicioConexion;
TiempoConsumido := TiempoConsumidoAlIniciarAplicacion + TiempoConexion;
ETiempoContratado.Text := TimeToStr(TiempoContratado);
ETiempoConsumido.Text := TimeToStr(TiempoConsumido);
ETiempoConexion.Text := TimeToStr(TiempoConexion);
if (TiempoContratado < TiempoConsumido) then
Close;
end;
procedure TFMMain.FormCreate(Sender: TObject);
var
Ini : TIniFile;
begin
InicioConexion := Now;
Ini := TIniFile.Create('ControlTiempo.ini');
try
TiempoContratado := StrToTime(Ini.ReadString('Datos', 'TiempoContratado', '00:00:00'));
TiempoConsumidoAlIniciarAplicacion := StrToTime(Ini.ReadString('Datos', 'TiempoConsumido', '00:00:00'));
finally
Ini.Free;
end;
ActualizaDatos;
TUnSegundo.Enabled := True;
end;
procedure TFMMain.TUnSegundoTimer(Sender: TObject);
var
Ini : TIniFile;
begin
ActualizaDatos;
Ini := TIniFile.Create('ControlTiempo.ini');
try
Ini.WriteString('Datos', 'TiempoConsumido', TimeToStr(TiempoConsumido));
finally
Ini.Free;
end;
end;
end.