Décompte de temps

TheBOdybOarDMaN Messages postés 54 Date d'inscription samedi 25 décembre 2004 Statut Membre Dernière intervention 24 octobre 2006 - 11 oct. 2006 à 21:17
NeoFacto Messages postés 6 Date d'inscription mardi 12 septembre 2006 Statut Membre Dernière intervention 15 octobre 2006 - 15 oct. 2006 à 17:50
Bonsoir a tous

J'ai longtemps cherché comment faire pour declencher une action a une heure donnée par l'utilisateur mais je n'ai encore rien trouvé donc restreint a demander ici :) enfin c fait pour sa=)

il faudrai faire un décompte du temps restant avant l'action demandée

voila si quelqu'un a une petite idée merci beaucoup..

2 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
12 oct. 2006 à 02:39
Il faut soit utiliser un timer, soit utiliser les taches planifiés.
Pour la gestion de l'heure, regarde le type TDateTime.

Tu peux aussi regarder les (trop) nombreuses sources de ce site qui permettent de rebooter l'ordi à une période
choisie. Tu devrais trouver ce que tu cherche.
0
NeoFacto Messages postés 6 Date d'inscription mardi 12 septembre 2006 Statut Membre Dernière intervention 15 octobre 2006
15 oct. 2006 à 17:50
Voilà le code d'une unité qui fait, je crois, ce que tu veux avoir comme résultat.
On entre heure/minute/seconde dans des edits et le programme calcul le temps restant dès qu'on appuie sur un bouton.
Si tu as des questions, n'hésite pas à me les poser...
                   En espérant que ça t'aidera, neofacto




unit TempsRestant_Unit;

interface

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

type
  TMainForm = class(TForm)
    LbPlanifierAction: TLabel;
    EdHeures: TEdit;
    EdMinutes: TEdit;
    EdSecondes: TEdit;
    LbHeures: TLabel;
    LbMinutes: TLabel;
    LbSecondes: TLabel;
    LbIndicationTemps: TLabel;
    BtPlanifier: TButton;
    LbTempsRestant: TLabel;
    TimerCalcul: TTimer;
    procedure BtPlanifierClick(Sender: TObject);
    procedure TimerCalculTimer(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var //déclaration des variables globales
  MainForm : TMainForm;
  HeureAction, MinuteAction, SecondeAction : Word; //contient les heures, les
                                                   //minutes et les secondes
                                                   //de l'action planifiée

implementation

{$R *.DFM}

{
  lancement de la procédure de planification
  on enregistre l'heure de l'action planfiée
}
procedure TMainForm.BtPlanifierClick(Sender: TObject);
begin
  //initialisation des variables globales
  HeureAction := StrToInt(EdHeures.Text);
  MinuteAction := StrToInt(EdMinutes.Text);
  SecondeAction := StrToInt(EdSecondes.Text);

  //lancement du Timer qui calcul le temps restant
  TimerCalcul.Enabled := True;
end;

{
  calcul du temps restant jusqu'à l'action planifiée
}
procedure TMainForm.TimerCalculTimer(Sender: TObject);
var //déclaration des variables
  HeureResultat, MinuteResultat, SecondeResultat : Word; //contient les heures,
                                                         //les minutes et les
                                                         //secondes du temps
                                                         //restant
  TempsSysteme : TDateTime; //contient l'heure système
  HeureSysteme, MinuteSysteme, SecondeSysteme, MSecSysteme : Word;
                                               //sontient les heures, les
                                               //minutes, les secondes et les
                                               //millisecondes du système
begin
  //récupération du temps système
  TempsSysteme := Now;
  DecodeTime(TempsSysteme,HeureSysteme,MinuteSysteme,SecondeSysteme,
    MSecSysteme);

  //comparaison du temps système et de temps de l'action planifiée
  if HeureAction < HeureSysteme
    then
      HeureResultat := 24 + HeureAction - HeureSysteme
    else
      HeureResultat := HeureAction - HeureSysteme;
  if MinuteAction < MinuteSysteme
    then
      MinuteResultat := 60 + MinuteAction - MinuteSysteme
    else
      MinuteResultat := MinuteAction - MinuteSysteme;
  if SecondeAction < SecondeSysteme
    then
      SecondeResultat := 60 + SecondeAction - SecondeSysteme
    else
      SecondeResultat := SecondeAction - SecondeSysteme;

  if SecondeSysteme + SecondeResultat >= 60
    then
      dec(MinuteResultat);
  if MinuteSysteme + MinuteResultat >= 60
    then
      dec(HeureResultat);

  //affichage du résultat
  if (HeureResultat = 0) and (MinuteResultat < 10)
    then
      LbTempsRestant.Font.Color := clRed
    else
      LbTempsRestant.Font.Color := clBlack;
  LbTempsRestant.Caption := IntToStr(HeureResultat) + ':' +
    IntToStr(minuteResultat) + ':' + IntToStr(SecondeResultat);

  //vérification que l'action n'est pas arrivée  if (HeureResultat 0) and (MinuteResultat 0) and (SecondeResultat = 0)
    then
      begin
        TimerCalcul.Enabled := False;
        LbTempsRestant.Caption := 'Compte à rebour terminé';
      end;
end;

end.
0
Rejoignez-nous