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.
|