Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Cómo hago un contador? (https://www.clubdelphi.com/foros/showthread.php?t=86675)

pr0sper0 15-09-2014 02:13:51

¿Cómo hago un contador?
 
Estoy haciendo un programa y me hace falta`ponerle un contador de tiempo que vaya en retroceso y cuando llegue a 0 el programa se pare, como hago para cuando cierre el programa y lo vuelva a abrir el contador este donde mismo estaba cuando lo cerre. Muchas gracis a los que puedan ayudarme.

Caral 15-09-2014 05:12:12

Hola
Es una pregunta dificil mas sin saber que hace tu programa o que es lo que quieres que este donde estaba la ultima vez
Te recomiendo que copies y peges el codigo aqui, asi te podran ayudar con mas bases.
Saludos

pr0sper0 15-09-2014 05:43:59

Hiiii
 
1 Archivos Adjunto(s)
mira es sencillo la form es esta yo quiero q donde dice horas contratadas si yo le asigno 10 Horas por ejemplo ella en el reloj rojo me las registre y al abrir la form me empiece a restar de esas x horas y cuando llegue a 0 la form no abra como lo hago.

newtron 15-09-2014 09:47:10

Hola, según dices tendrás que guardar el tiempo consumido cuando el programa se cierre bien en un fichero o en registro de windows, ya dependiendo del nivel de seguridad que necesites para que ese fichero pueda o no abrirse de forma fácil o borrarse tendrás que complicar más o menos el programa.

engranaje 15-09-2014 10:41:53

Yo en cierta ocasión recuerdo que tuve que hacer algo asi. Si no recuerdo mal lo que hacia era utilizar un record con la información de la última fechaHora de acceso, y la horas de uso que quedaban. En un timer dentro de la aplicación iba actualizando los datos de ese record y guardandolo en un fichero.
Al cargar la aplicación comprobaba que la hora fuera posterior a la última fechaHora de acceso. Igual en tu caso no es necesario pero yo necesitaba que la aplicación dejara de funcionar si la hora del sistema era anterior a la última fecha hora de acceso. Es más dentro del mismo procedimiento y antes de grabar la hora en el fichero comprobaba también que la fechaHora del sistema fuera posterior a la última grabada (ya digo que necesitaba protegerme de cambios que el usuario realizara sobre la fecha y hora del sistema tanto con la aplicación abierta como con ella cerrada).
La precaución que tomaba era poner el nombre menos sospechoso posible al fichero, guardarlo en el lugar menos sospechoso también y capturar dentro de un try except todo el trabajo con él mostrando un error propio y procurando evitar en todo caso que apareciera en pantalla la ruta del fichero si por algún motivo no era posible trabajar con él.

pr0sper0 16-09-2014 14:25:58

Hiiiiiiiii
 
Muchas gracias, serias tan amable de demostrarme todo eso atravez de codigo, el problem es q estoy familiarizandome con este lenguaje. De paso si tienes bibliografía por la cual pueda estudiar el mismo mandamela a k l a u s m i k a e l s o n 9 4 7 @ g m a i l . c o m , voy a agradecer tu ayuda, mandame un codigo de ejemplo de como tu lo harías, Gracias.

Casimiro Notevi 16-09-2014 14:58:23

Cita:

Empezado por pr0sper0 (Mensaje 481565)
Muchas gracias, serias tan amable de demostrarme todo eso atravez de codigo, el problem es q estoy familiarizandome con este lenguaje. De paso si tienes bibliografía por la cual pueda estudiar el mismo mandamela a klausmikaelson947 @ gmail.com , voy a agradecer tu ayuda, mandame un codigo de ejemplo de como tu lo harías, Gracias.

Por favor, sigue nuestras normas, no está permitido hacer peticiones a correos electrónicos, entonces ¿para qué están los foros?
Además, al poner tu email ahí, públicamente, te arriesgas a que los robots spammers lo capture y ya sabes lo que te espera.
Gracias y saludos.

duilioisola 16-09-2014 16:08:05

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
    { Private declarations }
    InicioConexion, TiempoConsumidoAlIniciarAplicacion : TDateTime;
    TiempoConexion, TiempoConsumido,TiempoContratado : TDateTime;
    procedure ActualizaDatos;
  public
    { Public declarations }
  end;

var
  FMMain: TFMMain;

implementation

{$R *.dfm}

uses IniFiles;

procedure TFMMain.ActualizaDatos;
begin
  // Calculo el tiempo de conexion
  TiempoConexion := Now - InicioConexion;
  TiempoConsumido := TiempoConsumidoAlIniciarAplicacion + TiempoConexion;

  // Actualizo el formulario
  ETiempoContratado.Text := TimeToStr(TiempoContratado);
  ETiempoConsumido.Text := TimeToStr(TiempoConsumido);
  ETiempoConexion.Text := TimeToStr(TiempoConexion);

  // Si el tiempo contratado se ha consumido cierro la aplciacion
  if (TiempoContratado < TiempoConsumido) then
     Close;
end;

procedure TFMMain.FormCreate(Sender: TObject);
var
  Ini : TIniFile;
begin
  // Hora de inicio de la conexion
  InicioConexion := Now;

  // Lee datos guardados
  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;

  // Inicio el Timer
  TUnSegundo.Enabled := True;
end;

procedure TFMMain.TUnSegundoTimer(Sender: TObject);
var
  Ini : TIniFile;
begin
  ActualizaDatos;

  // Actualizo el tiempo consumido
  Ini := TIniFile.Create('ControlTiempo.ini');
  try
     Ini.WriteString('Datos', 'TiempoConsumido', TimeToStr(TiempoConsumido));
  finally
     Ini.Free;
  end;
end;

end.

pr0sper0 16-09-2014 19:49:43

Hiiii
 
Muchas gracias amigo me sirvio de mucho.


La franja horaria es GMT +2. Ahora son las 17:43:29.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi